# bs

##### B-Spline Basis for Polynomial Splines

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

- Keywords
- smooth

##### 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`

, corresponds to*no*inner knots, i.e.,`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 `spline.des`

.
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()`

.

##### 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

##### Examples

`library(splines)`

```
# NOT RUN {
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)))
# }
```

*Documentation reproduced from package splines, version 3.4.3, License: Part of R 3.4.3*