# smoothEnds: End Points Smoothing (for Running Medians)

Description Usage Arguments Details Value Author(s) References See Also Examples

## Description

Smooth end points of a vector `y` using subsequently smaller medians and Tukey's end point rule at the very end. (of odd span),

## Usage

 `1` ```smoothEnds(y, k = 3) ```

## Arguments

 `y` dependent variable to be smoothed (vector). `k` width of largest median window; must be odd.

## Details

`smoothEnds` is used to only do the ‘end point smoothing’, i.e., change at most the observations closer to the beginning/end than half the window `k`. The first and last value are computed using Tukey's end point rule, i.e., `sm = median(y, sm, 3*sm - 2*sm, na.rm=TRUE)`.

In R versions 3.6.0 and earlier, missing values (`NA`) in `y` typically lead to an error, whereas now the equivalent of `median(*, na.rm=TRUE)` is used.

## Value

vector of smoothed values, the same length as `y`.

Martin Maechler

## References

John W. Tukey (1977) Exploratory Data Analysis, Addison.

Velleman, P.F., and Hoaglin, D.C. (1981) ABC of EDA (Applications, Basics, and Computing of Exploratory Data Analysis); Duxbury.

## See Also

`runmed(*, endrule = "median")` which calls `smoothEnds()`.

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32``` ```require(graphics) y <- ys <- (-20:20)^2 y [c(1,10,21,41)] <- c(100, 30, 400, 470) s7k <- runmed(y, 7, endrule = "keep") s7. <- runmed(y, 7, endrule = "const") s7m <- runmed(y, 7) col3 <- c("midnightblue","blue","steelblue") plot(y, main = "Running Medians -- runmed(*, k=7, endrule = X)") lines(ys, col = "light gray") matlines(cbind(s7k, s7.,s7m), lwd = 1.5, lty = 1, col = col3) eRules <- c("keep","constant","median") legend("topleft", paste("endrule", eRules, sep = " = "), col = col3, lwd = 1.5, lty = 1, bty = "n") stopifnot(identical(s7m, smoothEnds(s7k, 7))) ## With missing values (for R >= 3.6.1): yN <- y; yN[c(2,40)] <- NA rN <- sapply(eRules, function(R) runmed(yN, 7, endrule=R)) matlines(rN, type = "b", pch = 4, lwd = 3, lty=2, col = adjustcolor(c("red", "orange4", "orange1"), 0.5)) yN[c(1, 20:21)] <- NA # additionally rN. <- sapply(eRules, function(R) runmed(yN, 7, endrule=R)) head(rN., 4); tail(rN.) # more NA's too, still not *so* many: stopifnot(exprs = { !anyNA(rN[,2:3]) identical(which(is.na(rN[,"keep"])), c(2L, 40L)) identical(which(is.na(rN.), arr.ind=TRUE, useNames=FALSE), cbind(c(1:2,40L), 1L)) identical(rN.[38:41, "median"], c(289,289, 397, 470)) }) ```