【发布时间】:2012-10-17 07:13:42
【问题描述】:
我在时间序列上使用 lm,实际上效果很好,而且超级超级快。
假设我的模型是:
> formula <- y ~ x
我在一个训练集上训练这个:
> train <- data.frame( x = seq(1,3), y = c(2,1,4) )
> model <- lm( formula, train )
...我可以对新数据进行预测:
> test <- data.frame( x = seq(4,6) )
> test$y <- predict( model, newdata = test )
> test
x y
1 4 4.333333
2 5 5.333333
3 6 6.333333
这非常好用,而且速度非常快。
我想在模型中添加滞后变量。现在,我可以通过扩充我的原始训练集来做到这一点:
> train$y_1 <- c(0,train$y[1:nrow(train)-1])
> train
x y y_1
1 1 2 0
2 2 1 2
3 3 4 1
更新公式:
formula <- y ~ x * y_1
...训练会很好:
> model <- lm( formula, train )
> # no errors here
但是,问题在于无法使用“预测”,因为无法以批处理方式在测试集中填充 y_1。
现在,对于很多其他回归的东西,在公式中都有很方便的表达方式,比如poly(x,2)等,这些直接使用未经修改的训练和测试数据。
那么,我想知道公式中是否有某种方式来表达滞后变量,以便可以使用predict?理想情况下:
formula <- y ~ x * lag(y,-1)
model <- lm( formula, train )
test$y <- predict( model, newdata = test )
...无需扩充(不确定这是否是正确的词)训练和测试数据集,并且能够直接使用predict?
【问题讨论】:
-
这是我认为 R 应该能够更优雅地处理的东西。
-
@Charlie,这个问题被标记为“r”。你觉得上面的代码是用什么语言写的?
-
我知道它是用 R 编写的。我只是评论说我认为 R 不能很好地处理时间序列操作(即使使用
dyn包),我希望有一个可以更优雅地做到这一点的包。例如,我认为 Stata 使时间序列操作非常容易。dyn包有助于回归,但例如,将滞后变量添加到数据框需要一些技巧df$lagged <- c(NA, head(df$var, -1))。 -
啊,我明白了:“我希望它做到了”中的“应该”,而不是“我认为它做到了”中的“应该”。
-
如果
test在覆盖之前包含列y,我认为您的代码的最后一块有效。