filter {ts} | R Documentation |
Linear Filtering on a Time Series
Description
Applies linear filtering to a univariate time series or to each series separately of a multivariate time series.
Usage
filter(x, filter, method="convolution", sides=2,
circular=FALSE, init)
Arguments
x |
a univariate or multivariate time series. |
filter |
a vector of filter coefficients in reverse time order (as for AR or MA coefficients). |
method |
Either |
sides |
for convolution filters only. If |
circular |
for convolution filters only. If |
init |
for recursive filters only. Specifies the initial values of the time series just prior to the start value, in reverse time order. The default is a set of zeros. |
Details
Missing values are allowed in x
but not in filter
(where they would lead to missing values everywhere in the output).
Note that there is an implied coefficient 1 at lag 0 in the
recursive filter, which gives
y[i] = x[i] + f[1]*y[i-1] + ... f[p]*y[i-p]
.
No check is made to see if recursive filter is invertible:
the output may diverge if it is not.
The convolution filter is
y[i] = f[1]*x[i+o] + ... + f[p]*x[i+o-p-1]
where o
is the offset: see sides
for how it is determined.
Value
A time series object.
Note
convolve(, type="filter")
uses the FFT for computations
and so may be faster for long filters on univariate series,
but it does not return a time series (and so the time alignment is
unclear), nor does it handle missing values. filter
is
faster for a filter of length 100 on a series of length 1000,
for example.
Author(s)
B.D. Ripley
See Also
convolve
Examples
x <- 1:100
filter(x, rep(1,3))
filter(x, rep(1,3), sides=1)
filter(x, rep(1,3), sides=1, circular=T)
data(presidents)
filter(presidents, rep(1,3))
## A simple simulation function for ARMA processes
arma.sim <- function(n, ar = NULL, ma = NULL, sigma = 1.0)
{
x <- ts(rnorm(n+100, 0, sigma), start = -99)
if(length(ma)) x <- filter(x, c(1, ma), sides=1)
if(length(ar)) x <- filter(x, ar, method="recursive")
as.ts(x[-(1:100)])
}
arma.sim(63, c(0.8897,-0.4858), c(-0.2279, 0.2488), sigma=sqrt(0.1796))