Last data update: 2014.03.03

R: Robust fit of a Smoothing Spline
robustSmoothSplineR Documentation

Robust fit of a Smoothing Spline

Description

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.

Usage

## Default S3 method:
robustSmoothSpline(x, y=NULL, w=NULL, ..., minIter=3, maxIter=max(minIter, 50),
  sdCriteria=2e-04, reps=1e-15, tol=1e-06 * IQR(x), plotCurves=FALSE)

Arguments

x

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 
>