Les modèles identifiés par auto.arima () sont-ils parcimonieux?

13

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.

  1. 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()?
  2. Y a-t-il des pièges à utiliser l'AIC (qui est ce que je pense auto.arima()utiliser) pour identifier les modèles?
  3. 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.t

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
prévisionniste
la source
Vous semblez être sur quelque chose ici car la procédure AIC pourrait mal identifier le modèle le plus simple. De plus, les critères AIC ne supposent aucune impulsion / aucun décalage de niveau / aucune impulsion saisonnière / aucune tendance temporelle locale / constance des paramètres / constance de la variance d'erreur.
IrishStat
L'AIC et le BIC sont proportionnels à la variance des erreurs d'un modèle deviné. Cette approche, d'après mon expérience, est simplement trop simple en raison de certains des problèmes que j'ai déjà soulevés et des problèmes d'invertibilité soulevés ici. Il n'y a pas de remplacement pour un système d'identification intelligent qui construit des modèles itératifs concluant quand il ne reste aucun paramètre inédit et aucune information / structure n'est évidente dans les résidus. En résumé, l'identification automatique des modèles est un processus itératif et non un processus en une seule étape, comme c'est le cas dans toutes les analyses statistiques.
IrishStat
@Irishstat quel est le signe du coefficient ma doit-il être interprété comme -0.1391 -0.5912 -0.5491?
prévisionniste
en termes de texte Pankratz .. oui! . Vous pouvez vérifier les racines du polynôme ma pour voir si elles répondent aux exigences d'invertibilité.
IrishStat
donc l'auto.arima ci-dessus n'est pas inversible, c'est-à-dire que -0.1391-0.5912-0.5491 est <1, donc le modèle est bien.
prévisionniste

Réponses:

17

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)approximationTRUE n=100n=500 approximationauto.arima()approximation = TRUEarima()

Pour votre exemple 1, nous devrions avoir

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

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.

Réintégrer Monica - G. Simpson
la source
merci pour la réponse détaillée. J'ai utilisé votre approche pour le deuxième exemple: set.seed (453) y <- arima.sim (n = 500, list (ar = 0,2, ma = 0,6), mean = 10) auto.arima (y, approximation = FAUX) et c'est ce que j'obtiens, il surpasse clairement les données - ARIMA (2,0,4) avec des coefficients moyens non nuls: ar1 ar2 ma1 ma2 ma3 ma4 intercept 0,5369 -0,9627 0,3668 0,6799 0,7065 0,1701 20,0329 se 0,0278 0,0499 0,0533 0,0630 0,0793 0,0574 0,0927 sigma ^ 2 estimé à 1,024: log vraisemblance = -716,17 AIC = 1448,33 AICc = 1448,63 BIC = 1482,05
prévisionniste
Je n'ai pas encore lu le chapitre qui a quelque chose appelé "l'invertiblité". Est-ce que l'auto.arima dans le deuxième cas viole la règle d '«invertiblité» dans le diagnostic du modèle?
prévisionniste
1
@forecaster Supposons que vous ne connaissiez pas la vérité, tout ce que vous avez est l'échantillon à portée de main. Dans ce cas, AIC etc. fait ce que vous lui demandez de faire. Comme je l'ai dit ci-dessus, la série simulée peut ne pas être celle que vous avez demandée, ou plutôt il peut ne pas être possible d'identifier avec succès la vraie série à partir du petit échantillon que vous avez prélevé. Il n'y a rien sous-entendu ici ou ailleurs dans les statistiques que vous obtiendrez le seul modèle VRAI. En tant que statisticien, si vous pensez que la série est surajustée (disons d'après des connaissances antérieures), placez une restriction sur l'ordre des termes recherchés. Ou utilisez BIC comme critère d'arrêt.
Reinstate Monica - G. Simpson
Je ne sais pas suffisamment ce qu'est l'inversibilité pour pouvoir répondre à cette question. Peut-être poser cette question comme une nouvelle question ici?
Reinstate Monica - G. Simpson
@forecaster (Raison pour laquelle je dis BIC, c'est qu'il impose une pénalité supplémentaire à la complexité. Dans ce cas, le BIC de l'ARIMA (1, 0, 1) a un BIC inférieur à celui du modèle auto.arima(), donc si ceux-ci étaient les deux seuls modèles candidats, le plus simple aurait été sélectionné ...)
Réintégrer Monica - G. Simpson
2

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.

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC IC choisit un modèle MA (2).

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24
prévisionniste
la source
1

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 entrez la description de l'image icibasé 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 entrez la description de l'image icigraphiques ACF très différents entrez la description de l'image ici.

Revenons à l'analyse: Voici le modèle qui a été identifié pour les 246 dernières valeurs entrez la description de l'image iciet ici entrez la description de l'image iciavec les statistiques suivantes entrez la description de l'image ici. Le réel / ajustement et prévision est ici entrez la description de l'image iciavec le tracé résiduel ici entrez la description de l'image ici. L'ACF des résidus suggère une suffisanceentrez la description de l'image ici. 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!

IrishStat
la source
0

 exp(UNEjeCmjen-UNEjeCje)/2

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 donnent

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0
denis
la source
1
Ceci est une réponse ou une question?
Tim
@Tim, je suis tellement hésitante parce que je ne sais pas si ces probabilités relatives sont "réelles" ou du moins courantes.
denis