If monotonicity is imposed, the quadratic B-spline basis functions are used. If the constraints include convexity (or concavity), the cubic B-spline basis functions are used.
The following code has arguments: type of shape constraint, x, y, k=#knots, and number of MCMC loops.
It returns the fit and point-wise confidence intervals at the x-values.
Here is an example implementation, fitting a monotone convex curve to a dataset generated from an exponential function.
x=runif(50)
y=exp(2*x)+rnorm(50)
ans=brspl(5,x,y,3,5000)
plot(x,y)
lines(sort(x),ans$fit[order(x)])
lines(sort(x),ans$lower[order(x)],lty=3)
lines(sort(x),ans$upper[order(x)],lty=3)
For example, suppose we want to fit parallel increasing curves, so that a categorical covariate must be included in the smooth monotone regression. We construct k-1 dummy variables, where k is the number of levels of the covariate, and put these as columns in the matrix z. Note that the columns of z and the vector x must for a linearly independent set, and the one-vector must not be in the span of these vectors.
Here is an example implementation, fitting three monotone convex curves to a data set generate from an exponential function.
x=1:50/50
x2=trunc(runif(50)*3)+1
z=matrix(0,nrow=50,ncol=2)
z[x2==2,1]=1
z[x2==3,2]=1
y=exp(2*x)+x2+rnorm(50)
ans=brspl(5,x,y,z,3,5000)
plot(x,y,col=x2)
lines(x[x2==1],ans$fit[x2==1])
lines(x[x2==2],ans$fit[x2==2],col=2)
lines(x[x2==3],ans$fit[x2==3],col=3)
meyer@stat.colostate.edu