Learn R Programming

neverhpfilter (version 0.5-0)

yth_filter: Filtered xts object

Description

yth_filter returns an xts object containing user-defined combinations of the original, trend, cycle, and random walk series.

Usage

yth_filter(x, h = 8, p = 4, output = c("x", "trend", "cycle", "random"), ...)

Value

An xts object defined by the output parameter.

Arguments

x

A univariate xts object of any zoo index class, such as Date, yearmon, or yearqtr. For converting objects of type timeSeries, ts, irts, fts, matrix, data.frame, or zoo, please see as.xts.

h

An integer, defining the lookahead period. Defaults to h = 8. The default assumes economic data of quarterly periodicity with a lookahead period of 2 years.

p

An integer, indicating the number of lags. Defaults to p = 4, assuming quarterly data. For monthly data, one may choose p = 12 or aggregate to quarterly. Use this parameter to match the seasonality of your data.

output

A character vector. Defaults to output = c("x","trend","cycle","random"), which returns the original series ("x"), the fitted values from yth_glm ("trend"), the residuals from yth_glm ("cycle"), and a random walk defined by differencing \(y_{t+h}\) and \(y_t\) ("random"). Any subset of these components can be returned.

...

Other arguments passed to glm.

Details

For time series of quarterly periodicity, Hamilton suggests parameters of h = 8 and p = 4, or an \(AR(4)\) process, additionally lagged by \(8\) lookahead periods. Econometricians may explore variations of h. However, p is designed to correspond with the seasonality of a given periodicity and should be matched accordingly.

References

James D. Hamilton. Why You Should Never Use the Hodrick-Prescott Filter. NBER Working Paper No. 23429, Issued in May 2017.

See Also

yth_glm

Examples

Run this code
data(GDPC1)

gdp_filter <- yth_filter(100*log(GDPC1), h = 8, p = 4)

head(gdp_filter, 15)

#---------------------------------------------------------------------------#

data(PAYEMS)

log_Employment <- 100*log(xts::to.quarterly(PAYEMS["1947/2016-6"], OHLC = FALSE))

employ_trend <- yth_filter(log_Employment, h = 8, p = 4, output = c("x", "trend"))

plot(employ_trend, grid.col = "white", legend.loc = "topleft",
         main = "Log of Employment and trend")

#----------------------------------------------------------------------------#

quarterly_data <- 100*log(merge(GDPC1, PCECC96, GPDIC1, EXPGSC1, IMPGSC1, GCEC1, GDPDEF))

cycle <- do.call(merge, lapply(quarterly_data, yth_filter, output = "cycle"))
random <- do.call(merge, lapply(quarterly_data, yth_filter, output = "random"))

cycle.sd <- t(data.frame(lapply(cycle, sd, na.rm = TRUE)))
GDP.cor <- t(data.frame(lapply(cycle, cor, cycle[,1], use = "complete.obs")))
random.sd <- t(data.frame(lapply(random, sd, na.rm = TRUE)))
random.cor <- t(data.frame(lapply(random, cor, random[,1], use = "complete.obs")))

my_table_2 <- round(data.frame(cbind(cycle.sd, GDP.cor, random.sd, random.cor)), 2)
names(my_table_2) <- names(Hamilton_table_2)[1:4]

my_table_2

Run the code above in your browser using DataLab