#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, : обнаружены отсутствующие значения. Использование самой длинной непрерывной части временного ряда Означает ли это, что внешние регрессоры не включены в прогноз?