拟合变量的线性回归模型,该变量取决于R中的过去值

时间:2015-11-03 18:10:21

标签: 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代码以适应这种模型?。

2 个答案:

答案 0 :(得分:1)

其中一个可能的解决方案是使用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)

在这种情况下,我们只能在testdata中获得观察14和15的预测。对于早期观察,我们无法计算所有滞后值。

当然,我们假设我们有某种时间序列数据。否则,就无法使用这种模型。

答案 1 :(得分:0)

您需要在发送到lm之前构建正确的数据集。存在一些lag函数:一个在dply包中,另一个用于时间序列对象。您可以通过以下方式快速创建一个滞后版本的电视:

 laggedVar <- embed(Var, 4)

E.g。

> 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

您还可以查看设计用于面板数据的回归方法,这些数据可能会有一定程度的自相关性。