是否有使用以下类型的 xts 对象运行回归的实用程序:
lm(y ~ lab(x, 1) + lag(x, 2) + lag(x,3), data=as.data.frame(coredata(my_xts)))
wheremy_xts
是一个xts
包含 anx
和 a的对象y
。问题的关键是有没有办法避免做一堆滞后和合并以拥有data.frame
所有滞后?我认为该软件包dyn
适用于zoo
对象,因此我希望它以相同的方式工作,xts
但可能会有一些更新。
是否有使用以下类型的 xts 对象运行回归的实用程序:
lm(y ~ lab(x, 1) + lag(x, 2) + lag(x,3), data=as.data.frame(coredata(my_xts)))
wheremy_xts
是一个xts
包含 anx
和 a的对象y
。问题的关键是有没有办法避免做一堆滞后和合并以拥有data.frame
所有滞后?我认为该软件包dyn
适用于zoo
对象,因此我希望它以相同的方式工作,xts
但可能会有一些更新。
dyn 和 dynlm 包可以用 zoo 对象做到这一点。在 dyn 的情况下,只需写入dyn$lm
而不是lm
传递动物园对象而不是数据框。
请注意,xts 中的 lag 与通常的 R 约定相反,因此如果 x 属于 xts 类,那么如果 x 属于 zoo 或 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