Produces the derivatives of given order of B-splines.
Usage
dbs(
x,
derivs = 1L,
df = NULL,
knots = NULL,
degree = 3L,
intercept = FALSE,
Boundary.knots = NULL,
...
)
Arguments
- x
The predictor variable. Missing values are allowed and will be returned as they are.
- derivs
A positive integer specifying the order of derivative. The default value is
1L
for the first derivative.- df
Degree of freedom that equals to the column number of the returned matrix. One can specify
df
rather thanknots
, then the function choosesdf - degree - as.integer(intercept)
internal knots at suitable quantiles ofx
ignoring missing values and thosex
outside of the boundary. If internal knots are specified viaknots
, the specifieddf
will be ignored.- knots
The internal breakpoints that define the splines. 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
A nonnegative integer specifying the degree of the piecewise polynomial. The default value is
3
for cubic splines. Zero degree is allowed for piecewise constant basis functions.- intercept
If
TRUE
, the complete basis matrix will be returned. Otherwise, the first basis will be excluded from the output.- Boundary.knots
Boundary points at which to anchor the splines. By default, they are the range of
x
excludingNA
. If bothknots
andBoundary.knots
are supplied, the basis parameters do not depend onx
. Data can extend beyondBoundary.knots
.- ...
Optional arguments that are not used.
Value
A numeric matrix of 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
mainly for other functions in this package.
Details
This function provides a more user-friendly interface and a more consistent
handling for NA
's than splines::splineDesign()
for derivatives
of B-splines. The implementation is based on the closed-form recursion
formula. At knots, the derivative is defined to be the right derivative
except at the right boundary knot.
Examples
library(splines2)
x <- seq.int(0, 1, 0.01)
knots <- c(0.2, 0.4, 0.7)
## the second derivative of cubic B-splines with three internal knots
dMat <- dbs(x, derivs = 2L, knots = knots, intercept = TRUE)
## compare with the results from splineDesign
ord <- attr(dMat, "degree") + 1L
bKnots <- attr(dMat, "Boundary.knots")
aKnots <- c(rep(bKnots[1L], ord), knots, rep(bKnots[2L], ord))
res <- splines::splineDesign(aKnots, x = x, derivs = 2L)
stopifnot(all.equal(res, dMat, check.attributes = FALSE))