Folks,
I just implemented the one-sided HP filter as per Stock & Watson (1999),
"Forecasting Inflation", JME. It was quite easy, in fact. The Hansl code
is below.
However, I'd like to ask the community a question: how should we use this:
I have three possibilities:
* Put the code below in the Kalman filter chapter of the User's Guide, as
an example of how you do simple things of some practival value;
* implement this as a function package (but then, we already have the
Christiano-Fitzgerald filter, and it may make sense to coalesce the two
filters into one package)
* implement this as a variant of our native hpfilt() function, with an
extra boolean flag for one-sidedness.
Opinions?
<hansl>
function series oshpfilt(series y, scalar lambda[0])
if lambda == 0
lambda = 100 * $pd^2
endif
# State transition matrix
matrix F = {2,-1;1,0}
# Observation matrix
matrix H = {1;0}
# Covariance matrix in the state equation
matrix Q = diagcat(1/lambda, 0)
ssm = ksetup(y, H, F, Q)
ssm.obsvar = 1
ssm.inistate = {2*y[1]-y[2] ; 3*y[1]-2*y[2]}
err = kfilter(&ssm)
series ret = err ? NA : y - ssm.state[,2]
return ret
end function
# --- example ----------------------------------------------
clear
open fedstl.bin
data houst
series y = log(houst)
series hp1 = oshpfilt(y) # one-sided
series hp2 = hpfilt(y) # two-sided (traditional)
series t1 = y - hp1
series t2 = y - hp2
</hansl>
-------------------------------------------------------
Riccardo (Jack) Lucchetti
Dipartimento di Scienze Economiche e Sociali (DiSES)
Università Politecnica delle Marche
(formerly known as Università di Ancona)
r.lucchetti(a)univpm.it
http://www2.econ.univpm.it/servizi/hpp/lucchetti
-------------------------------------------------------