2017-07-17 133 views
1

的平滑變化,我可以做一個滾動迴歸滾動時間序列迴歸;係數

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] 

我想擁有最佳的平滑係數,這些平滑係數並不隨時間而變化,但平穩變化。有沒有辦法做到這一點(只考慮過去的數據)。

包行走器(具有時變係數的貝葉斯迴歸)做到了這一點,但它使用所有數據計算係數,並且不考慮任何點的過去數據。

謝謝你的幫助。

回答

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) 

如果不夠平滑,請使用較大的寬度。