Последствия моделирования нестационарного процесса с использованием ARMA?

23

Я понимаю, что мы должны использовать ARIMA для моделирования нестационарных временных рядов. Кроме того, все, что я читаю, говорит, что ARMA следует использовать только для стационарных временных рядов.

Я пытаюсь понять, что происходит на практике при неправильной классификации модели и предположении, что d = 0для временного ряда она нестационарна? Например:

controlData <- arima.sim(list(order = c(1,1,1), ar = .5, ma = .5), n = 44)

контрольные данные выглядят так:

 [1]   0.0000000   0.1240838  -1.4544087  -3.1943094  -5.6205257
 [6]  -8.5636126 -10.1573548  -9.2822666 -10.0174493 -11.0105225
[11] -11.4726127 -13.8827001 -16.6040541 -19.1966633 -22.0543414
[16] -24.8542959 -25.2883155 -23.6519271 -21.8270981 -21.4351267
[21] -22.6155812 -21.9189036 -20.2064343 -18.2516852 -15.5822178
[26] -13.2248230 -13.4220158 -13.8823855 -14.6122867 -16.4143756
[31] -16.8726071 -15.8499558 -14.0805114 -11.4016515  -9.3330560
[36]  -7.5676563  -6.3691600  -6.8471371  -7.5982880  -8.9692152
[41] -10.6733419 -11.6865440 -12.2503202 -13.5314306 -13.4654890

Предполагая, что я не знаю, данные были ARIMA(1,1,1), я мог бы взглянуть pacf(controlData).

PACF (controlData)

Затем я использую Dickey-Fuller, чтобы увидеть, являются ли данные нестационарными:

require('tseries')
adf.test(controlData)

# Augmented Dickey-Fuller Test
#
# data:  controlData
# Dickey-Fuller = -2.4133, Lag order = 3, p-value = 0.4099
# alternative hypothesis: stationary

adf.test(controlData, k = 1)

# Augmented Dickey-Fuller Test
#
#data:  controlData
# Dickey-Fuller = -3.1469, Lag order = 1, p-value = 0.1188
# alternative hypothesis: stationary

Итак, я могу предположить, что данные ARIMA (2,0, *). Затем использовать, auto.arima(controlData)чтобы попытаться получить наилучшее соответствие?

require('forecast')
naiveFit <- auto.arima(controlData)
naiveFit
# Series: controlData 
# ARIMA(2,0,1) with non-zero mean 
# 
# Coefficients:
#          ar1      ar2     ma1  intercept
#      1.4985  -0.5637  0.6427   -11.8690
# s.e.  0.1508   0.1546  0.1912     3.2647
#
# sigma^2 estimated as 0.8936:  log likelihood=-64.01
# AIC=138.02   AICc=139.56   BIC=147.05

Таким образом, хотя прошлые и будущие данные относятся к ARIMA (1,1,1), у меня может возникнуть соблазн классифицировать их как ARIMA (2,0,1). tsdata(auto.arima(controlData))тоже хорошо выглядит.

Вот что найдет проинформированный модельер:

informedFit <- arima(controlData, order = c(1,1,1))
# informedFit
# Series: controlData 
# ARIMA(1,1,1)                    
#
# Coefficients:
#          ar1     ma1
#       0.4936  0.6859
# s.e.  0.1564  0.1764
#
# sigma^2 estimated as 0.9571:  log likelihood=-62.22
# AIC=130.44   AICc=131.04   BIC=135.79

1) Почему эти информационные критерии лучше выбранной модели auto.arima(controlData)?

Теперь я просто графически сравниваю реальные данные и две модели:

plot(controlData)
lines(fitted(naiveFit), col = "red")
lines(fitted(informedFit), col = "blue")

tsPlots

2) Играя за адвоката дьявола, какие последствия я бы заплатил, используя ARIMA (2, 0, 1) в качестве модели? Каковы риски этой ошибки?

3) Меня больше всего волнуют любые последствия для многопериодных форвардных прогнозов. Я полагаю, они будут менее точными? Я просто ищу доказательства.

4) Вы бы предложили альтернативный метод выбора модели? Есть ли проблемы с моими рассуждениями как «неосведомленного» моделиста?

Мне действительно любопытно, каковы другие последствия такого рода неправильной классификации. Я искал некоторые источники и просто не мог ничего найти. Вся литература, которую я смог найти, касалась только этой темы, вместо этого просто указав, что данные должны быть стационарными перед выполнением ARMA, а если они нестационарные, то их нужно дифференцировать d раз.

Благодарность!

Кларк Генри
источник
У меня сложилось впечатление, что оно аналогично предположению об «ортогональных ошибках» в регрессии поперечного сечения (то есть оно смещает стандартные ошибки, но не коэффициенты), но мне действительно интересно услышать фактический ответ.
Shadowtalker

Ответы:

11

У меня сложилось впечатление, что на этот вопрос нет уникального, полностью общего ответа, поэтому я рассмотрю только простейший случай и немного неформально.

(1)yt=yt1+ut,t=1,...,T,y0=0
utE(ut2)=σu2

(2)yt=i=1tui

A

(3)yt=βyt1+ut,t=1,...,T,y0=0

β^β

k

(4)y^T+k=β^kyT

и его MSE будет

MSEA[y^T+k]=E(β^kyTyT+k)2

(5)=E[(β^k1)yTi=T+1T+kui]2=E[(β^k1)2yT2]+kσu2

(средний член квадрата исчезает, как и перекрестные произведения будущих ошибок).

B

(6)Δyt=γΔyt1+ut

γ^

(7)yt=yt1+γ(yt1yt2)+ut

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

y^T+1=yT+γ^(yTyT1)

что на самом деле, учитывая истинный DGP будет

(8)y^T+1=yT+γ^uT

B

y^T+k=yT+(γ^+γ^2+...+γ^k)uT

|γ^|<10

(9)y^T+k=yT+γ^γ^k+11γ^uT

и другие

(10)MSEB[y^T+k]=E[(γ^γ^k+11γ^)2uT2]+kσu2

пока повторюсь для удобства

(5)MSEA[y^T+k]=E[(β^k1)2yT2]+kσu2

Итак, чтобы дифференцированная модель работала лучше с точки зрения прогнозирования MSE, мы хотим

MSEB[y^T+k]MSEA[y^T+k]

Е[(γ^-γ^К+11-γ^)2UT2]Е[(β^К-1)2YT2]

ВAβ^

β^>1ККВA

Aβ^<1К

Е[(γ^1-γ^)2UT2]Е[YT2]знак равноTσU2??

КК

(γ^1-γ^)20В

γ^UT

Cov[(γ^1-γ^)2,UT2]+Е[(γ^1-γ^)2]σU2TσU2??

Cov[(γ^1-γ^)2,UT2](T-Е[(γ^1-γ^)2])σU2??

γ^Tγ^(0,1)

Таким образом, в целом, не обсуждая какой-либо конкретный метод оценки, я считаю, что мы смогли неофициально показать, что дифференцированная модель должна работать лучше с точки зрения прогнозирования MSE.

Алекос Пападопулос
источник
1

Это хороший вопрос.

Как я понимаю, вы только что рассмотрели pacf, но этого недостаточно. ACF и PACF необходимы для выбора лучшей модели.

С другой стороны, стационарные тесты являются слабыми и чувствительными и требуют большого количества лагов для тестирования.

Кроме того, предпочтительно, чтобы временные ряды оставались неподвижными перед применением любой модели. Грубо говоря, модели ARIMA просто рассматривают частный случай нестационарности (предпочтительно в тренде).

Что касается ваших вопросов, я не уверен насчет функции auto.arima, но уверен, что количество точек данных в вашем примере невелико. Имитация модели с использованием большого количества точек данных хорошо ответит на ваши вопросы. Кроме того, я советую вам рассмотреть ACF временных рядов, а также PACF. Что касается выбора модели, эмпирическое правило выбирает простейшую модель (обратите внимание, что самая простая модель после перевода временного ряда в стационарный).

Я отсылаю вас к этой ссылке. Эта книга не отвечает на все ваши вопросы, но дает вам некоторые подсказки.

----- дополнительный раздел ------- @nsw с учетом тенденции в ваших данных. Если вы рассматриваете стационарную модель, это приводит к прогнозированию вверх / вниз, но на самом деле модели ARMA предназначены для прогнозирования плоских данных. Я изменил ваш код, чтобы отразить эту разницу:

требуют ( «прогноз»)

требовать ( '') tseries

controlData <- arima.sim (список (order = c (1,1,1), ar = .5, ma = .5), n = 1000 )

ACF (controlData)

ts.plot (controlData)

naiveFit <- арима (controlData, order = c (2,0,1))

trueFit <- арима (controlData, order = c (1,1,1))

PrnaiveFit <-forecast.Arima (naiveFit, 10)

PrtrueFit <- прогноз. Арима (trueFit, 10)

matplot (cbind (PrnaiveFit $ среднее, PrtrueFit $ среднее), тип = 'B', Col = C ( 'красный', 'зеленый'), ylab = с ( 'предсказывают ион'), PCH = с ( 'N', 'т'))

TPArrow
источник
1
Вопрос состоит в том, почему предпочтительнее «сделать временные ряды стационарными». Это на самом деле не отвечает на этот вопрос.
теневик
@ssdecontrol Вы правы в целом. Я действительно больше обеспокоен предполагаемыми последствиями для прогноза после неправильной спецификации. Но я не хочу слишком сильно биться с Хамедом. Он все еще отвечал на мой последний вопрос о том, "это правильный выбор модели?" Но повторюсь, это меньше всего меня беспокоит.
Кларк Генри