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

问题描述:

我正在研究一个与时间序列预测类似的模型。拟合一个变量的线性回归模型,该变量取决于R中的过去值

我必须将一个线性回归模型拟合到一个目标变量(TV),该变量有两个其他因变量(X和Y)以及它自己的过去值。

基本上模型看起来像这样:

TV(吨)〜X(T)+ Y(t)的+ TV(T-1)+ TV(T-2)+ TV(T-3)

我被困在尝试转换该R代码

model <- lm(modeldata$TV ~ modeldata$X +modeldata$Y+ ??) 

我怎样写将R代码以适应这种模式?

+0

你不能用'lm'来做到这一点。 – Roland

您需要在发送到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 

您也可以看看专为与面板数据的使用预期可能有一定程度的自相关性的回归方法。

其中一种可能的解决方案是使用Hadley Wickham的dplyr软件包及其lag()函数。 这里是一个完整的例子。我们首先创建一个简单的modeldata。

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的预测值。对于之前的观察,我们无法计算所有滞后值。

当然,我们假设我们有某种时间序列数据。否则,不可能适应和使用这种模型。

+0

谢谢。像你所建议的,我可以有我的traindata。但我的测试数据将如何显示?我将如何使用预测功能? – user2715182

+0

我编辑了我的答案给你一个例子。一旦你有合适的时间序列数据,我认为这很简单。 – crocodile