R: B-Spline Basis for Polynomial Splines

bs {splines} | R Documentation

## B-Spline Basis for Polynomial Splines

### Description

Generate the B-spline basis matrix for a polynomial spline.

### Usage

    bs(x, df = NULL, knots = NULL, degree = 3, intercept = FALSE,
       Boundary.knots = range(x))

### Arguments

`x` | the predictor variable. Missing values are allowed.
`df` | degrees of freedom; one can specify `df` rather than `knots`; `bs()` then chooses `df-degree` (minus one if there is an intercept) knots at suitable quantiles of `x` (which will ignore missing values). The default, `NULL`, takes the number of inner knots as `length(knots)`. If that is zero as per default, that corresponds to `df = degree - intercept`.
`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. See also `Boundary.knots`.
`degree` | degree of the piecewise polynomial—default is `3` for cubic splines.
`intercept` | if `TRUE`, an intercept is included in the basis; default is `FALSE`.
`Boundary.knots` | boundary points at which to anchor the B-spline basis (default 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`.

### Details

`bs` is based on the function `splineDesign`. It generates a basis matrix for representing the family of piecewise polynomials with the specified interior knots and degree, evaluated at the values of `x`. A primary use is in modeling formulas to directly specify a piecewise polynomial term in a model.

When `Boundary.knots` are set inside `range(x)`, `bs()` now uses a ‘pivot’ inside the respective boundary knot which is important for derivative evaluation. In R versions <= 3.2.2, the boundary knot itself had been used as pivot, which lead to somewhat wrong extrapolations.

### Value

A matrix of dimension `c(length(x), df)`, where either `df` was supplied or if `knots` were supplied, `df = length(knots) + degree` plus one if there is an intercept. Attributes are returned that correspond to the arguments to `bs`, and explicitly give the `knots`, `Boundary.knots` etc for use by `predict.bs()`.

### Author(s)

Douglas Bates and Bill Venables. Tweaks by R Core, and a patch fixing extrapolation “outside” `Boundary.knots` by Trevor Hastie.

### References

Hastie, T. J. (1992) Generalized additive models. Chapter 7 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.

### See Also

`ns`, `poly`, `smooth.spline`, `predict.bs`, `SafePrediction`

### Examples

    require(stats); require(graphics)
    bs(women$height, df = 5)
    summary(fm1 <- lm(weight ~ bs(height, df = 5), data = women))

    ## example of safe prediction
    plot(women, xlab = "Height (in)", ylab = "Weight (lb)")
    ht <- seq(57, 73, length.out = 200)
    lines(ht, predict(fm1, data.frame(height = ht)))

[Package splines version 4.0.5 Index]