Я использую lm для временного ряда, который работает довольно хорошо на самом деле, и он супер супер быстро.
Скажем, моя модель:
> formula <- y ~ x
Я тренирую это на тренировочном наборе:
> train <- data.frame( x = seq(1,3), y = c(2,1,4) )
> model <- lm( formula, train )
... и я могу сделать прогнозы для новых данных:
> test <- data.frame( x = seq(4,6) )
> test$y <- predict( model, newdata = test )
> test
x y
1 4 4.333333
2 5 5.333333
3 6 6.333333
Это прекрасно работает, и это очень быстро.
Я хочу добавить в модель отстающие переменные. Теперь я мог бы сделать это, увеличив свой первоначальный набор упражнений:
> train$y_1 <- c(0,train$y[1:nrow(train)-1])
> train
x y y_1
1 1 2 0
2 2 1 2
3 3 4 1
обновить формулу:
formula <- y ~ x * y_1
... и тренировка будет работать нормально:
> model <- lm( formula, train )
> # no errors here
Однако проблема заключается в том, что не существует способа использовать "предсказывать", потому что нет способа заполнения y_1 в тестовом наборе пакетным образом.
Теперь, для многих других регрессионных вещей, есть очень удобные способы выразить их в формуле, например poly(x,2)
и т.д., и они работают напрямую, используя немодифицированные учебные и тестовые данные.
Итак, мне интересно, есть ли способ выражения отстающих переменных в формуле, чтобы можно было использовать predict
? В идеале:
formula <- y ~ x * lag(y,-1)
model <- lm( formula, train )
test$y <- predict( model, newdata = test )
... без необходимости увеличивать (не уверены, правильно ли это слово) учебные и тестовые наборы данных и просто иметь возможность напрямую использовать predict
?