Как интерпретировать и делать прогнозирование с использованием пакета tsoutliers и auto.arima


9

У меня есть ежемесячные данные с 1993 по 2015 год, и я хотел бы сделать прогноз на этих данных. Я использовал пакет tsoutliers для определения выбросов, но я не знаю, как мне продолжать прогнозировать с моим набором данных.

Это мой код:

product.outlier<-tso(product,types=c("AO","LS","TC"))
plot(product.outlier)

Это мой вывод из пакета tsoutliers

ARIMA(0,1,0)(0,0,1)[12]                    

Coefficients:
        sma1    LS46    LS51    LS61    TC133   LS181   AO183   AO184   LS185   TC186    TC193    TC200
      0.1700  0.4316  0.6166  0.5793  -0.5127  0.5422  0.5138  0.9264  3.0762  0.5688  -0.4775  -0.4386
s.e.  0.0768  0.1109  0.1105  0.1106   0.1021  0.1120  0.1119  0.1567  0.1918  0.1037   0.1033   0.1040
       LS207    AO237    TC248    AO260    AO266
      0.4228  -0.3815  -0.4082  -0.4830  -0.5183
s.e.  0.1129   0.0782   0.1030   0.0801   0.0805

sigma^2 estimated as 0.01258:  log likelihood=205.91
AIC=-375.83   AICc=-373.08   BIC=-311.19

 Outliers:
    type ind    time coefhat  tstat
1    LS  46 1996:10  0.4316  3.891
2    LS  51 1997:03  0.6166  5.579
3    LS  61 1998:01  0.5793  5.236
4    TC 133 2004:01 -0.5127 -5.019
5    LS 181 2008:01  0.5422  4.841 
6    AO 183 2008:03  0.5138  4.592
7    AO 184 2008:04  0.9264  5.911
8    LS 185 2008:05  3.0762 16.038
9    TC 186 2008:06  0.5688  5.483
10   TC 193 2009:01 -0.4775 -4.624
11   TC 200 2009:08 -0.4386 -4.217
12   LS 207 2010:03  0.4228  3.746
13   AO 237 2012:09 -0.3815 -4.877
14   TC 248 2013:08 -0.4082 -3.965
15   AO 260 2014:08 -0.4830 -6.027
16   AO 266 2015:02 -0.5183 -6.442

Это мой сюжет

У меня также есть эти предупреждающие сообщения.

