R: Design Matrix for B-splines

splineDesign {splines} | R Documentation

## Design Matrix for B-splines

### Description

Evaluate the design matrix for the B-splines defined by `knots` at the values in `x`.

### Usage

    splineDesign(knots, x, ord = 4, derivs, outer.ok = FALSE,
                 sparse = FALSE)
    spline.des  (knots, x, ord = 4, derivs, outer.ok = FALSE,
                 sparse = FALSE)

### Arguments

`knots` | a numeric vector of knot positions (which will be sorted increasingly if needed).
`x` | a numeric vector of values at which to evaluate the B-spline functions or derivatives. Unless `outer.ok` is true, the values in `x` must be between the “inner” knots `knots[ord]` and `knots[ length(knots) - (ord-1)]`.
`ord` | a positive integer giving the order of the spline function. This is the number of coefficients in each piecewise polynomial segment, thus a cubic spline has order 4. Defaults to 4.
`derivs` | an integer vector with values between `0` and `ord - 1`, conceptually recycled to the length of `x`. The derivative of the given order is evaluated at the `x` positions. Defaults to zero (or a vector of zeroes of the same length as `x`).
`outer.ok` | logical indicating if `x` should be allowed outside the inner knots, see the `x` argument.
`sparse` | logical indicating if the result should inherit from class `"sparseMatrix"` (from package Matrix).

### Value

A matrix with `length(x)` rows and `length(knots) - ord` columns. The i'th row of the matrix contains the coefficients of the B-splines (or the indicated derivative of the B-splines) defined by the `knot` vector and evaluated at the i'th value of `x`. Each B-spline is defined by a set of `ord` successive knots so the total number of B-splines is `length(knots) - ord`.

### Note

The older `spline.des` function takes the same arguments but returns a list with several components including `knots`, `ord`, `derivs`, and `design`. The `design` component is the same as the value of the `splineDesign` function.

### Author(s)

Douglas Bates and Bill Venables

### Examples

    require(graphics)
    splineDesign(knots = 1:10, x = 4:7)
    splineDesign(knots = 1:10, x = 4:7, deriv = 1)
    ## visualize band structure
    Matrix::drop0(zapsmall(6*splineDesign(knots = 1:40, x = 4:37, sparse = TRUE)))

    knots <- c(1,1.8,3:5,6.5,7,8.1,9.2,10)  # 10 => 10-4 = 6 Basis splines
    x <- seq(min(knots)-1, max(knots)+1, length.out = 501)
    bb <- splineDesign(knots, x = x, outer.ok = TRUE)

    plot(range(x), c(0,1), type = "n", xlab = "x", ylab = "",
         main =  "B-splines - sum to 1 inside inner knots")
    mtext(expression(B[j](x) *"  and "* sum(B[j](x), j == 1, 6)), adj = 0)
    abline(v = knots, lty = 3, col = "light gray")
    abline(v = knots[c(4,length(knots)-3)], lty = 3, col = "gray10")
    lines(x, rowSums(bb), col = "gray", lwd = 2)
    matlines(x, bb, ylim = c(0,1), lty = 1)

[Package splines version 4.0.5 Index]