This vignette is meant to be the minimal package-side introduction to
crs. It focuses on one clean first run and a simple
reminder of where spline methods fit relative to the rest of the
ecosystem.
Longer conceptual and tuning material is better carried by the gallery site:
library(crs)
#> crs 0.15-41: vignette("crs_getting_started", package = "crs")
set.seed(42)
n <- 250
x1 <- runif(n)
x2 <- runif(n)
y <- sin(2 * pi * x1) + x2 + rnorm(n, sd = 0.2)
dat <- data.frame(y, x1, x2)
fit <- crs(y ~ x1 + x2, data = dat)
summary(fit)
#> Call:
#> crs.formula(formula = y ~ x1 + x2, data = dat)
#>
#> Indicator Bases/B-spline Bases Regression Spline
#>
#> There are 2 continuous predictors
#> Spline degree/number of segments for x1: 6/1
#> Spline degree/number of segments for x2: 1/1
#> Model complexity proxy: degree-knots
#> Knot type: quantiles
#> Basis type: additive
#> Pruning of final model: FALSE
#> Training observations: 250
#> Rank of model frame: 8
#> Trace of smoother matrix: 8
#>
#> Residual standard error: 0.194 on 242 degrees of freedom
#> Multiple R-squared: 0.9428, Adjusted R-squared: 0.9411
#> F-statistic: 569.6 on 7 and 242 DF, p-value: < 2.2e-16
#>
#> Cross-validation score: 0.039118
#> Number of multistarts: 5
#> Estimation time: 0.5 secondsplot(x1, y, cex = 0.35, col = "grey")
grid_x1 <- seq(min(x1), max(x1), length.out = 200)
newdata <- data.frame(
x1 = grid_x1,
x2 = mean(x2)
)
pred <- predict(fit, newdata = newdata)
lines(grid_x1, pred, col = 2, lwd = 2)crsUse crs when regression splines, derivative structure,
or shape restrictions are the natural tool. For kernel-based workflows,
see the np package instead.
Two common next stops after this first vignette are:
?crssigtest for spline significance testing,If cross-validated spline search feels expensive, begin by confirming the modeling problem on a smaller example first. Then narrow the search only if needed by restricting options such as degree or knot complexity.
It is also useful to remember that crs contains simple
linear-regression-style specifications as special cases when the basis
is restricted appropriately.
?crs and ?crssigtest for help pagesdemo(package = "crs")