是否有一個實用程序來運行使用下述類型的XTS對象迴歸:迴歸與R中XTS
lm(y ~ lab(x, 1) + lag(x, 2) + lag(x,3), data=as.data.frame(coredata(my_xts)))
其中my_xts
是xts
對象包含一個x
和y
。問題的關鍵是有沒有一種方法可以避免做一堆滯後,併合併到data.frame
所有的滯後?我認爲包dyn
適用於zoo
對象,所以我期望它能以與xts
相同的方式工作,但可能會更新某些內容。
是否有一個實用程序來運行使用下述類型的XTS對象迴歸:迴歸與R中XTS
lm(y ~ lab(x, 1) + lag(x, 2) + lag(x,3), data=as.data.frame(coredata(my_xts)))
其中my_xts
是xts
對象包含一個x
和y
。問題的關鍵是有沒有一種方法可以避免做一堆滯後,併合併到data.frame
所有的滯後?我認爲包dyn
適用於zoo
對象,所以我期望它能以與xts
相同的方式工作,但可能會更新某些內容。
的DYN和dynlm包可以做到這一點與動物園的對象。在dyn的情況下,只寫dyn$lm
而不是lm
,並將它傳遞給動物園對象而不是數據框。
請注意,xts中的滯後與通常的R約定相反,所以如果x是xts類,那麼如果x是動物園或ts類,則lag(x,1)與lag(x,-1)相同。
> library(xts)
> library(dyn)
> x <- xts(anscombe[c("y1", "x1")], as.Date(1:11)) # test data
> dyn$lm(y1 ~ lag(x1, -(1:3)), as.zoo(x))
Call:
lm(formula = dyn(y1 ~ lag(x1, -(1:3))), data = as.zoo(x))
Coefficients:
(Intercept) lag(x1, -(1:3))1 lag(x1, -(1:3))2 lag(x1, -(1:3))3
3.80530 0.04995 -0.12042 0.46631
由於您已經從xts環境中刪除數據,因此我沒有在這裏使用任何xts功能。有一個embed
函數將構造一個「滯後」矩陣到任何期望的程度。 (我永遠無法理解的時間序列lag
功能。)(嵌入滯後變量的順序是從我本來期望相反。)
embed(1:6, 3)
#--------
[,1] [,2] [,3]
[1,] 3 2 1
[2,] 4 3 2
[3,] 5 4 3
[4,] 6 5 4
#Worked example ... need to shorten the y variable
y <- rnorm(20)
x <- rnorm(20)
lm(tail(y, 18) ~ embed(x, 3))
#-------------------
Call:
lm(formula = tail(y, 18) ~ embed(x, 3))
Coefficients:
(Intercept) embed(x, 3)1 embed(x, 3)2 embed(x, 3)3
-0.12452 -0.34919 0.01571 0.01715
這是需要注意的是改變滯後於後一種解脫匹配@GGrothendieck使用那些我們得到相同的結果:
lm(tail(xx[,"y1"], NROW(xx)-3) ~ embed(xx[,"x1"], 4)[,2:4])
Call:
lm(formula = tail(xx[, "y1"], NROW(xx) - 3) ~ embed(xx[, "x1"],
4)[, 2:4])
Coefficients:
(Intercept) embed(xx[, "x1"], 4)[, 2:4]1 embed(xx[, "x1"], 4)[, 2:4]2
3.80530 0.04995 -0.12042
embed(xx[, "x1"], 4)[, 2:4]3
0.46631