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), warn.outside = TRUE)
Arguments
x |
the predictor variable. Missing values are allowed. |
df |
degrees of freedom; one can specify |
knots |
the internal breakpoints that define the
spline. The default is |
degree |
degree of the piecewise polynomial—default is |
intercept |
if |
Boundary.knots |
boundary points at which to anchor the B-spline
basis (default the range of the non- |
warn.outside |
|
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
\le
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)))