mono.con {mgcv} | R Documentation

## Monotonicity constraints for a cubic regression spline.

### Description

Finds linear constraints sufficient for monotonicity (and optionally upper and/or lower boundedness) of a cubic regression spline. The basis representation assumed is that given by the `gam`, `"cr"` basis: that is the spline has a set of knots, which have fixed x values, but the y values of which constitute the parameters of the spline.

### Usage

    mono.con(x,up=TRUE,lower=NA,upper=NA)

### Arguments

`x` | The array of knot locations.
`up` | If `TRUE` then the constraints imply increase, if `FALSE` then decrease.
`lower` | This specifies the lower bound on the spline unless it is `NA` in which case no lower bound is imposed.
`upper` | This specifies the upper bound on the spline unless it is `NA` in which case no upper bound is imposed.

### Details

Consider the natural cubic spline passing through the points: (x_i,p_i), i=1..n. Then it is possible to find a relatively small set of linear constraints on p sufficient to ensure monotonicity (and bounds if required): Ap>=b. Details are given in Wood (1994). This function returns a list containing `A` and `b`.

### Value

The function returns a list containing constraint matrix `A` and constraint vector `b`.

### Author(s)

Simon N. Wood simon@stats.gla.ac.uk

### References

Gill, P.E., Murray, W. and Wright, M.H. (1981) Practical Optimization. Academic Press, London.

Wood, S.N. (1994) Monotonic smoothing splines fitted by cross validation SIAM Journal on Scientific Computing 15(5):1126-1133

http://www.stats.gla.ac.uk/~simon/

### See Also

`mgcv` `pcls`

### Examples

    # Fit a monotonic penalized regression spline .....

    # Generate data from a monotonic truth.
    set.seed(10);x<-runif(100)*4-1;x<-sort(x);
    f<-exp(4*x)/(1+exp(4*x));y<-f+rnorm(100)*0.1;plot(x,y)
    dat<-data.frame(x=x,y=y)
    # Show regular spline fit (and save fitted object)
    f.ug<-gam(y~s(x,k=10,bs="cr"));lines(x,fitted(f.ug))
    # Create Design matrix, constriants etc. for monotonic spline....
    gam.setup(y~s(x,k=10,bs="cr")-1,dat,fit.method="mgcv")->G;
    F<-mono.con(G$smooth[[1]]$xp);
    G$Ain<-F$A;G$bin<-F$b;G$C<-matrix(0,0,0);G$sp<-f.ug$sp;
    G$p<-G$smooth[[1]]$xp;G$y<-y;G$w<-y*0+1

    p<-pcls(G);  # fit spline (using s.p. from unconstrained fit)

    # now modify the gam object from unconstrained fit a little, to use it
    # for predicting and plotting constrained fit.
    p<-c(0,p);f.ug$coefficients<-p;
    x<-seq(min(x),max(x),length=200)
    lines(x,predict.gam(f.ug,newdata=data.frame(x=x)),col=2)

[Package Contents]