Fits a smoothing spline robustly using the L_1 norm. Currently, the
algorithm is an iterative reweighted smooth spline algorithm which
calls smooth.spline(x,y,w,...) at each iteration with the weights
w equal to the inverse of the absolute value of the residuals for
the last iteration step.
a vector giving the values of the predictor variable, or a
list or a two-column matrix specifying x and y.
If x is of class smooth.spline then x$x is used
as the x values and x$yin are used as the y
values.
y
responses. If y is missing, the responses are assumed to be
specified by x.
w
a vector of weights the same length as x giving the weights
to use for each element of x. Default value is equal weight
to all values.
...
Other arguments passed to smooth.spline.
minIter
the minimum number of iterations used to fit the smoothing
spline robustly. Default value is 3.
maxIter
the maximum number of iterations used to fit the smoothing
spline robustly. Default value is 25.
sdCriteria
Convergence criteria, which the difference between the
standard deviation of the residuals between two consecutive iteration
steps. Default value is 2e-4.
reps
Small positive number added to residuals to avoid division by
zero when calculating new weights for next iteration.
tol
Passed to smooth.spline (R >= 2.14.0).
plotCurves
If TRUE, the fitted splines are added to the current
plot, otherwise not.
Value
Returns an object of class smooth.spline.
Author(s)
Henrik Bengtsson
See Also
This implementation of this function was adopted from
smooth.spline of the stats package.
Because of this, this function is also licensed under GPL v2.
Examples
data(cars)
attach(cars)
plot(speed, dist, main = "data(cars) & robust smoothing splines")
# Fit a smoothing spline using L_2 norm
cars.spl <- smooth.spline(speed, dist)
lines(cars.spl, col = "blue")
# Fit a smoothing spline using L_1 norm
cars.rspl <- robustSmoothSpline(speed, dist)
lines(cars.rspl, col = "red")
# Fit a smoothing spline using L_2 norm with 10 degrees of freedom
lines(smooth.spline(speed, dist, df=10), lty=2, col = "blue")
# Fit a smoothing spline using L_1 norm with 10 degrees of freedom
lines(robustSmoothSpline(speed, dist, df=10), lty=2, col = "red")
legend(5,120, c(
paste("smooth.spline [C.V.] => df =",round(cars.spl$df,1)),
paste("robustSmoothSpline [C.V.] => df =",round(cars.rspl$df,1)),
"standard with s( * , df = 10)", "robust with s( * , df = 10)"
), col = c("blue","red","blue","red"), lty = c(1,1,2,2), bg='bisque')
Results
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(aroma.light)
aroma.light v3.2.0 (2016-01-06) successfully loaded. See ?aroma.light for help.
> png(filename="/home/ddbj/snapshot/RGM3/R_BC/result/aroma.light/robustSmoothSpline.Rd_%03d_medium.png", width=480, height=480)
> ### Name: robustSmoothSpline
> ### Title: Robust fit of a Smoothing Spline
> ### Aliases: robustSmoothSpline.default robustSmoothSpline
> ### Keywords: smooth robust
>
> ### ** Examples
>
> data(cars)
> attach(cars)
> plot(speed, dist, main = "data(cars) & robust smoothing splines")
>
> # Fit a smoothing spline using L_2 norm
> cars.spl <- smooth.spline(speed, dist)
> lines(cars.spl, col = "blue")
>
> # Fit a smoothing spline using L_1 norm
> cars.rspl <- robustSmoothSpline(speed, dist)
> lines(cars.rspl, col = "red")
>
> # Fit a smoothing spline using L_2 norm with 10 degrees of freedom
> lines(smooth.spline(speed, dist, df=10), lty=2, col = "blue")
>
> # Fit a smoothing spline using L_1 norm with 10 degrees of freedom
> lines(robustSmoothSpline(speed, dist, df=10), lty=2, col = "red")
>
> legend(5,120, c(
+ paste("smooth.spline [C.V.] => df =",round(cars.spl$df,1)),
+ paste("robustSmoothSpline [C.V.] => df =",round(cars.rspl$df,1)),
+ "standard with s( * , df = 10)", "robust with s( * , df = 10)"
+ ), col = c("blue","red","blue","red"), lty = c(1,1,2,2), bg='bisque')
>
>
>
>
>
> dev.off()
null device
1
>