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 = 0
una 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)
.
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")
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!