bsplines: B-Splines

View source: R/bsplines.R

bsplinesR Documentation

B-Splines

Description

An implementation of Carl de Boor's recursive algorithm for building B-splines.

Usage

bsplines(x, iknots = NULL, df = NULL, bknots = range(x), order = 4L)

Arguments

x

a numeric vector

iknots

internal knots

df

degrees of freedom: sum of the order and internal knots. Ignored if iknots is specified.

bknots

boundary knot locations, defaults to range(x).

order

order of the piecewise polynomials, defaults to 4L.

Details

There are several differences between this function and bs.

The most important difference is how the two methods treat the right-hand end of the support. bs uses a pivot method to allow for extrapolation and thus returns a basis matrix where non-zero values exist on the max(Boundary.knots) (bs version of bsplines's bknots). bsplines use a strict definition of the splines where the support is open on the right hand side, that is, bsplines return right-continuous functions.

Additionally, the attributes of the object returned by bsplines are different from the attributes of the object returned by bs. See the vignette(topic = "cpr", package = "cpr") for a detailed comparison between the bsplines and bs calls and notes about B-splines in general.

References

C. de Boor, "A practical guide to splines. Revised Edition," Springer, 2001.

H. Prautzsch, W. Boehm, M. Paluszny, "Bezier and B-spline Techniques," Springer, 2002.

See Also

plot.cpr_bs for plotting the basis, bsplineD for building the basis matrices for the first and second derivative of a B-spline.

See update_bsplines for info on a tool for updating a cpr_bs object. This is a similar method to the update function from the stats package.

vignette(topic = "cpr", package = "cpr") for details on B-splines and the control polygon reduction method.

Examples

# build a vector of values to transform
xvec <- seq(-3, 4.9999, length = 100)

# cubic b-spline
bmat <- bsplines(xvec, iknots = c(-2, 0, 1.2, 1.2, 3.0), bknots = c(-3, 5))
bmat

# plot the splines
plot(bmat)                # each spline will be colored by default
plot(bmat, color = FALSE) # black and white plot
plot(bmat, color = FALSE) + ggplot2::aes(linetype = spline) # add a linetype

# Axes
# The x-axis, by default, show the knot locations.  Other options are numeric
# values, and/or to use a second x-axis

plot(bmat, show_xi = TRUE,  show_x = FALSE) # default, knot, symbols, on lower
                                            # axis

plot(bmat, show_xi = FALSE, show_x = TRUE)  # Numeric value for the knot
                                            # locations

plot(bmat, show_xi = TRUE,  show_x = TRUE)  # symbols on bottom, numbers on top

# quadratic splines
bmat <- bsplines(xvec, iknots = c(-2, 0, 1.2, 1.2, 3.0), order = 3L)
bmat
plot(bmat) + ggplot2::ggtitle("Quadratic B-splines")


dewittpe/cpr documentation built on Feb. 16, 2024, 1:11 p.m.