Je comprends que nous devrions utiliser ARIMA pour modéliser une série chronologique non stationnaire. De plus, tout ce que j'ai lu dit que l'ARMA ne devrait être utilisé que pour des séries chronologiques stationnaires.
Ce que j'essaie de comprendre, c'est ce qui se passe dans la pratique lors d'une mauvaise classification d'un modèle et en supposant d = 0
pour une série chronologique non stationnaire? Par exemple:
controlData <- arima.sim(list(order = c(1,1,1), ar = .5, ma = .5), n = 44)
les données de contrôle ressemblent à ceci:
[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
En supposant que je ne savais pas que les données étaient ARIMA(1,1,1)
, je pourrais y jeter un œil pacf(controlData)
.
Ensuite, j'utilise Dickey-Fuller pour voir si les données ne sont pas stationnaires:
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
Donc, je pourrais supposer que les données sont ARIMA (2,0, *) Ensuite, utiliser auto.arima(controlData)
pour essayer d'obtenir un meilleur ajustement?
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
Donc, même si les données passées et futures sont ARIMA (1,1,1), je pourrais être tenté de les classer comme ARIMA (2,0,1). tsdata(auto.arima(controlData))
semble bien aussi.
Voici ce qu'un modeleur averti trouverait:
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) Pourquoi ces critères d'information sont-ils meilleurs que le modèle sélectionné par auto.arima(controlData)
?
Maintenant, je compare graphiquement les données réelles et les 2 modèles:
plot(controlData)
lines(fitted(naiveFit), col = "red")
lines(fitted(informedFit), col = "blue")
2) En jouant l'avocat du diable, quel genre de conséquences pourrais-je payer en utilisant un ARIMA (2, 0, 1) comme modèle? Quels sont les risques de cette erreur?
3) Je suis principalement préoccupé par les implications pour les prévisions à venir sur plusieurs périodes. Je suppose qu'ils seraient moins précis? Je cherche juste une preuve.
4) Souhaitez-vous suggérer une autre méthode de sélection des modèles? Y a-t-il des problèmes avec mon raisonnement en tant que modélisateur "non informé"?
Je suis vraiment curieux de savoir quelles sont les autres conséquences de ce type de mauvaise classification. J'ai cherché des sources et je n'ai rien trouvé. Toute la littérature que j'ai pu trouver ne touche qu'à ce sujet, au lieu de simplement dire que les données doivent être stationnaires avant d'effectuer ARMA, et si elles ne sont pas stationnaires, elles doivent être différenciées d fois.
Merci!