Applies a periodic ARMA filter to a time series
pc.filter.RdFilter time series with a periodic arma filter.
If whiten is FALSE (default) the function applies
the given ARMA filter to eps (eps is often periodic
white noise). If whiten is TRUE the function applies
the “inverse filter” to \(x\), effectively computing
residuals.
Usage
pc.filter(model, x, eps, seasonof1st = 1, from = NA, whiten = FALSE,
nmean = NULL, nintercept = NULL)Arguments
- x
the time series to be filtered, a vector.
- eps
residuals, a vector or NULL.
- model
the model parameters, a list with components
"phi","theta","p","q","period","mean"and"intercept", see Details.- seasonof1st
the season of the first observation (i.e., of x[1]).
- from
the index from which to start filtering.
- whiten
if TRUE use
xas input and apply the inverse filter to produceeps("whiten"x), if FALSE useepsas input and generatex("colour"eps).- nmean
-
a vector of means having the length of the series, see Details.
- nintercept
-
a vector of intercepts having the length of the series, see details.
Details
The model is specified by argument model, which is a list with
the following components:
phithe autoregression parameters,
thetathe moving average parameters,
pthe autoregression orders, a single number or a vector with one element for each season,
qthe moving average orders, a single number or a vector with one element for each season,
periodnumber of seasons in a cycle,
meanmeans of the seasons,
interceptintercepts of the seasons.
The relation between x and eps is assumed to be the
following. Let
$$y_t = x_t - mu_t$$
be the mean corrected series, where \(mu_t\) is the mean, see below.
The equation relating the
mean corrected series, \(y_t=x_t - \mu_t\), and
eps is the following:
$$ y_t
= c_t
+ \sum_{i=1}^{p_t} \phi _t(i)y _{t-i}
+ \sum_{i=1}^{q_t} \theta_t(i)\varepsilon_{t-i}
+ \varepsilon_t
$$
where \(c_t\) is the intercept, nintercept. The inverse
filter is obtained by writing this as an equation expressing
\(\varepsilon_t\) through the remaining quantities.
If whiten = TRUE, pc.filter uses the above formula to
compute the filtered values of x for t=from,...,n,
i.e. whitening the time series if eps is white noise. If
whiten = FALSE, eps is computed, i.e. the inverse filter
is applied x from eps, i.e. ``colouring'' x.
In both cases the first few values in x and/or eps are
used as initial values.
Essentially, the mean is subtracted from the series to obtain the
mean-corrected series, say y. Then either y is filtered
to obtain eps or the inverse filter is applied to obtain
y from eps
finally the mean is added back to y and the result returned.
The mean is formed by model$mean and argument nmean. If
model$mean is supplied it is recycled periodically to the
length of the series x and subtracted from x. If
argument nmean is supplied, it is subtracted from x. If
both model$mean and nmean are supplied their sum is
subtracted from x.
The above gives a vector y, \(y_t=x_t -
\mu_t\), which is then filtered. If the mean is
zero, \(y_t=x_t\) in the formulas below.
Finally, the mean is added back, \(x_t=y_t+\mu_t\), and the new
x is returned.
The above gives a vector y which is used in the filtering. If
the mean is zero, \(y_t=x_t\) in the formulae below.
pc.filter can be used to simulate pc-arma series with the
default value of whiten=FALSE. In this case eps is the
input series and y the output.
$$ y_t
= c_t
+ \sum_{i=1}^{p_t} \phi _t(i)y _{t-i}
+ \sum_{i=1}^{q_t} \theta_t(i)\varepsilon_{t-i}
+ \varepsilon_t
$$
Then model$mean or nmean are added to y to form the
output vector x.
Residuals corresponding to a series y can be obtained by
setting whiten=TRUE. In this case y is the input series.
The elements of the output vector eps are calculated by the
formula:
$$ \varepsilon_t
= - c_t
- \sum_{i=1}^{q_t} \theta_t(i)\varepsilon_{t-i}
- \sum_{i=1}^{p_t} \phi _t(i)y _{t-i}
+ y_t
$$
There is no need in this case to restore x since eps is
returned.
In both cases any necessary initial values are assumed to be already
in the vectors. If from is not supplied it is chosen as the
smallest i such that for all \(t\ge i\),
t-p[t]>0 and t-q[t]>0, i.e. the filter will not require
negative indices for x or eps.
pc.filter calls the lower level function pc.filter.xarma
to do the computation.
See also
the lower level functions
pc.filter.xarma
which do the computations