Как вы прогнозируете ARIMA с несколькими регрессорами? - PullRequest
1 голос
/ 13 мая 2019

Полные данные и код R для моего вопроса находятся здесь: https://pastebin.com/QtG6A7ZX.

Я новичок в R и все еще начинающий, когда дело доходит до анализа временных рядов, поэтому, пожалуйста, прости мое невежество.

Я пытаюсь смоделировать и прогнозировать некоторые данные о регистрации с помощью двух фиктивных регрессоров.Я уже использовал auto.arima для подгонки к модели:

model <- auto.arima(enroll, xreg=x)

Прежде чем делать прогноз с помощью этой модели, я пытаюсь проверить ее точность, выбрав только часть временного ряда(1: 102 вместо 1: 112), а также частичный список регрессоров.

На основе auto.arima я подгоняю частичную модель следующим образом:

model_par <-arima((enroll_partial), c(1, 1, 1),seasonal = list(order = c(1, 0, 0), period = 5), xreg=x_par)

Я пробовал три разных способа прогнозирования и получал по существу одну и ту же ошибку:

fcast_par <- forecast(model_par, h=10) #error fcast_par <- forecast(model_par, h=10, xreg=x_par) #error fcast_par <- forecast(model_par, h=10, xreg=forecast(x_par,h=10)) #error

'xreg' и 'newxreg' имеют разное количество столбцов

Я проверил, используя auto.arima с частичными данными.Это работает, но дает мне другую модель и, хотя я указал 10 прогнозов, я получаю более 50:

model_par2 <- auto.arima(enroll_partial, xreg=x_par) fcast_par <- forecast(model_par2, h=12, xreg=x_par) fcast_par

Итак, мой главный вопрос, как мне указать точноесмоделировать и предсказать, используя более 1 регрессора, учитывая мои данные (см. ссылку «Вставить корзину» выше)?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Функция forecast() взята из пакета прогноза и работает с функциями модели из этого пакета. Вот почему можно создавать прогнозы из auto.arima(), используя forecast(model_par2,xreg=x_fcst).

Функция arima() происходит из пакета stats, и поэтому нет никаких гарантий, что она будет работать с forecast(). Чтобы указать свою собственную модель ARIMA, вы можете использовать функцию Arima(), которая очень похожа на arima(), но вы сможете получать прогнозы из нее, используя forecast(model_par2,xreg=x_fcst).

1 голос
/ 13 мая 2019

У вас две проблемы.Одна из них заключается в том, что различные функции прогнозирования в R делают это (преднамеренно?) Трудным для вас.

Первая проблема заключается в том, что вам необходимо определить значения ваших регрессоров для периода прогнозирования.Извлеките соответствующие данные из x, используя window():

x_fcst <- window(x,start=c(2017,4))

Вторая проблема заключается в том, что forecast() (который отправляет forecast.Arima()) здесь красная сельдь.Вам нужно использовать predict() (который отправляет predict.Arima() - обратите внимание на заглавные буквы в обоих случаях!):

predict(model_par,newxreg=x_fcst,h=nrow(x_fcst))

, что дает

$pred
Time Series:
Start = c(2017, 3) 
End = c(2019, 1) 
Frequency = 5 
[1] 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451
[9] 52.00451

$se
Time Series:
Start = c(2017, 3) 
End = c(2017, 3) 
Frequency = 5 
[1] 17.13345

Вы также можете использовать auto.arima().Как ни странно, на этот раз forecast() (который все еще отправляет forecast.Arima()) работает работает:

model_par2 <- auto.arima(enroll_partial, xreg=x_par)
forecast(model_par2,xreg=x_fcst)

, что дает

        Point Forecast     Lo 80     Hi 80      Lo 95     Hi 95
2017.40       39.91035 17.612358  62.20834   5.808514  74.01219
2017.60       59.51003 32.783451  86.23661  18.635254 100.38481
2017.80       69.81000 39.290834 100.32917  23.134962 116.48505
2018.00       57.49140 23.601444  91.38136   5.661183 109.32162
2018.20       55.45759 18.503034  92.41214  -1.059524 111.97470
2018.40       34.57866 -7.306747  76.46406 -29.479541  98.63686
2018.60       52.30199  6.702068  97.90192 -17.437074 122.04106
2018.80       61.61591 12.582055 110.64977 -13.374900 136.60672
2019.00       50.47661 -1.765945 102.71917 -29.421485 130.37471

И да, выполучить в пять раз больше прогнозов.Первый столбец является прогнозом ожидания, а другие дают интервалы прогнозирования.Они регулируются параметром level до forecast().

...