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

x

the predictor variable. Missing values are allowed.

df

degrees of freedom; one can specify *no* inner knots, i.e.,

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

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

.`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 `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.`ns`

, `poly`

, `smooth.spline`

,
`predict.bs`

, `SafePrediction`

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