Warning messages:
1: In locate.outliers.iloop(resid = resid, pars = pars, cval = cval,  :
  stopped when maxit was reached
2: In locate.outliers.iloop(resid = resid, pars = pars, cval = cval,  :
  stopped when maxit was reached
3: In locate.outliers.oloop(y = y, fit = fit, types = types, cval = cval,  :
  stopped when maxit was reached
4: In arima(x, order = c(1, d, 0), xreg = xreg) :
  possible convergence problem: optim gave code = 1
5: In auto.arima(x = c(5.77, 5.79, 5.79, 5.79, 5.79, 5.79, 5.78, 5.78,  :
  Unable to fit final model using maximum likelihood. AIC value approximated

Сомнения:

  1. Если я не ошибаюсь, пакет tsoutliers удалит обнаруженные выбросы и, используя набор данных с удаленными выбросами, даст нам лучшую модель аримы, подходящую для набора данных, правильно?
  2. Из-за устранения сдвига уровня и т. Д. Набор корректирующих рядов значительно смещается вниз. Не означает ли это, что если прогнозирование выполняется для скорректированных рядов, результат прогноза будет очень неточным, поскольку более свежие данные уже превышают 12, а скорректированные данные сдвигают его примерно до 7-8.
  3. Что означает предупреждение 4 и 5? Означает ли это, что он не может делать auto.arima, используя скорректированные серии?
  4. Что означает [12] в ARIMA (0,1,0) (0,0,1) [12]? Это просто моя частота / периодичность моего набора данных, который я устанавливаю ежемесячно? И означает ли это, что мой ряд данных также является сезонным?
  5. Как определить сезонность в моем наборе данных? Что касается визуализации графика временного ряда, я не вижу какой-либо очевидной тенденции, и если я использую функцию разложения, она будет предполагать, что существует сезонная тенденция? Так что я просто верю тому, что говорят мне цутеры, где есть сезонный тренд, поскольку существует МА порядка 1?
  6. Как мне продолжить делать прогнозирование с этими данными после выявления этих выбросов?
  7. Как включить эти выбросы в другие модели прогнозирования - экспоненциальное сглаживание, ARIMA, структурную модель, случайное блуждание, тета? Я уверен, что не смогу удалить выбросы, так как есть сдвиг уровня, и если я возьму только скорректированные данные серии, значения будут слишком маленькими, так что мне делать?

Нужно ли добавлять эти выбросы в качестве регрессора в auto.arima для прогнозирования? Как это работает тогда?

Ответы:


5

Эти комментарии слишком длинные ... таким образом, "ОТВЕТ"

  1. Вы ошибаетесь, он не корректирует, а затем идентифицирует ARIMA (как это делает AUTOBOX). Предположительно, он не предполагает корректировку вмешательства, а затем спешит выявить модель ARIMA, на которую потенциально может повлиять отсутствие лечения аномалий. Зачастую необходимо определить как причинно-следственные ряды, определенные пользователем, так и / или неуказанную детерминированную структуру (выбросы / сдвиги уровней, сезонные импульсы, местные временные тренды), прежде чем идентифицировать структуру ARIMA. Посмотрите на этот пример плохого дигноза, который совершает ошибку, излишне дифференцируя исходную серию, в то время как истинное / правильное состояние природы не нуждается в различении Нестационарность не обязательно подразумевает необходимость различий, но может часто предполагать де-смысл, то есть корректировку изменения уровня / среднего

  2. Правильное прогнозирование всегда делается из исходного ряда, поэтому прогноз должен быть правдоподобным с учетом истории.

  3. Я понятия не имею, так как я не активно использую эту процедуру. Я рекомендовал его вам, потому что вы просили бесплатные решения, основанные на r, а не потому, что я думал, что это хорошо или достаточно, поскольку моделирование ARIMA представляет собой итеративный (многоэтапный) процесс самопроверки.

  4. модель предполагает, что она считает, что данные имеют большую (12) сезонную составляющую, НО это может просто отражать необходимость сезонного импульса.

  5. понятие сезонного тренда в лучшем случае расплывчато.

  6. Мой ответ был бы слишком очевидным и скромным


1
очень много @ricardo
IrishStat

4

Пакет 'tsoutliers' реализует процедуру, описанную в Chen и Liu (1993) [1]. Описание пакета и процедуры также приведены в этом документе .

Вкратце, процедура состоит из двух основных этапов:

  1. Обнаружение выбросов по выбранной модели ARIMA.
  2. Выберите и / или переустановите модель ARIMA, включая выбросы, обнаруженные на предыдущем шаге, и удалите те выбросы, которые не являются значимыми в новой подгонке.

Затем ряды корректируются для обнаруженных выбросов, и этапы (1) и (2) повторяются до тех пор, пока выбросы не будут обнаружены или пока не будет достигнуто максимальное количество итераций.


Первый этап (обнаружение выбросов) также является итеративным процессом. В конце каждой итерации остатки из модели ARIMA корректируются с учетом выбросов, обнаруженных на этом этапе. Процесс повторяется до тех пор, пока не будет найдено больше выбросов или пока не будет достигнуто максимальное количество итераций (по умолчанию 4 итерации). Первые три предупреждения, которые вы получаете, относятся к этому внутреннему циклу, то есть этап завершается после четырех итераций.

Вы можете увеличить это максимальное количество итераций через аргумент maxit.iloopв функции tso. Желательно не устанавливать большое количество итераций на первом этапе и позволить процессу переходить ко второму этапу, где модель ARIMA переоборудуется или выбирается снова.


Предупреждения 4 и 5 связаны с процессом подгонки модели ARIMA и выбора модели соответственно для функций stats::arimaи forecast:auto.arima. Алгоритм, который максимизирует функцию правдоподобия, не всегда сходится к решению. Вы можете найти некоторые детали, связанные с этими вопросами, например, в этом посте и в этом посте.


[1] Чунг Чен и Лон-Му Лю (1993) «Совместная оценка параметров модели и выбросов в динамическом ряду », журнал Американской статистической ассоциации , 88 (421), стр. 284-297. DOI: 10.1080 / 01621459.1993.10594321 .


сколько времени потребуется для запуска tso ()?
Anoop Toffy

@AnoopToffy это зависит от длины данных, периодичности и т. Д. Для годовых, ежемесячных, квартальных данных, размера выборки около 120 наблюдений и динамики, которая может быть разумно зафиксирована моделью ARIMA, алгоритм будет работать максимально около 10 секунд (как правило, гораздо меньше).
Javlacalle
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.