R: C-Spline Basis for Polynomial Splines

cSpline {splines2} | R Documentation

## C-Spline Basis for Polynomial Splines

### Description

Generates the convex regression spline (called C-spline) basis matrix by integrating I-spline basis for a polynomial spline or the corresponding derivatives.

### Usage

    cSpline(
      x,
      df = NULL,
      knots = NULL,
      degree = 3L,
      intercept = TRUE,
      Boundary.knots = NULL,
      derivs = 0L,
      scale = TRUE,
      ...
    )

### Arguments

`x` | The predictor variable. Missing values are allowed and will be returned as they are.
`df` | Degree of freedom that equals to the column number of returned matrix. One can specify `df` rather than `knots`, then the function chooses `df - degree - as.integer(intercept)` internal knots at suitable quantiles of `x` ignoring missing values and those `x` outside of the boundary. If internal knots are specified via `knots`, the specified `df` will be ignored.
`knots` | The internal breakpoints that define the spline. The default is `NULL`, which results in a basis for ordinary polynomial regression. Typical values are the mean or median for one knot, quantiles for more knots.
`degree` | The degree of C-spline defined to be the degree of the associated M-spline instead of actual polynomial degree. For example, C-spline basis of degree 2 is defined as the scaled double integral of associated M-spline basis of degree 2.
`intercept` | If `TRUE` by default, all spline bases are included. Notice that when using C-Spline for shape-restricted regression, `intercept = TRUE` should be set even when an intercept term is considered additional to the spline bases in the model.
`Boundary.knots` | Boundary points at which to anchor the spline basis. By default, they are the range of the non-`NA` data. If both `knots` and `Boundary.knots` are supplied, the basis parameters do not depend on `x`. Data can extend beyond `Boundary.knots`.
`derivs` | A non-negative integer specifying the order of derivatives of C-splines. The default value is `0L` for C-spline bases.
`scale` | Logical value (`TRUE` by default) indicating whether scaling on C-spline basis is required. If TRUE, C-spline basis is scaled to have unit height at right boundary knot; the corresponding I-spline and M-spline basis matrices shipped in attributes are also scaled to the same extent.
`...` | Optional arguments that are not used.

### Details

It is an implementation of the close form C-spline basis derived from the recursion formula of I-splines and M-splines.

### Value

A numeric matrix with `length(x)` rows and `df` columns if `df` is specified or `length(knots) + degree + as.integer(intercept)` columns if `knots` are specified instead. Attributes that correspond to the arguments specified are returned for usage of other functions in this package.

### References

Meyer, M. C. (2008). Inference using shape-restricted regression splines. The Annals of Applied Statistics, 1013–1033. Chicago

### See Also

`iSpline` for I-splines; `mSpline` for M-splines.

### Examples

    library(splines2)

    x <- seq.int(0, 1, 0.01)
    knots <- c(0.3, 0.5, 0.6)

    ### when 'scale = TRUE' (by default)
    csMat <- cSpline(x, knots = knots, degree = 2)

    par(mar = c(2.5, 2.5, 0.2, 0.1), mgp = c(1.5, 0.5, 0))
    matplot(x, csMat, type = "l", ylab = "C-spline basis")
    abline(v = knots, lty = 2, col = "gray")
    isMat <- deriv(csMat)
    msMat <- deriv(csMat, derivs = 2)
    matplot(x, isMat, type = "l", ylab = "scaled I-spline basis")
    matplot(x, msMat, type = "l", ylab = "scaled M-spline basis")

    ### when 'scale = FALSE'
    csMat <- cSpline(x, knots = knots, degree = 2, scale = FALSE)

    ## the corresponding I-splines and M-splines (with same arguments)
    isMat <- iSpline(x, knots = knots, degree = 2)
    msMat <- mSpline(x, knots = knots, degree = 2, intercept = TRUE)

    ## or using deriv methods (more efficient)
    isMat1 <- deriv(csMat)
    msMat1 <- deriv(csMat, derivs = 2)

    ## equivalent
    stopifnot(all.equal(isMat, isMat1, check.attributes = FALSE))
    stopifnot(all.equal(msMat, msMat1, check.attributes = FALSE))

[Package splines2 version 0.3.1 Index]