Description Details Author(s) References See Also

Getting started with the mFilter package

This package provides some tools for decomposing time series into trend (smooth) and cyclical (irregular) components. The package implements come commonly used filters such as the Hodrick-Prescott, Baxter-King and Christiano-Fitzgerald filter.

For loading the package, type:

`library(mFilter)`

A good place to start learning the package usage is to examine examples for
the `mFilter`

function. At the R prompt, write:

`example("mFilter")`

For a full list of functions exported by the package, type:

`ls("package:mFilter")`

Each exported function has a corresponding man page (some man pages are common to more functions). Display it by typing

`help(functionName)`

.

Almost all filters in this package can be put into the following
framework. Given a time series *\{x_t\}^T_{t=1}* we are interested
in isolating component of *x_t*, denoted *y_t* with period of
oscillations between *p_l* and *p_u*, where *2
≤ p_l < p_u < ∞*.

Consider the following decomposition of the time series

*x_t = y_t + \bar{x}_t*

The component *y_t* is assumed to have power only in the frequencies
in the interval *\{(a,b) \cup (-a,-b)\} \in (-π, π)*. *a*
and *b* are related to *p_l* and *p_u* by

*a=\frac{2 π}{p_u}\ \ \ \ \ {b=\frac{2 π}{p_l}}*

If infinite amount of data is available, then we can use the ideal bandpass filter

*y_t = B(L)x_t*

where the filter, *B(L)*, is given in terms of the lag operator
*L* and defined as

*B(L) = ∑^∞_{j=-∞} B_j L^j, \ \ \ L^k x_t = x_{t-k}*

The ideal bandpass filter weights are given by

*B_j = \frac{\sin(jb)-\sin(ja)}{π j}*

*B_0=\frac{b-a}{π}*

The finite sample approximation to the ideal bandpass filter uses the alternative filter

*y_t = \hat{B}(L)x_t=∑^{n_2}_{j=-n_1}\hat{B}_{t,j} x_{t+j}*

Here the weights, *\hat{B}_{t,j}*, of the approximation is a
solution to

*\hat{B}_{t,j}= \arg \min E \{ (y_t-\hat{y}_t)^2 \}*

The Christiano-Fitzgerald filter is a finite data approximation to the ideal bandpass filter and minimizes the mean squared error defined in the above equation.

Several band-pass approximation strategies can be selected in the
function `cffilter`

. The default setting of `cffilter`

returns
the filtered data *\hat{y_t}* associated with the unrestricted optimal filter
assuming no unit root, no drift and an iid filter.

If `theta`

is not equal to 1 the series is assumed to follow a
moving average process. The moving average weights are given by `theta`

. The default is
`theta=1`

(iid series). If `theta`

*=(θ_1, θ_2, …)* then
the series is assumed to be

*x_t = μ + 1_{root} x_{t-1} + θ_1 e_t + θ_2 e_{t-1} + …*

where *1_{root}=1* if the option `root=1`

and *1_{root}=0*
if the option `root=0`

, and *e_t* is a white noise.

The Baxter-King filter is a finite data approximation to the ideal bandpass filter with following moving average weights

*y_t = \hat{B}(L)x_t=∑^{n}_{j=-n}\hat{B}_{j} x_{t+j}=\hat{B}_0
x_t + ∑^{n}_{j=1} \hat{B}_j (x_{t-j}+x_{t+j})*

where

*\hat{B}_j=B_j-\frac{1}{2n+1}∑^{n}_{j=-n} B_{j}*

The Hodrick-Prescott filter obtains the filter weights *\hat{B}_j*
as a solution to

*\hat{B}_{j}= \arg \min E \{ (y_t-\hat{y}_t)^2 \} = \arg \min
≤ft\{ ∑^{T}_{t=1}(y_t-\hat{y}_{t})^2 + λ∑^{T-1}_{t=2}(\hat{y}_{t+1}-2\hat{y}_{t}+\hat{y}_{t-1})^2 \right\}*

