smooth                  package:eda                  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)

       print(x, ...)
     summary(object, ...)

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"'.

  object: (and `x' in `print(.)'): object of class "tukeysmooth",
          typically the result of `smooth(.)'.

     ...: potentially further arguments, required by generic.

Details:

     `3' is Tukey's short notation for running `median's 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, `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' in package
     `modreg'.

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)

