Rev 88598 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/stats/man/smoothEnds.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2019 R Core Team% Distributed under GPL 2 or later\name{smoothEnds}\title{End Points Smoothing (for Running Medians)}\alias{smoothEnds}\usage{smoothEnds(y, k = 3)}\description{Smooth end points of a vector \code{y} using subsequently smallermedians and Tukey's end point rule at the very end. (of odd span),}\arguments{\item{y}{dependent variable to be smoothed (vector).}\item{k}{width of largest median window; must be odd.}}\value{vector of smoothed values, the same length as \code{y}.}\details{\code{smoothEnds} is used to only do the \sQuote{end point smoothing},i.e., change at most the observations closer to the beginning/endthan half the window \code{k}. The first and last value are computed using\emph{Tukey's end point rule}, i.e.,\code{sm[1] = median(y[1], sm[2], 3*sm[2] - 2*sm[3], na.rm=TRUE)}.In \R versions 3.6.0 and earlier, missing values (\code{\link{NA}})in \code{y} typically lead to an error, whereas now the equivalent of\code{\link{median}(*, na.rm=TRUE)} is used.}\references{\bibshow{R:Tukey:1977,R:Velleman+Hoaglin:1981}}\author{Martin Maechler}\seealso{\code{\link{runmed}(*, endrule = "median")} which calls\code{smoothEnds()}.}\examples{require(graphics)y <- ys <- (-20:20)^2y [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)] <- NArN <- 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 # additionallyrN. <- sapply(eRules, function(R) runmed(yN, 7, endrule=R))head(rN., 4); tail(rN.) # more NAs 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))})}\keyword{smooth}\keyword{robust}