滚动回归时间序列;系数的平滑变化

时间:2017-07-17 08:59:15

标签: r

我可以进行滚动回归

library(zoo)

seat <- as.zoo(log(UKDriverDeaths))
time(seat) <- as.yearmon(time(seat))
seat <- merge(y = seat, y1 = lag(seat, k = -1),
y12 = lag(seat, k = -12), all = FALSE)

tail(seat)
fm <- rollapply(seat, width = 50,
FUN = function(z) coef(lm(y ~ y1 + y12, data = as.data.frame(z))),
by.column = FALSE, align = "right")

fm

观察拦截情节,这有很大的不同。

plot(fm[,1]

我希望得到最好的平滑系数,这些系数不会随着时间的推移而发生变化,但会平滑变化。有没有办法做到这一点(在任何时候都只考虑过去的数据)。

包走行程序(具有时变系数的贝叶斯回归)执行此操作,但它使用所有数据计算系数,而不考虑任何点上的过去数据。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

首先请注意,我们可以使用dyn包缩短代码:

library(dyn)

seat <- as.zoo(log(UKDriverDeaths))
coef_fun <- function(z) coef(dyn$lm(z ~ lag(z, c(-1, -12)), z))
zcoef <- rollapplyr(seat, 50, coef_fun, coredata = FALSE)

如果我们不想要依赖未来,我们可以使用rollmean(或rollmeanr来简化系数:

zsmooth <- rollmeanr(zcoef, 3)
plot(zsmooth)

如果不够平滑,请使用更大的宽度。