簡體   English   中英

依賴於R中過去值的變量擬合線性回歸模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM