¿Consecuencias de modelar un proceso no estacionario usando ARMA?

23

Entiendo que deberíamos usar ARIMA para modelar una serie de tiempo no estacionaria. Además, todo lo que leo dice que ARMA solo debe usarse para series temporales estacionarias.

Lo que estoy tratando de entender es, ¿qué sucede en la práctica cuando clasifico mal un modelo y supongo d = 0una serie temporal que no es estacionaria? Por ejemplo:

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

los datos de control se ven así:

 [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

Suponiendo que no sabía que los datos eran ARIMA(1,1,1), podría echar un vistazo pacf(controlData).

pacf (controlData)

Luego uso Dickey-Fuller para ver si los datos no son estacionarios:

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

Entonces, podría suponer que los datos son ARIMA (2,0, *) ¿Entonces usar auto.arima(controlData)para tratar de obtener el mejor ajuste?

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

Entonces, aunque los datos pasados ​​y futuros son ARIMA (1,1,1), podría estar tentado a clasificarlos como ARIMA (2,0,1). tsdata(auto.arima(controlData))se ve bien también.

Esto es lo que encontraría un modelador informado:

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) ¿Por qué estos criterios de información son mejores que el modelo seleccionado auto.arima(controlData)?

Ahora, comparo gráficamente los datos reales y los 2 modelos:

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

tsPlots

2) Jugando al abogado del diablo, ¿qué tipo de consecuencias pagaría al usar un ARIMA (2, 0, 1) como modelo? ¿Cuáles son los riesgos de este error?

3) Estoy principalmente preocupado por cualquier implicación para las predicciones de varios períodos hacia adelante. ¿Asumo que serían menos precisos? Solo estoy buscando alguna prueba.

4) ¿Sugeriría un método alternativo para la selección del modelo? ¿Hay algún problema con mi razonamiento como modelador "desinformado"?

Tengo mucha curiosidad sobre cuáles son las otras consecuencias de este tipo de clasificación errónea. He estado buscando algunas fuentes y simplemente no pude encontrar nada. Toda la literatura que pude encontrar solo toca este tema, en lugar de decir que los datos deben ser estacionarios antes de realizar ARMA, y si no son estacionarios, entonces deben diferenciarse d veces.

¡Gracias!

Clark Henry
fuente
Mi impresión es que es análogo al supuesto de "errores ortogonales" en la regresión transversal (es decir, sesga los errores estándar pero no los coeficientes), pero estoy realmente interesado en escuchar la respuesta real.
shadowtalker

Respuestas:

11

Mi impresión es que esta pregunta no tiene una respuesta única y totalmente general, por lo que solo exploraré el caso más simple y de una manera un poco informal.

(1)yt=yt-1+tut,t=1,...,T,y0 0=0 0
tutmi(tut2)=σtu2

(2)yt=yo=1ttuyo

UNA

(3)yt=βyt-1+tut,t=1,...,T,y0 0=0 0

β^β

k

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

y su MSE será

METROSmiUNA[y^T+k]=mi(β^kyT-yT+k)2

(5)=mi[(β^k-1)yT-yo=T+1T+ktuyo]2=mi[(β^k-1)2yT2]+kσtu2

(el término medio del cuadrado desaparece, así como los productos cruzados de futuros errores).

si

(6)Δyt=γΔyt-1+tut

γ^

(7)yt=yt-1+γ(yt-1-yt-2)+tut

así que pronosticando el nivel del proceso, tendremos

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

que en realidad, dado el verdadero DGP será

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

si

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

El |γ^El |<10 0

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

y entonces

(10)METROSmisi[y^T+k]=mi[(γ^-γ^k+11-γ^)2tuT2]+kσtu2

mientras repito por conveniencia

(5)METROSmiUNA[y^T+k]=mi[(β^k-1)2yT2]+kσtu2

Entonces, para que el modelo diferenciado funcione mejor en términos de predicción MSE, queremos

METROSmisi[y^T+k]METROSmiUNA[y^T+k]

mi[(γ^-γ^k+11-γ^)2tuT2]mi[(β^k-1)2yT2]

siUNAβ^

β^>1kksiUNA

UNAβ^<1k

mi[(γ^1-γ^)2tuT2]mi[yT2]=Tσtu2??

kk

(γ^1-γ^)20 0si

γ^tuT

Cov[(γ^1-γ^)2,tuT2]+mi[(γ^1-γ^)2]σtu2Tσtu2??

Cov[(γ^1-γ^)2,tuT2](T-mi[(γ^1-γ^)2])σtu2??

γ^Tγ^(0 0,1)

Así que, en general, sin discutir ningún método de estimación específico, creo que pudimos demostrar de manera informal que el modelo diferenciado debería funcionar mejor en términos de predicción MSE.

Alecos Papadopoulos
fuente
1

Esa es una buena pregunta.

Como me doy cuenta, solo has considerado pacf pero eso no es suficiente. ACF y PACF son necesarios para seleccionar el mejor modelo.

Por otro lado, las pruebas estacionarias son débiles y sensibles y necesitan una gran cantidad de retrasos para ser probadas.

Además, se prefiere hacer series temporales estacionarias antes de aplicar cualquier modelo. En términos generales, los modelos ARIMA solo consideran un caso especial de no ser estacionario (preferiblemente en tendencia).

Sobre sus preguntas, no estoy seguro acerca de la función auto.arima, pero estoy seguro de que el número de puntos de datos en su ejemplo es pequeño. Simular un modelo utilizando una gran cantidad de puntos de datos respondería bien a sus preguntas. Además, le aconsejo que considere ACF de series de tiempo, así como PACF. Acerca de la selección del modelo, la regla general es elegir el modelo más simple (tenga en cuenta que el modelo más simple después de hacer estacionarias las series de tiempo).

Os remito a esta referencia. Este libro no responde a todas sus preguntas, pero le da algunas pistas.

----- sección complementaria ------- @nsw considerando una tendencia en sus datos. Si considera un modelo estacionario, da como resultado una predicción ascendente / descendente, pero en realidad los modelos ARMA están diseñados para predecir datos planos. He cambiado su código para reflejar esta diferencia:

requerir ('pronóstico')

require ('tseries')

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

acf (controlData)

ts.plot (controlData)

naiveFit <- arima (controlData, order = c (2,0,1))

trueFit <- arima (controlData, orden = c (1,1,1))

PrnaiveFit <-forecast.Arima (naiveFit, 10)

PrtrueFit <- Forecast.Arima (trueFit, 10)

matplot (cbind (PrnaiveFit $ mean, PrtrueFit $ mean), type = 'b', col = c ('red', 'green'), ylab = c ('predict ion'), pch = c ('n', 't'))

TPArrow
fuente
1
La pregunta pregunta por qué se prefiere "hacer series temporales estacionarias". Esto realmente no responde esa pregunta.
shadowtalker
@ssdecontrol Tienes razón en general. Realmente estoy más preocupado por las consecuencias implícitas en la predicción después de una especificación errónea. Pero no quiero golpear demasiado a Hamed. Todavía respondió mi última pregunta sobre "¿es esta la forma correcta de seleccionar un modelo?" Pero solo para reiterar, eso es lo que menos me preocupa aquí.
Clark Henry