Прогнозирование с использованием объекта модели из пакета 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, но загрузка, которая не устраняет ошибку.

Другие вопросы по тегам