Description Usage Arguments Details Value Author(s) References See Also Examples
This function implements the ChristianoFitzgerald approximation to the ideal band pass filter for a time series. The function computes cyclical and trend components of the time series using several bandpass approximation strategies.
1 2 3 
x 
a regular time series. 
type 
the filter type,

pl 
minimum period of oscillation of desired component (pl<=2). 
pu 
maximum period of oscillation of desired component (2<=pl<pu<infinity). 
root 
logical, 
drift 
logical, 
nfix 
sets fixed lead/lag length or order of the filter with

theta 
moving average coefficients for time series model: x(t) = mu + root*x(t1) + theta(1)*e(t) + theta(2)*e(t1) + ..., where e(t) is a white noise. 
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_{tk}
The ideal bandpass filter weights are given by
B_j = \frac{\sin(jb)\sin(ja)}{π j}
B_0=\frac{ba}{π}
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 ChristianoFitzgerald filter is a finite data approximation to the ideal bandpass filter and minimizes the mean squared error defined in the above equation.
Several bandpass 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_{t1} + θ_1 e_t + θ_2 e_{t1} + …
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.
If drift=TRUE
the drift adjusted series is obtained as
\tilde{x}_{t}=x_tt≤ft(\frac{x_{T}x_{1}}{T1}\right), \ \ t=0,1,…,T1
where \tilde{x}_{t} is the undrifted series.
A "mFilter
" object (see mFilter
).
Mehmet Balcilar, [email protected]
M. Baxter and R.G. King. Measuring business cycles: Approximate bandpass filters. The Review of Economics and Statistics, 81(4):57593, 1999.
L. Christiano and T.J. Fitzgerald. The bandpass filter. International Economic Review, 44(2):43565, 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):116, 1997.
R.G. King and S.T. Rebelo. Low frequency filtering and real business cycles. Journal of Economic Dynamics and Control, 17(12):20731, 1993.
D.S.G. Pollock. Trend estimation and detrending via rational squarewave filters. Journal of Econometrics, 99:317334, 2000.
mFilter
, bwfilter
, bkfilter
,
hpfilter
, trfilter
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  ## library(mFilter)
data(unemp)
opar < par(no.readonly=TRUE)
unemp.cf < cffilter(unemp)
plot(unemp.cf)
unemp.cf1 < cffilter(unemp, drift=TRUE, root=TRUE)
unemp.cf2 < cffilter(unemp, pl=8,pu=40,drift=TRUE, root=TRUE)
unemp.cf3 < cffilter(unemp, pl=2,pu=60,drift=TRUE, root=TRUE)
unemp.cf4 < cffilter(unemp, pl=2,pu=40,drift=TRUE, root=TRUE,theta=c(.1,.4))
par(mfrow=c(2,1),mar=c(3,3,2,1),cex=.8)
plot(unemp.cf1$x,
main="ChristianoFitzgerald filter of unemployment: Trend \n root=TRUE,drift=TRUE",
col=1, ylab="")
lines(unemp.cf1$trend,col=2)
lines(unemp.cf2$trend,col=3)
lines(unemp.cf3$trend,col=4)
lines(unemp.cf4$trend,col=5)
legend("topleft",legend=c("series", "pl=2, pu=32", "pl=8, pu=40", "pl=2, pu=60",
"pl=2, pu=40, theta=.1,.4"), col=1:5, lty=rep(1,5), ncol=1)
plot(unemp.cf1$cycle,
main="ChristianoFitzgerald filter of unemployment: Cycle \n root=TRUE,drift=TRUE",
col=2, ylab="", ylim=range(unemp.cf3$cycle))
lines(unemp.cf2$cycle,col=3)
lines(unemp.cf3$cycle,col=4)
lines(unemp.cf4$cycle,col=5)
## legend("topleft",legend=c("pl=2, pu=32", "pl=8, pu=40", "pl=2, pu=60",
## "pl=2, pu=40, theta=.1,.4"), col=2:5, lty=rep(1,4), ncol=2)
par(opar)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.