kzs: Kolmogorov-Zurbenko Spline

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

Description

This is a one-dimensional iterative smoothing algorithm based on convolutions of rectangular kernels.

Usage

1
kzs(y, x, smooth, scale, k = 1, edges = TRUE, plot = TRUE)

Arguments

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 x, scale is a positive real number that will define a uniform scale along x.

k

an integer specifying the number of iterations kzs will execute; k may also be interpreted as the order of smoothness (as a polynomial of degree k-1). By default, k = 1.

edges

a logical indicating whether or not to display the outcome data beyond the initial range of x. By default, edges = TRUE.

plot

a logical indicating whether or not to produce a plot of the kzs outcome. This is TRUE by default.

Details

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.

Value

a two-column data frame of paired values (xk, yk):

xk

x values in increments of scale

yk

smoothed response values resulting from k iterations of kzs

Note

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.

Author(s)

Derek Cyr cyr.derek@gmail.com and Igor Zurbenko igorg.zurbenko@gmail.com

References

Zurbenko, I.G. (1986). The Spectral Analysis of Time Series. North Holland Series in Statistics and Probability, Elsevier Science, Amsterdam.

See Also

kzs.params, kzs.2d, kzs.md

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
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")  

kzs documentation built on May 2, 2019, 4:20 a.m.

Related to kzs in kzs...