Question

data <-c(88, 84, 85, 85, 84, 85, 83, 85, 88, 89, 91, 99, 104, 112, 126, 138, 146,151,   150, 148, 147, 149, 143, 132, 131, 139, 147, 150, 148, 145, 140, 134, 131, 131, 129, 126, 126, 132, 137, 140, 142, 150, 159, 167, 170, 171, 172, 172, 174, 175, 172, 172, 174, 174, 169, 165, 156, 142, 131, 121, 112, 104, 102, 99, 99, 95, 88, 84, 84, 87, 89, 88, 85, 86, 89, 91, 91, 94, 101, 110, 121, 135, 145, 149, 156, 165, 171, 175, 177, 182, 193, 204, 208, 210, 215, 222, 228, 226, 222, 220)

Pourquoi les modèles ARMA agissant sur les premières différences des données diffèrent des modèles ARIMA correspondants?

for (p in 0:5)
{
for (q in 0:5)
{
#data.arma = arima(diff(data), order = c(p, 0, q));cat("p =", p, ", q =", q, "AIC =",  data.arma$aic, "\n");
data.arma = arima(data, order = c(p, 1, q));cat("p =", p, ", q =", q, "AIC =", data.arma$aic, "\n");
}
}

Même avec Arima(data,c(5,1,4)) et Arima(diff(data),c(5,0,4)) dans le paquet de prévisions. Je peux obtenir la consistance désirée avec

auto.arima(diff(data),max.p=5,max.q=5,d=0,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);
auto.arima(data,max.p=5,max.q=5,d=1,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);

mais il semble que le titulaire de l'estimation minimum AIC pour ces données n'a pas été pris en compte par l'algorithme derrière auto.arima; d'où le choix de suboptimale ARMA (3,0) au lieu de ARMA (5,4) agissant sur les premières différences. Une question connexe est de savoir combien les deux estimations AIC devraient différer avant que l'on considère un modèle mieux que l'autre a peu à faire de la programmation wuth - le support AIC plus petit devrait au moins être considéré / signalé, même si 9 coefficients peuvent être un peu trop pour une prévision de 100 observations.

Mes questions R sont:

1) La version vectorisée de la double boucle il est donc plus rapide?

2) Pourquoi est-ce arima(5,1,4) agissant sur les données diffèrent de arma(5,4) agissant sur les premières différences des données? Lequel est à signaler?

3) Comment trier la sortie AICs de sorte que les plus petits viennent en premier?

Merci.

Était-ce utile?

La solution

Il y a beaucoup de questions et questions soulevées ici. Je vais essayer de répondre à chacun d'eux.

Arima() est juste une enveloppe pour arima(), il donnera le même modèle.

arima () gère un modèle avec différenciation en utilisant un préalable diffuse. Ce n'est pas la même chose que seulement les données avant différentiateur ajustement du modèle. Par conséquent, vous obtiendrez des résultats légèrement différents de arima(x,order=c(p,1,q)) et arima(diff(x),order=c(p,0,q)).

auto.arima() poignées différentiateur directement et ne pas utiliser une diffuse avant lors du montage. Donc, vous obtiendrez les mêmes résultats de auto.arima(x,d=1,...) et auto.arima(diff(x),d=0,...)

auto.arima() a un max.order argument qui spécifie le maximum de p + q. Par défaut, max.order=5, de sorte que votre arima(5,1,4) ne serait pas prise en considération. Augmenter max.order si vous voulez tenir compte de ces grands modèles (même si je ne le recommanderais pas).

Vous ne pouvez pas vectoriser une boucle impliquant l'optimisation non linéaire à chaque itération.

Si vous voulez trier votre sortie, vous devez enregistrer dans un data.frame puis tri sur la colonne correspondante. Le code actuellement juste recrache les résultats comme il va et rien est enregistré, sauf pour le modèle le plus récent équipé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top