R: Tukey's (Running Median) Smoothing

smooth {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)

[Package Contents]