Getting Started with crs

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:

A small spline regression example

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 seconds

A simple prediction plot

plot(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)

When to use crs

Use 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:

Where to go next