latticeExtra (version 0.6-9)

panel.tskernel: Plot a smoothed time series.

Description

Compute and plot discrete symmetric smoothing kernels. These kernels can be used to smooth time series objects. Options include moving averages, triangular filters, or approximately Gaussian filters.

Usage

panel.tskernel(x, y, ...,
    width = NROW(x) %/% 10 + 1,
    c = 1, sides = 2, circular = FALSE,
    kern = kernel("daniell",
           rep(floor((width/sides) / sqrt(c)), c)))

Arguments

x, y
data points. Should define a regular, ordered series. Alternatively a time series object can be passed as the first argument, and y can be omitted.
...
further arguments passed on to panel.lines.
width
``width'' of the smoothing kernel in time steps. In the default case, which is a simple moving average, this is the actual width. When c > 1 the number of time steps used in the kernel increases but the equivalent bandwidth sta
c
smoothness of the kernel: c = 1 is a moving average, c = 2 is a triangular kernel, c = 3 and higher approximate smooth Gaussian kernels. c is actually the number of times to recursi
sides
if sides=1 the smoothed series is calculed from past values only (using one half of the symmetric kernel); if sides=2 it is centred around lag 0.
circular
to treat the data as circular (periodic).
kern
a tskernel object; if given, this over-rides width and c.

See Also

kernel, filter, xyplot.ts

Examples

Run this code
## a Gaussian-like filter (contrast with c = 1 or c = 2)
xyplot(sunspot.year) +
layer(panel.tskernel(x, y, width = 20, c = 3, col = 1, lwd = 2))

## example from ?kernel:
## long and short moving averages, backwards in time
xyplot(EuStockMarkets[,1]) +
  layer(panel.tskernel(x, y, width = 100, col = 1, sides = 1)) +
  layer(panel.tskernel(x, y, width = 20, col = 2, sides = 1))

## per group, with a triangular filter
xyplot(EuStockMarkets) +
  glayer(panel.tskernel(..., width = 100, c = 2),
         theme = simpleTheme(lwd = 2))

## plot the actual kernels used; note adjustment of width
width = 100
kdat <- lapply(1:4, function(c) {
    k <- kernel("daniell", rep(floor(0.5*width / sqrt(c)), c))
    ## demonstrate that the effective bandwidth stays the same:
    message("c: ", c, ", bandwidth: ", bandwidth.kernel(k))
    ## represent the kernel as a time series, for plotting
    ts(k[-k$m:k$m], start = -k$m)
})
names(kdat) <- paste("m =", 1:4)
xyplot(do.call(ts.union, kdat), type = "h",
    scales = list(y = list(relation = "same")))

Run the code above in your browser using DataLab