smooth.spline {modreg} | R Documentation |
Fit a Smoothing Spline
Description
Fits a cubic smoothing spline to the supplied data.
Usage
smooth.spline(x, y, w = rep(1, length(x)), df = 5, spar = 0,
cv = FALSE, all.knots = FALSE, df.offset = 0, penalty = 1)
Arguments
x |
a vector giving the values of the predictor variable, or a list or a two-column matrix specifying x and y. |
y |
responses. If |
w |
optional vector of weights |
df |
the desired equivalent number of degrees of freedom (trace of the smoother matrix). |
spar |
smoothing parameter, typically in |
cv |
ordinary ( |
all.knots |
if |
df.offset |
allows the degrees of freedom to be increased by
|
penalty |
the coefficient of the penalty for degrees of freedom in the GCV criterion. |
Details
The x
vector should contain at least ten distinct values.
The computational \lambda
used (as a function of
s=spar
) is
\lambda = r * 256^{3 s - 1}
where
r = tr(X' W^2 X) / tr(\Sigma)
,
\Sigma
is the matrix given by
\Sigma_{ij} = \int B_i''(t) B_j''(t) dt
,
X
is given by X_{ij} = B_j(x_i)
,
W^2
is the diagonal matrix of scaled weights, W =
diag(w)/n
(i.e., the identity for default weights),
and B_k(.)
is the k
-th B-spline.
Note that with these definitions, f_i = f(x_i)
, and the B-spline
basis representation f = X c
(i.e. c
is
the vector of spline coefficients), the penalized log likelihood is
L = (y - f)' W^2 (y - f) + \lambda c' \Sigma c
, and hence
c
is the solution of the (ridge regression)
(X' W^2 X + \lambda \Sigma) c = X' W^2 y
.
If spar
is missing or 0, the value of df
is used to
determine the degree of smoothing. If both are missing, leave-one-out
cross-validation is used to determine \lambda
.
The ‘generalized’ cross-validation method will work correctly when
there are duplicated points in x
. However, it is ambiguous what
leave-one-out cross-validation means with duplicated points, and the
internal code uses an approximation that involves leaving out groups
of duplicated points. cv=TRUE
is best avoided in that case.
Value
An object of class "smooth.spline"
with components
x |
the distinct |
y |
the fitted values corresponding to |
w |
the weights used at the unique values of |
yin |
the y values used at the unique |
lev |
leverages, the diagonal values of the smoother matrix. |
cv.crit |
(generalized) cross-validation score. |
pen.crit |
penalized criterion |
df |
equivalent degrees of freedom used. |
spar |
the value of |
fit |
list for use by |
call |
the matched call. |
Author(s)
B.D. Ripley
See Also
predict.smooth.spline
Examples
data(cars)
attach(cars)
plot(speed, dist, main = "data(cars) & smoothing splines")
cars.spl <- smooth.spline(speed, dist)
(cars.spl)
## This example has duplicate points, so avoid cv=TRUE
lines(cars.spl, col = "blue")
lines(smooth.spline(speed, dist, df=10), lty=2, col = "red")
legend(5,120,c(paste("default [C.V.] => df =",round(cars.spl$df,1)),
"s( * , df = 10)"), col = c("blue","red"), lty = 1:2,
bg='bisque')
detach()