Description Usage Arguments Details Value Note Author(s) References See Also Examples
This is a one-dimensional iterative smoothing algorithm based on convolutions of rectangular kernels.
1 |
y |
a one-dimensional vector of real values representing the response variable to be smoothed. |
x |
a one-dimensional vector of real values representing the input variable. |
smooth |
a real number defining the width of the smoothing window, i.e., the width of the rectangular kernel. |
scale |
for an irregularly spaced |
k |
an integer specifying the number of iterations |
edges |
a logical indicating whether or not to display the outcome data beyond the initial range of |
plot |
a logical indicating whether or not to produce a plot of the |
The relation between variables Y and X as a function of a current value of X = x [namely, Y(x)] is
often desired as a result of practical research. Usually we search for some simple function, Y(x),
when given a data set of pairs (Xi, Yi). When plotted, these pairs frequently resemble a noisy plot,
and thus Y(x) is desired to be a smooth outcome that captures patterns or long-term trends in the
original data, while suppressing the noise. The kzs
function is based on convolutions of the
rectangular kernel, which is equilvalent to repeated applications of a moving average. According to
the Central Limit Theorem, repeated convolutions with rectangular kernels will converge to the Gaussian
kernel; the resulting kernel will have finite support equal to smooth*k
, which will result in a
smooth outcome with diminished noise leakage, which is a feature that the standard Gaussian kernel does
not exhibit.
a two-column data frame of paired values (xk, yk)
:
xk |
|
yk |
smoothed response values resulting from |
Data set (Xi, Yi) must be provided, usually as some observations that occur at certain times; kzs
is designed for the general situation, including time series data. In many applications where the input
variable, x
, can be time, kzs
is resolving the problem of missing values in time series or
irregularly observed values in longitudinal data analysis.
kzs
may take time to completely run depending on the size of the data set used and the number of
iterations specified.
For more information on the restrictions imposed on delta
and d
, consult kzs.params
.
Derek Cyr cyr.derek@gmail.com and Igor Zurbenko igorg.zurbenko@gmail.com
Zurbenko, I.G. (1986). The Spectral Analysis of Time Series. North Holland Series in Statistics and Probability, Elsevier Science, Amsterdam.
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | # Total time t
t <- seq(from = -round(400*pi), to = round(400*pi), by = .25)
# Construct the signal over time
ts <- 0.5*sin(sqrt((2*pi*abs(t))/200))
signal <- ifelse(t < 0, -ts, ts)
# Bury the signal in noise [randomly, from N(0, 1)]
et <- rnorm(length(t), mean = 0, sd = 1)
yt <- et + signal
# Data frame of (t, yt)
pts <- data.frame(cbind(t, yt))
### EXAMPLE 1 - Apply kzs to the signal buried in noise
# Plot of the true signal
plot(signal ~ t, xlab = "t", ylab = "Signal", main = "True Signal",
type = "l")
# Plot of signal + noise
plot(yt ~ t, ylab = "yt", main = "Signal buried in noise", type = "p")
# Apply 3 iterations of kzs
kzs(y = pts[,2], x = pts[,1], smooth = 80, scale = .2, k = 3, edges = TRUE,
plot = TRUE)
lines(signal ~ t, col = "red")
title(main = "kzs(smooth = 80, scale = .2, k = 3, edges = TRUE)")
legend("topright", c("True signal","kzs estimate"), cex = 0.8,
col = c("red", "black"), lty = 1:1, lwd = 2, bty = "n")
### EXAMPLE 2 - Irregularly observed data over time
# Cancel a random 20 percent of (t, yt) leaving irregularly observed time points
obs <- seq(1:length(t))
t20 <- sample(obs, size = length(obs)/5)
pts20 <- pts[-t20,]
# Plot of (t,yt) with 20 percent of the data removed
plot(pts20$yt ~ pts20$t, main = "Signal buried in noise\n20 percent of
(t, yt) deleted", xlab = "t", ylab = "yt", type = "p")
# Apply 3 iterations of kzs
kzs(y = pts20[,2], x = pts20[,1], smooth = 80, scale = .2, k = 3, edges = TRUE,
plot = TRUE)
lines(signal ~ t, col = "red")
title(main = "kzs(smooth = 80, scale = .2, k = 3, edges = TRUE)")
legend("topright", c("True signal","kzs estimate"), cex = 0.8,
col = c("red", "black"), lty = 1:1, lwd = 2, bty = "n")
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.