a character string indicating the kind of smoother required;
defaults to "3RS3R".
twiceit
logical, indicating if the result should be ‘twiced’.
Twicing a smoother S(y) means S(y) + S(y - S(y)), i.e.,
adding smoothed residuals to the smoothed values. This decreases
bias (increasing variance).
endrule
a character string indicating the rule for smoothing at the
boundary. Either "Tukey" (default) or "copy".
do.ends
logical, indicating if the 3-splitting of ties should
also happen at the boundaries (ends). This is only used for
kind = "S".
Details
3 is Tukey's short notation for running medians
of length 3,
3R stands for Repeated 3 until
convergence, and
S for Splitting of horizontal stretches of length 2 or 3.
Hence, 3RS3R is a concatenation of 3R, S
and 3R, 3RSS similarly,
whereas 3RSR means first 3R
and then (S and 3)Repeated until convergence – which
can be bad.
Value
An object of class "tukeysmooth" (which has print and
summary methods) and is a vector or time series containing the
smoothed values with additional attributes.
Note
S and S-PLUS use a different (somewhat better) Tukey smoother in
smooth(*).
Note that there are other smoothing methods which provide
rather better results. These were designed for hand calculations
and may be used mainly for didactical purposes.
Since R version 1.2, smoothdoes really implement
Tukey's end-point rule correctly (see argument endrule).
kind = "3RSR" has been the default till R-1.1,
but it can have very bad properties, see the examples.
Note that repeated application of smooth(*)does
smooth more, for the "3RS*" kinds.
References
Tukey, J. W. (1977).
Exploratory Data Analysis,
Reading Massachusetts: Addison-Wesley.
See Also
runmed for running medians;
lowess and loess;
supsmu and
smooth.spline.
Examples
require(graphics)
## see also demo(smooth) !
x1 <- c(4, 1, 3, 6, 6, 4, 1, 6, 2, 4, 2) # very artificial
(x3R <- smooth(x1, "3R")) # 2 iterations of "3"
smooth(x3R, kind = "S")
sm.3RS <- function(x, ...)
smooth(smooth(x, "3R", ...), "S", ...)
y <- c(1, 1, 19:1)
plot(y, main = "misbehaviour of "3RSR"", col.main = 3)
lines(sm.3RS(y))
lines(smooth(y))
lines(smooth(y, "3RSR"), col = 3, lwd = 2) # the horror
x <- c(8:10, 10, 0, 0, 9, 9)
plot(x, main = "breakdown of 3R and S and hence 3RSS")
matlines(cbind(smooth(x, "3R"), smooth(x, "S"), smooth(x, "3RSS"), smooth(x)))
presidents[is.na(presidents)] <- 0 # silly
summary(sm3 <- smooth(presidents, "3R"))
summary(sm2 <- smooth(presidents,"3RSS"))
summary(sm <- smooth(presidents))
all.equal(c(sm2), c(smooth(smooth(sm3, "S"), "S"))) # 3RSS === 3R S S
all.equal(c(sm), c(smooth(smooth(sm3, "S"), "3R"))) # 3RS3R === 3R S 3R
plot(presidents, main = "smooth(presidents0, *) : 3R and default 3RS3R")
lines(sm3, col = 3, lwd = 1.5)
lines(sm, col = 2, lwd = 1.25)
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(stats)
> png(filename="/home/ddbj/snapshot/RGM3/R_rel/result/stats/smooth.Rd_%03d_medium.png", width=480, height=480)
> ### Name: smooth
> ### Title: Tukey's (Running Median) Smoothing
> ### Aliases: smooth
> ### Keywords: robust smooth
>
> ### ** Examples
>
> require(graphics)
>
> ## see also demo(smooth) !
>
> x1 <- c(4, 1, 3, 6, 6, 4, 1, 6, 2, 4, 2) # very artificial
> (x3R <- smooth(x1, "3R")) # 2 iterations of "3"
3R Tukey smoother resulting from smooth(x = x1, kind = "3R")
used 2 iterations
[1] 3 3 3 6 6 4 4 4 2 2 2
> smooth(x3R, kind = "S")
S Tukey smoother resulting from smooth(x = x3R, kind = "S")
changed
[1] 3 3 3 3 4 4 4 4 2 2 2
>
> sm.3RS <- function(x, ...)
+ smooth(smooth(x, "3R", ...), "S", ...)
>
> y <- c(1, 1, 19:1)
> plot(y, main = "misbehaviour of "3RSR"", col.main = 3)
> lines(sm.3RS(y))
> lines(smooth(y))
> lines(smooth(y, "3RSR"), col = 3, lwd = 2) # the horror
>
> x <- c(8:10, 10, 0, 0, 9, 9)
> plot(x, main = "breakdown of 3R and S and hence 3RSS")
> matlines(cbind(smooth(x, "3R"), smooth(x, "S"), smooth(x, "3RSS"), smooth(x)))
>
> presidents[is.na(presidents)] <- 0 # silly
> summary(sm3 <- smooth(presidents, "3R"))
3R Tukey smoother resulting from
smooth(x = presidents, kind = "3R") ; n = 120
used 4 iterations
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0 44.0 57.0 54.2 71.0 82.0
> summary(sm2 <- smooth(presidents,"3RSS"))
3RSS Tukey smoother resulting from
smooth(x = presidents, kind = "3RSS") ; n = 120
used 5 iterations
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 44.00 57.00 55.45 69.00 82.00
> summary(sm <- smooth(presidents))
3RS3R Tukey smoother resulting from
smooth(x = presidents) ; n = 120
used 7 iterations
Min. 1st Qu. Median Mean 3rd Qu. Max.
24.00 44.00 57.00 55.88 69.00 82.00
>
> all.equal(c(sm2), c(smooth(smooth(sm3, "S"), "S"))) # 3RSS === 3R S S
[1] TRUE
> all.equal(c(sm), c(smooth(smooth(sm3, "S"), "3R"))) # 3RS3R === 3R S 3R
[1] TRUE
>
> plot(presidents, main = "smooth(presidents0, *) : 3R and default 3RS3R")
> lines(sm3, col = 3, lwd = 1.5)
> lines(sm, col = 2, lwd = 1.25)
>
>
>
>
>
> dev.off()
null device
1
>