我在一个时间序列上使用了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
然而,问题在于没有办法使用“predict”,因为无法以批处理的方式填充测试集中的y_1。
现在,对于许多其他回归模型,有非常方便的方法来在公式中表达它们,例如poly(x,2)
等,这些方法直接使用未经修改的训练和测试数据即可工作。
所以,我想知道是否有一种方法可以在公式中表达滞后变量,以便可以使用predict
进行预测呢?理想情况下:
formula <- y ~ x * lag(y,-1)
model <- lm( formula, train )
test$y <- predict( model, newdata = test )
...不必增加(不确定是否是正确的词)训练和测试数据集,只需直接使用predict
?
dyn
包,我认为R在处理时间序列操作方面并不那么出色,并且我希望有一个可以更优雅地完成这项工作的包。例如,我认为Stata非常容易进行时间序列操作。dyn
包有助于回归,但是例如将滞后变量添加到数据框中需要一些技巧,如df$lagged <- c(NA, head(df$var, -1))
。 - Charlietest
包含列y
。 - user3226167