Как работает функция прогнозирования для auto.arima с экзогенными регрессорами?

#r #dynamic #regression #forecast

#r #динамический #регрессия #прогноз

Вопрос:

Я пытаюсь подогнать модель динамической регрессии, используя auto.arima. У меня есть ежемесячные данные об использовании газа (для отопления) для каждого клиента (которые я хочу спрогнозировать) и набор регрессоров (например, количество дней нагрева, цена на газ, структурные макеты для определенных лет и сезонные макеты). У меня есть прогнозные значения для экзогенных регрессоров. Данные об использовании для каждого клиента доступны с января 2005 по март 2018 года, все остальные данные — с января 2005 по декабрь 2021 года. Я пытаюсь спрогнозировать использование для каждого клиента на все месяцы 2020 года. Я не уверен, как разделить мои данные между xreg в функции auto.arima и функцией прогнозирования. Прогнозные значения, которые я в настоящее время получаю, не совпадают с месяцем использования, например, прогноз использования на одного клиента на апрель 2018 года такой же высокий, как и фактическое использование в январе 2005 года, и почти равен ему. Этого не должно быть.

Я пытаюсь спрогнозировать потребление газа для бытовых потребителей, используя динамическую регрессионную модель в пакете forecats. Я ссылался на онлайн-учебник профессора. Роб Дж. Хайндман https://otexts.com/fpp2/forecasting.html

 #I generated the time series for the period for which the data is available (Jan 2005-Mar 2018)
Med_ros_upc.ts.test<-ts(Med_ros_upc.ts[,"ORMEDSCH410upc.r"], 
frequency    = 12, start = c(2005,1), end = c(2018,3))                        
#This is the set of external regressors including seasonal dummies(sd.ts)
xreg_Med<- cbind(Hdd = Med_ros_upc.ts[, "MEDHDD"],
             Hdd2 = Med_ros_upc.ts[, "MEDHDD2"],
             RPA = Med_ros_upc.ts[, "ORSCH410RPAt1.r"],  sd, 
             Jan2009, intdummf)
#I convert the xreg matrix into a time series. I use this in auto.arima
xreg_Med.ts<-ts(xreg_Med, frequency = 12, start = c(2005,1), 
end = c(2018,3))
#I generate a different xreg for forecast"
xreg_Med.ts1<-ts(xreg_Med, frequency = 12, start = c(2018,4),
 end = c(2021, 12))
fitdyn <- auto.arima(Med_ros_upc.ts.test, xreg =xreg_Med.ts)
fcast <- forecast(fitdyn , xreg = xreg_Med.ts1)
  

Ожидаемый результат
Точечный прогноз
Январь 2005 111.19
89.22 февраля 2005…
Апрель 2005 53.86

Фактический прогноз точки результата

Апрель 2018 111.19 Май 2018 89.22… Июнь 2018 53.86

Ответ №1:

Ваши обучающие данные начинаются в январе 2005 года и заканчиваются в марте 2018 года. Итак, ваши прогнозы начинаются в апреле 2018 года. Прогнозы относятся к будущим данным обучения по определению.

Комментарии:

1. Спасибо за разъяснение. Я надеялся увидеть установленные значения за 2005-2018 годы и прогноз на несколько лет после этого. Меня больше всего интересует прогноз на 2020 год. Знаете ли вы какую-либо другую функцию, которая генерировала бы подобранные значения и прогноз? Еще раз спасибо!

2. fitted() генерирует подобранные значения. у forecast() есть аргумент для определения горизонта прогноза.

Ответ №2:

Спасибо! Это то, что я сделал:

 `fitdyn <- auto.arima(Med_ros_upc.ts[,"ORMEDSCH410upc.r"], xreg =xreg_Med, stationary= TRUE)`
`fit<-fitted(fitdyn)`
`fcast_fit<-forecast(fit, h=36, xreg= xreg_Med)`
  

Теперь у меня есть две отдельные таблицы, одна с установленными значениями и с прогнозом, и значения выглядят нормально.

Однако я получаю это сообщение об ошибке:

Ошибка в etsmodel(y, errortype[i], trendtype[j], seasontype[k], damped[l], : неиспользуемый аргумент (xreg = xreg_Med) Кроме того: Предупреждающее сообщение: В ets(object, lambda = лямбда, biasadj = biasadj, allow.multiplicative.trend = allow.multiplicative.trend, : обнаружены отсутствующие значения. Использование самой длинной непрерывной части временного ряда

Означает ли это, что прогноз, который я получаю, не учитывает внешние регрессоры?

Комментарии:

1. Привет! Вы опубликовали это как ответ, но, похоже, это должен быть вопрос или комментарий.

2. Да, вы правы. Я опубликую это как вопрос. Спасибо.

3. Спасибо! Я запустил следующее, но у него есть сообщение об ошибке:

4. fitdyn <- auto.arima(Med_ros_upc.ts[,"ORMEDSCH410upc.r"], xreg =xreg_Med, stationary= TRUE) fit<-fitted(fitdyn) fcast_fit<-forecast(fit, h=36, xreg= xreg_Med) Ошибка в etsmodel(y, errortype[i], trendtype[j], seasontype[k], damped[l], : неиспользуемый аргумент (xreg = xreg_Med) Кроме того: Предупреждающее сообщение: В ets(object, lambda = лямбда, biasadj = biasadj, allow.multiplicative.trend = allow.multiplicative.trend, : обнаружены отсутствующие значения. Использование самой длинной непрерывной части временного ряда Означает ли это, что внешние регрессоры не включены в прогноз?