The Hodrick-Prescott filter is a finite data approximation with following moving average weights

*\hat{B}_j=\frac{1}{2π}\int^{π}_{-π}
\frac{4λ(1-\cos(ω))^2}{1+4λ(1-\cos(ω))^2}e^{i ω
j} d ω*

The digital version of the Butterworth highpass filter is described by the rational polynomial expression (the filter's z-transform)

*\frac{λ(1-z)^n(1-z^{-1})^n}{(1+z)^n(1+z^{-1})^n+λ(1-z)^n(1-z^{-1})^n}*

The time domain version can be obtained by substituting *z* for the
lag operator *L*.

Pollock (2000) derives a specialized finite-sample version of the Butterworth
filter on the basis of signal extraction theory. Let *s_t* be the
trend and *c_t* cyclical component of *y_t*, then these
components are extracted as

*y_t=s_t+c_t=\frac{(1+L)^n}{(1-L)^d}ν_t+(1-L)^{n-d}\varepsilon_t*

where *ν_t \sim N(0,σ_ν^2)* and *\varepsilon_t \sim
N(0,σ_\varepsilon^2)*.

Let *T* be even and define *n_1=T/p_u* and *n_2=T/p_l*. The
trigonometric regression filter is based on the following relation

*{y}_t=∑^{n_1}_{j=n_2}≤ft\{ a_j \cos(ω_j t) + b_j
\sin(ω_j t) \right\}*

where *a_j* and *b_j* are the coefficients obtained by
regressing *x_t* on the indicated sine and cosine
functions. Specifically,

*a_j=\frac{T}{2}∑^{T}_{t=1}\cos(ω_j t) x_t,\ \ \ * for
*j=1,…,T/2-1*

*a_j=\frac{T}{2}∑^{T}_{t=1}\cos(π t) x_t,\ \ \ * for *j=T/2*

and

*b_j=\frac{T}{2}∑^{T}_{t=1}\sin(ω_j t) x_t,\ \ \ * for
*j=1,…,T/2-1*

*b_j=\frac{T}{2}∑^{T}_{t=1}\sin(π t) x_t,\ \ \ * for *j=T/2*

Let *\hat{B}(L) x_t* be the trigonometric regression filter. It can
be showed that *\hat{B}(1)=0*, so that *\hat{B}(L)* has a unit
root for *t=1,2,…,T*. Also, when *\hat{B}(L)* is symmetric,
it has a second unit root in the middle of the data for
*t*. Therefore it is important to drift adjust data before it is
filtered with a trigonometric regression filter.

If `drift=TRUE`

the drift adjusted series is obtained as

*\tilde{x}_{t}=x_t-t≤ft(\frac{x_{T}-x_{1}}{T-1}\right), \ \ t=0,1,…,T-1*

where *\tilde{x}_{t}* is the undrifted series.

Mehmet Balcilar, mehmet@mbalcilar.net

M. Baxter and R.G. King. Measuring business cycles: Approximate bandpass filters. The Review of Economics and Statistics, 81(4):575-93, 1999.

L. Christiano and T.J. Fitzgerald. The bandpass filter. International Economic Review, 44(2):435-65, 2003.

J. D. Hamilton. *Time series analysis.* Princeton, 1994.

R.J. Hodrick and E.C. Prescott. Postwar US business cycles: an empirical investigation. Journal of Money, Credit, and Banking, 29(1):1-16, 1997.

R.G. King and S.T. Rebelo. Low frequency filtering and real business cycles. Journal of Economic Dynamics and Control, 17(1-2):207-31, 1993.

D.S.G. Pollock. Trend estimation and de-trending via rational square-wave filters. Journal of Econometrics, 99:317-334, 2000.

`mFilter-methods`

for listing all currently
available `mFilter`

methods. For help on common interface function
"`mFilter`

", `mFilter`

. For individual filter function
usage, `bwfilter`

, `bkfilter`

,
`cffilter`

, `hpfilter`

, `trfilter`

.

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.