Я установил модель с несколькими независимыми переменными, одна из которых - задержка зависимой переменной, используя пакет dynlm.
Предполагая, что у меня есть прогнозы на 1 шаг вперед для моих независимых переменных, как мне получить прогнозы на 1 шаг вперед для моих зависимых переменных?
Вот пример:
library(dynlm)
y<-arima.sim(model=list(ar=c(.9)),n=10) #Create AR(1) dependant variable
A<-rnorm(10) #Create independant variables
B<-rnorm(10)
C<-rnorm(10)
y<-y+.5*A+.2*B-.3*C #Add relationship to independant variables
data=cbind(y,A,B,C)
#Fit linear model
model<-dynlm(y~A+B+C+L(y,1),data=data)
#Forecast
A<-c(A,rnorm(1)) #Assume we already have 1-step forecasts for A,B,C
B<-c(B,rnorm(1))
C<-c(C,rnorm(1))
y=window(y,end=end(y)+c(1,0),extend=TRUE)
newdata<-cbind(y,A,B,C)
predict(model,newdata)
А вот пример использования пакета dyn, который работает.
library(dyn)
#Fit linear model
model<-dyn$lm(y~A+B+C+lag(y,-1),data=data)
#Forecast
predict(model,newdata)the dyn packages, which works:
r
dynamic-regression
Zach
источник
источник
dynlm
пакета не обеспечит прогнозы для ваших зависимых переменных. Для предоставления прогнозов для ваших зависимых переменных потребуется модель для их объяснения и, возможно, дополнительные данные. Я предлагаю вам прочитать кое-что о многомерной регрессии, например, «Прикладной многомерный статистический анализ» Джонсона и Вихерна. или курс по прогнозированию: duke.edu/~rnau/411home.htmОтветы:
Поздравляем, вы нашли ошибку. Прогнозирование
dynlm
с новыми данными нарушается, если используются лаговые переменные. Чтобы понять, зачем смотреть на выводРезультаты должны быть одинаковыми, но это не так. Без
newdata
аргументовpredict
функция в основном захватываетmodel
элемент изdynlm
вывода. Сnewdata
аргументомpredict
пытается сформировать новую модель матрицы изnewdata
. Так как это включает в себя формулу синтаксического анализа, которая передается,dynlm
и формула имеет функциюL
, которая определена только внутри функцииdynlm
, формируется неправильная матрица модели. Если вы попытаетесь отладить, вы увидите, что в случаеnewdata
аргумента lagged зависимая переменная не отстает .Что вы можете сделать, так это отстать от зависимой переменной и включить ее в
newdata
. Вот код, иллюстрирующий этот подход. Я используюset.seed
так, чтобы это было легко воспроизводимо.Вот ошибочное поведение:
Форма
newdata
Сравните прогноз с подгонкой модели:
Как видно из исторических данных, прогноз совпадает, и последний элемент содержит прогноз на 1 шаг вперед.
источник
lag(y,-1)+lag(y,-2)
?Следуя запросу @ md-azimul-haque, я просмотрел свой 4-летний исходный код и нашел следующую функцию с соответствующим именем. Не уверены, что это то, что ищет @ md-azimul-haque?
источник