Я пытаюсь провести анализ временных рядов, и я новичок в этой области. У меня есть ежедневный подсчет событий с 2006 по 2009 год, и я хочу приспособить модель временного ряда к нему. Вот прогресс, который я сделал:
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)
В результате получается сюжет:
Чтобы проверить, есть ли сезонность и тенденция в данных или нет, я следую за шагами, упомянутыми в этом посте :
ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal
и в блоге Роба Дж. Хиндмана :
library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")
deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df
#P value
1-pchisq(deviance,df)
Оба случая указывают на отсутствие сезонности.
Когда я рисую ACF & PACF серии, вот что я получаю:
Мои вопросы:
Это способ обработки ежедневных данных временных рядов? На этой странице предлагается, чтобы я смотрел как на недельные, так и на годовые модели, но этот подход мне не ясен.
Я не знаю, как действовать, если у меня есть участки ACF и PACF.
Могу ли я просто использовать функцию auto.arima?
fit <- арима (мыц, порядок = c (p, d, q)
***** Обновлены результаты Auto.Arima ******
Когда я изменить частоту данных 7 согласно комментариям Роба Гайндмана здесь , auto.arima выбирает сезонные модели и выходы ARIMA:
Series: timeSeriesObj
ARIMA(1,1,2)(1,0,1)[7]
Coefficients:
ar1 ma1 ma2 sar1 sma1
0.89 -1.7877 0.7892 0.9870 -0.9278
s.e. NaN NaN NaN 0.0061 0.0162
sigma^2 estimated as 21.72: log likelihood=-4319.23
AIC=8650.46 AICc=8650.52 BIC=8682.18
****** Обновлена проверка сезонности ******
Когда я проверяю сезонность с частотой 7, он выдает True, но с сезонностью 365.25 он выдает false. Достаточно ли этого, чтобы сделать вывод об отсутствии годовой сезонности?
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
возвращает:
True
в то время как
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
возвращает:
False
str(x)
дает?R
простого нет возможности справиться с этим. Я бы искал коммерческие решения, если для продукта, который вы пытаетесь спрогнозировать, требуются большие складские / производственные затраты.R
имеет серьезные ограничения для прогнозирования, как у вас. Посмотрите на вопросы по ежедневному прогнозированию еще где-нибудь на этом сайте.Ответы:
Ваши ACF и PACF указывают, что у вас есть, по крайней мере, еженедельная сезонность, которая показана пиками в лагах 7, 14, 21 и т.
Вы также можете иметь ежегодную сезонность, хотя это не очевидно из вашего временного ряда.
Ваша лучшая ставка, учитывая потенциально несколько сезонностей, может быть
tbats
моделью, которая явно моделирует несколько типов сезонности. Загрузитеforecast
пакет:Ваши выходные данные
str(x)
указывают на то, чтоx
еще нет информации о возможном наличии нескольких сезонностей. Посмотрите?tbats
и сравните выводstr(taylor)
. Назначьте сезонность:Теперь вы можете соответствовать
tbats
модели. (Будьте терпеливы, это может занять некоторое время.)Наконец, вы можете прогнозировать и строить график:
Вы не должны использовать
arima()
илиauto.arima()
, так как они могут обрабатывать только один тип сезонности: либо раз в неделю или раз в год. Не спрашивайте меня, чтоauto.arima()
будет делать с вашими данными. Он может выбрать одну из сезонностей или вообще не учитывать их.РЕДАКТИРОВАТЬ, чтобы ответить на дополнительные вопросы из комментария:
Расчет модели по ежемесячным данным может быть возможным. Тогда вы могли бы, например, сравнить AIC между моделями с сезонностью и без нее.
Однако я бы предпочел использовать несогласованную выборку для оценки моделей прогнозирования. Протяните последние 100 точек данных. Подберите модель с годовой и еженедельной сезонностью к остальным данным (как выше), затем подгоните модель с еженедельной сезонностью, например, с
auto.arima()
помощьюts
символаfrequency=7
. Прогноз с использованием обеих моделей в период ожидания. Проверьте, какая из них имеет более низкую ошибку, используя MAE, MSE или любую другую, наиболее подходящую для вашей функции потерь. Если между ошибками мало различий, используйте более простую модель; в противном случае используйте тот, у которого ошибка меньше.Доказательство пудинга в еде, а доказательство модели временного ряда в прогнозировании.
Чтобы улучшить положение вещей, не используйте единственную несогласованную выборку (которая может вводить в заблуждение, учитывая рост в конце вашей серии), но используйте скользящие прогнозы происхождения, которые также известны как «перекрестная проверка временных рядов» . (Я очень рекомендую весь бесплатный онлайн учебник по прогнозированию .
Стандартные модели ARIMA обрабатывают сезонность с помощью сезонных различий. Для сезонных месячных данных вы не будете моделировать необработанные временные ряды, но будете различать временные ряды между мартом 2015 года и мартом 2014 года, между февралем 2015 года и февралем 2014 года и т. Д. (Чтобы получить прогнозы в исходном масштабе, вам, конечно, нужно снова сделать различие.)
Не существует очевидного способа распространить эту идею на несколько сезонностей.
Конечно, вы можете сделать что-то, используя ARIMAX, например, включив ежемесячные манекены для моделирования годовой сезонности, а затем моделировать остатки, используя еженедельный сезонный ARIMA. Если вы хотите сделать это в R, используйте
ts(x,frequency=7)
, создайте матрицу ежемесячных манекенов и введите их вxreg
параметрauto.arima()
.Я не припоминаю ни одной публикации, которая конкретно распространяет ARIMA на несколько сезонностей, хотя я уверен, что кто-то сделал что-то подобное в моем предыдущем абзаце.
источник
R
, такR
как не имеет возможности обрабатывать мультисезонные ARIMA.tbats
моделью.Лучший способ разложить сезонные данные с использованием существующих пакетов R - это ceemdan () в Rlibeemd. Эта техника извлекает сезонность нескольких периодов. Значения по умолчанию работают хорошо. Он использует преобразование Гильберта-Хуанга вместо преобразования Фурье. Преобразование Фурье имеет серьезный недостаток в том, что оно может обрабатывать только стационарные, линейные данные, когда большинство интересующих серий не являются ни тем, ни другим. Например, случайное блуждание y_t = y_ {t-1} + e_t - самое простое случайное блуждание, которое часто встречается. Другие методы фиксируют амплитуду сезонных колебаний, когда они часто меняются на практике.
источник
Поднятые вами вопросы были рассмотрены в R Прогнозирование временных рядов: Вопросы, касающиеся моих результатов . Пожалуйста, внимательно посмотрите на мой подробный ответ и все комментарии в обсуждении, включая комментарии к исходному вопросу, поскольку я считаю, что они имеют отношение к вашей проблеме. Вы можете на самом деле взять данные, которые были предоставлены в посте, и использовать их в качестве учебного момента для себя. Используйте всю дискуссию как учебник для начинающих.
источник