J'ai essayé d'apprendre et d'appliquer des modèles ARIMA. J'ai lu un excellent texte sur ARIMA de Pankratz - Prévision avec boîte univariée - Modèles Jenkins: concepts et cas . Dans le texte, l'auteur insiste particulièrement sur le principe de parcimonie dans le choix des modèles ARIMA.
J'ai commencé à jouer avec auto.arima()
fonction R package prévisions . Voici ce que j'ai fait, j'ai simulé ARIMA puis appliqué auto.arima()
. Voici 2 exemples. Comme vous pouvez le voir dans les deux exemples, auto.arima()
nous avons clairement identifié un modèle que beaucoup considéreraient comme non parcimonieux. Surtout dans l'exemple 2, où auto.arima()
ARIMA identifié (3,0,3) alors qu'en réalité ARIMA (1,0,1) serait suffisant et parcimonieux.
Voici mes questions. J'apprécierais toutes suggestions et recommandations.
- Existe-t-il des indications sur le moment d'utiliser / modifier les modèles identifiés à l'aide d'algorithmes automatiques tels que
auto.arima()
? - Y a-t-il des pièges à utiliser l'AIC (qui est ce que je pense
auto.arima()
utiliser) pour identifier les modèles? - Un algorithme automatique construit est-il parcimonieux?
Au fait, je l'ai utilisé auto.arima()
à titre d'exemple. Cela s'appliquerait à tout algorithme automatique.
Voici l'exemple # 1:
set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Voici les résultats de auto.arima()
. Veuillez noter que tous les coefficients sont insignifiants. c'est-à-dire que la valeur <2.
ARIMA(1,0,2) with non-zero mean
Coefficients:
ar1 ma1 ma2 intercept
0.5395 0.2109 -0.3385 19.9850
s.e. 0.4062 0.4160 0.3049 0.0878
sigma^2 estimated as 1.076: log likelihood=-728.14
AIC=1466.28 AICc=1466.41 BIC=1487.36
Voici les résultats de l'exécution régulière arima()
avec la commande ARIMA (1,0,1)
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
Exemple 2:
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Voici les résultats de auto.arima()
:
ARIMA(3,0,3) with non-zero mean
Coefficients:
ar1 ar2 ar3 ma1 ma2 ma3 intercept
0.7541 -1.0606 0.2072 0.1391 0.5912 0.5491 20.0326
s.e. 0.0811 0.0666 0.0647 0.0725 0.0598 0.0636 0.0939
sigma^2 estimated as 1.027: log likelihood=-716.84
AIC=1449.67 AICc=1449.97 BIC=1483.39
Voici les résultats réguliers arima()
avec la commande ARIMA (1,0,1)
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
la source
Réponses:
Il y a quelques problèmes ici. Tout d'abord, ne présumez pas que l'ARIMA simulé est vraiment de l'ordre que vous spécifiez; vous prenez un échantillon du modèle spécifié et en raison du caractère aléatoire, le meilleur modèle d'ajustement pour l'échantillon particulier tiré peut ne pas être celui à partir duquel les simulations ont été tirées.
Je le mentionne en raison du deuxième problème, plus important: la
auto.arima()
fonction peut estimer les modèles via un algorithme d'ajustement plus efficace, en utilisant des sommes conditionnelles de carrés, pour éviter un temps de calcul excessif pour les longues séries ou pour les modèles saisonniers complexes. Lorsque ce processus d'estimation est utilisé,auto.arima()
rapproche les critères d'information d'un modèle (car la probabilité logarithmique du modèle n'a pas été calculée). Une heuristique simple est utilisée pour déterminer si l'estimation des sommes conditionnelles des carrés est active, si l'utilisateur n'indique pas quelle approche doit être utilisée .approximation
(length(x)>100 | frequency(x)>12)
approximation
TRUE
approximation
auto.arima()
approximation = TRUE
arima()
Pour votre exemple 1, nous devrions avoir
A donc
auto.arima()
choisi un modèle plus parcimonieux que le vrai modèle; un ARIMA (0, 0, 1) est choisi. Mais cela est basé sur les critères d'information et maintenant ils sont conformes; le modèle sélectionné a des AIC, AICc et BIC inférieurs, bien que les différences pour AIC et AICc soient faibles. Au moins maintenant, la sélection est conforme aux normes de choix des modèles en fonction de critères d'information.La raison pour laquelle le MA (1) a été choisi, je crois, se rapporte au premier problème que j'ai mentionné; à savoir que le modèle le mieux adapté à un échantillon tiré d'un ARIMA déclaré (p, d, q) peut ne pas être du même ordre que le vrai modèle. Cela est dû à un échantillonnage aléatoire. Prendre une série plus longue ou une période de rodage plus longue peut aider à augmenter les chances que le vrai modèle soit sélectionné, mais ne comptez pas dessus.
Quoi qu'il en soit, la morale ici est que lorsque quelque chose semble manifestement incorrect, comme dans votre question, lisez la page de manuel ou la documentation associée pour vous assurer que vous comprenez comment fonctionne le logiciel.
la source
auto.arima()
, donc si ceux-ci étaient les deux seuls modèles candidats, le plus simple aurait été sélectionné ...)Merci beaucoup @ Gavin, @Irishstat et @Rob d'avoir répondu à ma question. Il est clair que si j'ai besoin d'un modèle parcimonieux à partir d'algorithmes automatiques comme auto.arima, le critère d'information BIC doit être utilisé par opposition à AIC, surtout après avoir consulté ce post et le post de @ Gavin ci-dessus.
Je suis également tout à fait d'accord avec @Irishstat que le choix d'un modèle basé sur le critère IC a des limites en ce qu'il ne choisit pas un meilleur modèle pour adapter les données aux valeurs aberrantes et aux changements de niveau. À mon avis, les valeurs aberrantes + les changements de niveau + les données en désordre = les données commerciales réelles , tout le reste sont des ensembles de données de manuels. Tout modèle automatique qui ne prend pas en compte les valeurs aberrantes + les changements de niveau, encore une fois à mon avis, doit être utilisé avec prudence.
Venir au code - auto.arima a une option pour choisir entre l'AIC ou le BIC. Voir ci-dessous le code a été modifié à partir des questions ci-dessus.
Merci beaucoup Communauté validée de façon croisée. J'apprends des choses nouvelles et intéressantes chaque jour.
BIC IC choisit un modèle MA (2).
la source
J'ai pris les 500 valeurs dans AUTOBOX (un logiciel commercial que j'ai aidé à développer) et j'ai reçu l'avis suivant basé sur le test de Chow pour la constance des paramètres. Une erreur très fondamentale qui est commise dans l'étude d'une série chronologique est de supposer que les données sont pilotées par un modèle particulier avec des paramètres constants. AUTOBOX a détecté un point de rupture à la période 246 qui pourrait refléter une simulation qui n'avait pas été "réchauffée". Lors de la simulation de données, la bonne pratique consiste à supprimer les premières valeurs "n" puis à étudier les autres. J'ai pris les données et les ai segmentées en deux sections; les 245 premiers et les 255 restants. Voici les deux graphiques ACF très différents .
Revenons à l'analyse: Voici le modèle qui a été identifié pour les 246 dernières valeurs et ici avec les statistiques suivantes . Le réel / ajustement et prévision est ici avec le tracé résiduel ici . L'ACF des résidus suggère une suffisance. Notez que les 5 impulsions qui ont été identifiées ont eu un très petit effet et pourraient facilement être ignorées (dans ce cas!). En résumé, la leçon apprise ici est que parfois nous avons trop de données et nous devons considérer les coefficients de changement de temps. Dans ce cas, nous identifions un changement de paramètres qui (apparemment) n'a pas d'impact majeur sur le modèle / les paramètres résultants mais il souligne une amélioration de processus généralement nécessaire dans l'analyse des séries chronologiques. Mon expérience avec auto.arima suggère que, comme il ne traite pas / ne corrige pas explicitement les violations gaussiennes, il a tendance à sur-modéliser en s'appuyant trop sur les valeurs historiques plutôt qu'en extrayant la structure des données. Dans ce cas, car il s'agissait d'une simulation étroitement contrôlée sans violations gaussiennes, cela a fonctionné, mais je serais généralement suspect d'une telle approche à bande passante limitée et en une seule étape pour l'identification du modèle ARIMA. Faites confiance mais vérifiez!
la source
Si tel est le cas, cela aiderait les utilisateurs à voir ces probabilités relatives, ainsi que les AIC (?) De
auto.arima( ... trace=TRUE )
. Par exemple, les données d'oeufs exécutées comme dans cette question donnentla source