2015-11-03 89 views
0

我正在研究一個與時間序列預測類似的模型。擬合一個變量的線性迴歸模型,該變量取決於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

回答

0

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

您也可以看看專爲與面板數據的使用預期可能有一定程度的自相關性的迴歸方法。

1

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

相關問題