在一起我有一個DF如下:使用lapply和LM功能中的R
t r
1 0 100.00000
2 1 135.86780
3 2 149.97868
4 3 133.77316
5 4 97.08129
6 5 62.15988
7 6 50.19177
等等...
我想用lm(r~t)
申請滾動迴歸。
不過,我想估計一個模型每次迭代,在迭代發生在一個設定的時間窗口t+k
。從本質上講,第一種模式應與t=0,t=1,...t=5
估計,如果k = 5
,第二個模型t=1, t=2,...,t=6
估計,依此類推。
換句話說,它從具有集合窗口t + k的起點迭代,其中k是某個預先指定的窗口長度,並且迭代地在該特定窗口長度上應用lm函數。
我一直在使用lapply這樣的嘗試:
mdls = lapply(df, function(x) lm(r[x,]~t))
但是,我得到了以下錯誤:
Error in r[x, ] : incorrect number of dimensions
如果我刪除了[X],每次迭代給我相同的模型換句話說,使用所有的觀察。
如果我使用rollapply:
coefs = rollapply(df, 3, FUN = function(x) coef(lm(r~t, data =
as.data.frame(x))), by.column = FALSE, align = "right")
res = rollapply(df, 3, FUN = function(z) residuals(lm(r~t, data =
as.data.frame(z))), by.column = FALSE, align = "right")
其中:
t = seq(0,15,1)
r = (100+50*sin(0.8*t))
df = as.data.frame(t,r)
我得到15種型號,但它們都在估計整個數據集,提供相同的攔截和係數。這很奇怪,因爲我在用新腳本測試它之前,設法使rollapply工作。由於某種原因,它不能再工作,所以我很困惑R是否在玩弄我,或者我的代碼有什麼問題。
如何調整這些方法以確保它們按照我的意願進行迭代?
非常感謝您! 此外,僅供參考,我注意到,我在我的問題有一個重要的(但愚蠢的)錯誤。本質上,我寫了as.data.frame(t,r)而不是data.frame(t,r),因此只有一個r的向量而不是幾個觀察值。 通過改變這個錯誤,我設法得到不同的係數和殘差。 無論如何,感謝很多的解決方案,它看起來非常整潔,很容易遵循。 =) – Mattia
謝謝你的評論:) –