Я устанавливаю модель ARIMA на ежедневные временные ряды. Данные собираются ежедневно с 02-01-2010 по 30-07-2011 и касаются продаж газет. Поскольку можно найти недельный график продаж (среднесуточное количество проданных копий обычно одинаково с понедельника по пятницу, а затем увеличивается в субботу и воскресенье), я пытаюсь уловить эту «сезонность». Учитывая данные о продажах «данные», я создаю временной ряд следующим образом:
salests<-ts(data,start=c(2010,1),frequency=365)
а затем я использую функцию auto.arima (.), чтобы выбрать лучшую модель ARIMA по критерию AIC. Результатом всегда является несезонная модель ARIMA, но если я попробую какую-нибудь модель SARIMA со следующим синтаксисом в качестве примера:
sarima1<-arima(salests, order = c(2,1,2), seasonal = list(order = c(1, 0, 1), period = 7))
Я могу получить лучшие результаты. Есть ли что-то не так в спецификации ts command / arima? Недельный график очень сильный, поэтому я не ожидал бы так много трудностей при его захвате. Любая помощь будет очень полезна. Спасибо, Джулия Деппиери
Обновить:
Я уже изменил некоторые аргументы. Точнее, процедура выбирает ARIMA (4,1,3) как лучшую модель, когда я установил D=7
, но AIC и другие, также хорошо подходящие по показателям и прогнозам соответствия), вообще не улучшаются. Я предполагаю, что есть некоторые ошибки из-за путаницы между сезонностью и периодичностью ..?!
Вызов Auto.arima используется и получен результат:
modArima<-auto.arima(salests,D=7,max.P = 5, max.Q = 5)
ARIMA(2,1,2) with drift : 1e+20
ARIMA(0,1,0) with drift : 5265.543
ARIMA(1,1,0) with drift : 5182.772
ARIMA(0,1,1) with drift : 1e+20
ARIMA(2,1,0) with drift : 5137.279
ARIMA(2,1,1) with drift : 1e+20
ARIMA(3,1,1) with drift : 1e+20
ARIMA(2,1,0) : 5135.382
ARIMA(1,1,0) : 5180.817
ARIMA(3,1,0) : 5117.714
ARIMA(3,1,1) : 1e+20
ARIMA(4,1,1) : 5045.236
ARIMA(4,1,1) with drift : 5040.53
ARIMA(5,1,1) with drift : 1e+20
ARIMA(4,1,0) with drift : 5112.614
ARIMA(4,1,2) with drift : 4953.417
ARIMA(5,1,3) with drift : 1e+20
ARIMA(4,1,2) : 4960.516
ARIMA(3,1,2) with drift : 1e+20
ARIMA(5,1,2) with drift : 1e+20
ARIMA(4,1,3) with drift : 4868.669
ARIMA(5,1,4) with drift : 1e+20
ARIMA(4,1,3) : 4870.92
ARIMA(3,1,3) with drift : 1e+20
ARIMA(4,1,4) with drift : 4874.095
Best model: ARIMA(4,1,3) with drift
Так что я предполагаю, что функция arima должна использоваться как:
bestOrder <- cbind(modArima$arma[1],modArima$arma[5],modArima$arma[2])
sarima1<-arima(salests, order = c(4,1,3))
без сезонных компонентов и параметров периода. Данные и аналитический анализ показывают, что один и тот же недельный график может быть приближенно рассмотрен для каждой недели, за исключением августа 2010 года (когда зарегистрирован последовательный рост продаж). К сожалению, у меня нет опыта в моделировании временных рядов, на самом деле я пробую этот подход, чтобы найти альтернативное решение для других параметрических и непараметрических моделей, которые я пытался приспособить к этим проблемным данным. У меня также есть много зависимых числовых переменных, но они показали низкую мощность при объяснении переменной отклика: несомненно, самая трудная часть для моделирования - это временная составляющая. Более того, построение фиктивных переменных для представления месяцев и дней недели оказалось не надежным решением.
источник
Проблема с подгонкой сезонного ARIMA к ежедневным данным заключается в том, что «сезонный компонент» может работать только в выходные или, может быть, только в будние дни, поэтому в целом существует незначительный «сезонный компонент». Теперь вам нужно дополнить ваш набор данных 6-ю манекенами, представляющими дни недели, и, возможно, месячными показателями, представляющими годовые эффекты. Теперь рассмотрите возможность включения событий, таких как праздники, и включите в них любые опережающие, одновременные или запаздывающие эффекты вокруг этих известных переменных. Нет, в данных могут быть необычные значения (импульсы), сдвиги уровней или тренды местного времени. Кроме того, эффекты дня недели могли меняться с течением времени, например, не было эффекта субботы в течение первых 20 недель, а эффекта субботы в течение последних 50 недель.
источник
Чтобы определить порядок сезонности в моей TS (ежедневные данные за 3 года), я использовал этот код в Matlab:
с = 0; мин = 1e + 07; п = длина (х); для i = 1: 400 diff = x (i + 1: n) -x (1: ni); с (я) = сумма (абс (разн)); если (с (я)
Это дает мне 365, что логично.
источник