blob: 58d4407ed488ef3daf358788b5879bf00f798be6 [file] [log] [blame] [edit]
% File src/library/splines/man/splineDesign.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2015 R Core Team
% Distributed under GPL 2 or later
\name{splineDesign}
\alias{splineDesign}
\alias{spline.des}
\title{Design Matrix for B-splines}
\description{
Evaluate the design matrix for the B-splines defined by \code{knots}
at the values in \code{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{
\item{knots}{a numeric vector of knot positions (which will be sorted
increasingly if needed).}
\item{x}{a numeric vector of values at which to evaluate the B-spline
functions or derivatives. Unless \code{outer.ok} is true, the
values in \code{x} must be between the \dQuote{inner} knots
\code{knots[ord]} and \code{knots[ length(knots) - (ord-1)]}.}
\item{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.}
\item{derivs}{an integer vector with values between \code{0} and
\code{ord - 1}, conceptually recycled to the length of \code{x}.
The derivative of the given order is evaluated at the \code{x}
positions. Defaults to zero (or a vector of zeroes of the same
length as \code{x}).}
\item{outer.ok}{logical indicating if \code{x} should be allowed
outside the \emph{inner} knots, see the \code{x} argument.}
\item{sparse}{logical indicating if the result should inherit from class
\code{"\link[Matrix:sparseMatrix-class]{sparseMatrix}"} (from package \CRANpkg{Matrix}).}
% \code{\linkS4class{sparseMatrix}} (from package \CRANpkg{Matrix}).}
}
\value{
A matrix with \code{length(x)} rows and \code{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 \code{knot} vector and evaluated at the i'th value of \code{x}.
Each B-spline is defined by a set of \code{ord} successive knots so
the total number of B-splines is \code{length(knots) - ord}.
}
\note{The older \code{spline.des} function takes the same arguments but
returns a list with several components including \code{knots},
\code{ord}, \code{derivs}, and \code{design}. The \code{design}
component is the same as the value of the \code{splineDesign}
function.
}
\author{Douglas Bates and Bill Venables}
\examples{
require(graphics)
splineDesign(knots = 1:10, x = 4:7)
splineDesign(knots = 1:10, x = 4:7, derivs = 1)
## visualize band structure
\donttest{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)
}
\keyword{ models }