This function generates the monotone regression spline (or simply called M-spline) basis matrix for a polynomial spline or its derivatives of given order.

mSpline(x, df = NULL, knots = NULL, degree = 3L, intercept = FALSE,
Boundary.knots = range(x, na.rm = TRUE), derivs = 0L, ...)

## Arguments

x The predictor variable. Missing values are allowed and will be returned as they were. Degrees of freedom. One can specify df rather than knots, then the function 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". 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. Non-negative integer degree of the piecewise polynomial. The default value is 3 for cubic splines. Zero degree is allowed for piecewise constant basis. If TRUE, an intercept is included in the basis; Default is FALSE. Boundary points at which to anchor the M-spline basis. By default, they are 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. A non-negative integer specifying the order of derivatives of M-splines. The default value is 0L for M-spline bases. Optional arguments for future usage.

## Value

A matrix of dimension length(x) by df = degree + length(knots) (plus one if intercept is included). Attributes that correspond to the arguments specified are returned for usage of other functions in this package.

## Details

It is an implementation of the close form M-spline basis based on relationship between M-spline basis and B-spline basis. In fact, M-spline basis is a rescaled version of B-spline basis. Internally, it calls function bSpline and generates a basis matrix for representing the family of piecewise polynomials with the specified interior knots and degree, evaluated at the values of x.

## References

Ramsay, J. O. (1988). Monotone regression splines in action. Statistical science, 3(4), 425--441.

predict.mSpline for evaluation at given (new) values; deriv.mSpline for derivative method; bSpline for B-splines; iSpline for I-splines; cSpline for C-splines.

## Examples

## Example given in the reference paper by Ramsay (1988)
library(splines2)
x <- seq.int(0, 1, 0.01)
knots <- c(0.3, 0.5, 0.6)
msMat <- mSpline(x, knots = knots, degree = 2, intercept = TRUE)

library(graphics)
matplot(x, msMat, type = "l", ylab = "M-spline basis")abline(v = knots, lty = 2, col = "gray")
## derivatives of M-splines
dmsMat <- mSpline(x, knots = knots, degree = 2,
intercept = TRUE, derivs = 1)
## or using the 'deriv' method
dmsMat1 <- deriv(msMat)
stopifnot(all.equal(dmsMat, dmsMat1, check.attributes = FALSE))