smooth                 package:stats                 R Documentation

Tukey's (Running Median) Smoothing

Description:

     Tukey's smoothers, _3RS3R_, _3RSS_, _3R_, etc.

Usage:

     smooth(x, kind = c("3RS3R", "3RSS", "3RSR", "3R", "3", "S"),
            twiceit = FALSE,
            endrule = "Tukey", do.ends = FALSE)

Arguments:

       x: a vector or time series

    kind: 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 'median's of length
     *3*, 
      _'3R'_ stands for *R*epeated _'3'_ until convergence, and 
      _'S'_ for *S*plitting 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)' *R*epeated 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, 'smooth' _does_ 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:

     'lowess'; 'loess', 'supsmu' and 'smooth.spline'.

Examples:

     ## 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)))

     data(presidents)
     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)

