[英]fit linear regression model for a variable that depends on past values in R
我正在研究一个类似于时间序列预测的模型。
我必须将线性回归模型拟合到目标变量(TV),该变量具有其他两个因变量(X和Y)以及自己的过去值。
基本上,模型如下所示:
TV(t)〜X(t)+ Y(t)+ TV(t-1)+ TV(t-2)+ TV(t-3)
我在尝试转换此R代码时遇到了麻烦
model <- lm(modeldata$TV ~ modeldata$X +modeldata$Y+ ??)
如何编写适合这种模型的R代码?
一种可能的解决方案是使用Hadley Wickham的dplyr软件包及其lag()函数。 这是一个完整的例子。 我们首先创建一个简单的模型数据。
modeldata <- data.frame(X=1:10, Y=1:10, TV=1:10)
modeldata
X Y TV
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7
8 8 8 8
9 9 9 9
10 10 10 10
然后,我们加载dplyr软件包并使用其mutate()函数。 我们使用lag()函数在数据框中创建新列。
library(dplyr)
modeldata <- mutate(modeldata, TVm1 = lag(TV,1), TVm2 = lag(TV,2), TVm3 = lag(TV, 3))
modeldata
X Y TV TVm1 TVm2 TVm3
1 1 1 1 NA NA NA
2 2 2 2 1 NA NA
3 3 3 3 2 1 NA
4 4 4 4 3 2 1
5 5 5 5 4 3 2
6 6 6 6 5 4 3
7 7 7 7 6 5 4
8 8 8 8 7 6 5
9 9 9 9 8 7 6
10 10 10 10 9 8 7
最后,我们提供从数据框(使用〜。表示法)到lm()函数的所有变量。
model <- lm(TV ~ ., data = modeldata)
为了获得基于该模型的预测,我们必须以相同的方式准备测试集。
testdata <- data.frame(X = 11:15, Y = 11:15, TV = 11:15)
testdata <- mutate(testdata, TVm1 = lag(TV,1), TVm2 = lag(TV,2), TVm3 = lag(TV, 3))
predict(model, newdata = testdata)
在这种情况下,我们只能获得测试数据中观测值14和15的预测。 对于较早的观察,我们无法计算所有滞后值。
当然,我们假设我们有某种时间序列数据。 否则,将无法拟合和使用这种模型。
发送给lm
之前,您需要构建适当的数据集。 存在一些lag
函数:一个在dply包中,另一个在时间序列对象中使用。 您可以使用以下方法快速创建滞后电视版本:
laggedVar <- embed(Var, 4)
例如
> embed(1:10, 4)
[,1] [,2] [,3] [,4]
[1,] 4 3 2 1
[2,] 5 4 3 2
[3,] 6 5 4 3
[4,] 7 6 5 4
[5,] 8 7 6 5
[6,] 9 8 7 6
[7,] 10 9 8 7
您还可能会查看设计用于面板数据的回归方法,这些方法可能具有一定程度的自相关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.