其中一種可能的解決方案是使用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的預測值。對於之前的觀察,我們無法計算所有滯後值。
當然,我們假設我們有某種時間序列數據。否則,不可能適應和使用這種模型。
你不能用'lm'來做到這一點。 – Roland