Прогнозирование с использованием объекта модели из пакета ARDL R
Я пытаюсь использовать функцию прогноза на такой модели ardl .
library(ARDL)
data(denmark)
models <- auto_ardl(LRM ~ LRY + IBO + IDE, data = denmark, max_order = 5)
ardl_3132 <- models$best_model
fabletools::forecast(object = ardl_3132, new_data = denmark[1:20, ])
forecast::forecast(object = ardl_3132, new_data = denmark[1:20, ])
Однако это выдает ошибку
Error in L(LRM, 1) : could not find function "L"
Как мне сделать так, чтобы прогноз работал здесь?
2 ответа
Насколько я знаю, в «ядре» модели ARDL обычно лежит простая линейная регрессия (если только она не указана как динамическая модель с dynlm), поэтому... Лучшей попыткой было бы попытаться построить модель ARDL с использованием другого пакета/функции. . Это требует немного больше написания, но должно дать вам работающий объект модели, который вы затем можете использовать для построения своего прогноза/прогноза.
Итак, что бы я сделал, так это оценил бы модель ARDL с помощью пакета ARDL, как вы сделали в своем примере выше, извлеките полную формулу из объекта вашей модели и перепишите ее внутри формулы lm(), используя ее синтаксис, вот так:
> ardl_3132$full_formula
LRM ~ L(LRM, 1) + L(LRM, 2) + L(LRM, 3) + LRY + L(LRY, 1) + IBO + L(IBO, 1) + L(IBO, 2) + L(IBO, 3) + IDE + L(IDE, 1) + L(IDE, 2)
Мы можем указать приведенную выше формулу внутри модели lm():
ardl_3132_lm <- lm(LRM ~ lag(LRM, 1) + lag(LRM, 2) + lag(LRM, 3) + LRY + lag(LRY, 1) + IBO + lag(IBO, 1) + lag(IBO, 2) + lag(IBO, 3) + IDE + lag(IDE, 1) + lag(IDE, 2), data = denmark)
Вы можете использоватьpredict.lm()
функция для создания прогноза с использованием линейно заданной модели ARDL:
predict.lm(ardl_3132_lm)
Сам пакет ARDL полезен для более удобной оценки модели, чем если бы вы использовали lm() или glm(). См. вызов summary() для объекта модели, чтобы изучить его свойства.
summary(ardl_3132)
Сравнивая его сlm()
указанная сводка моделей показывает, однако, что они не идентичны.
summary(ardl_3132_lm)
Причина этого в том, что функцияARDL::auto_ardl()
для этого конкретного примера было выбраноdynlm::dynlm(formula = full_formula, data = data, start = start, end = end)
который определяет динамические линейные модели и регрессию временных рядов , а не линейную модель.
Чтобы создать прогноз из модели dynlm, вам нужно будет использоватьstats::predict()
вот так:
stats::predict(ardl_3132, 1)
Сравнениеdynlm
прогнозируемые значения с прогнозируемыми значениями линейной модели,
stats::predict(ardl_3132_lm)
мы видим, что прогнозы разные.
Обновление: вероятно, лучшим вариантом было бы использовать другой пакет, специфичный для ARDL, а не простые функции lm() или glm().
Итак, теперь я бы использовал другой пакет dyn, который использует несколько своеобразный синтаксис:
library(dyn)
dyn_model_1 <- dyn::dyn$lm(LRM ~ stats::lag(LRM, -1) + stats::lag(LRM, -2) + stats::lag(LRM, -3) + LRY + stats::lag(LRY, -1) + IBO + stats::lag(IBO, -1) + stats::lag(IBO, -2) + stats::lag(IBO, -3) + IDE + stats::lag(IDE, -1) + stats::lag(IDE, -2), data = denmark)
Распечатать сводку по указанной модели:
summary(dyn_model_1)
Соблюдайте установленные значения модели:
plot(dyn_model_1$fitted.values)
Предсказать n шагов вперед, используя указанную модель:
n <- 2
# Указать количество шагов вперед для прогнозирования
prediction <- predict(dyn_model_1, n)
# Прогноз на n шагов вперед
# График прогнозируемых значений
Важное примечание: вы не можете предсказать y для периода t+i, если в уравнении есть незапаздывающие переменные, имеющие время t=0. Кроме того, если вы хотите сделать прогнозы t =2, вы должны убедиться, что вы также удалили из уравнения переменные с запаздыванием t-1.
Общее правило: вы не можете предсказать дальше, чем ваши независимые переменные отстают в уравнении, определяющем модель.
Итак, в этом случае предсказание на 2 шага вперед не сработает, потому что у нас все еще есть переменные t=0 и t=-1 в уравнении модели. Чтобы прогнозировать, нам сначала нужно удалить эти (отстающие) переменные из уравнения. Чтобы мы могли предсказывать на 2 шага вперед, мне пришлось бы переопределить модель как таковую:
dyn_model_2 <- dyn::dyn$lm(LRM ~ stats::lag(LRM, -2) + stats::lag(LRM, -3) + stats::lag(IBO, -2) + stats::lag(IBO, -3) + stats::lag(IDE, -2), data = denmark)
prediction <- predict(dyn_model_2, n)
plot(prediction)
Я тоже вижу эту ошибку при попытке использовать прогноз () в модели ardl.
Я думаю, функция L находится в tsDyn, но загрузка, которая не устраняет ошибку.