Frage

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)

Warum die ARMA-Modelle machen auf den ersten Differenzen der Daten handeln unterscheiden sich von den entsprechenden ARIMA-Modelle?

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");
}
}

Samt mit Arima(data,c(5,1,4)) und Arima(diff(data),c(5,0,4)) im Prognose Paket. Ich kann mit der gewünschten Konsistenz erhalten

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);

aber es scheint, den Inhaber der Mindest AIC Schätzung für diese Daten nicht durch den Algorithmus hinter auto.arima betrachtet worden; daher auch die suboptimale Wahl von ARMA (3,0) anstelle von ARMA (5,4) auf den ersten Differenzen handeln. Eine weitere Frage ist, wie viel die beiden AIC Schätzungen abweichen sollten, bevor man ein Modell besser hält als die andere hat wenig wuth Programmierung zu tun - der kleinste AIC Halter zumindest in Betracht gezogen werden sollte / berichtet, obwohl neun Koeffizienten zu etwas sein kann, viel für eine Prognose von 100 Beobachtungen.

Meine R Fragen sind:

1) Vectorised Version des Doppel-Loop, so dass es schneller ist?

2) Warum arima(5,1,4) auf den Daten unterscheiden sich von arma(5,4), die auf die ersten Differenzen der Daten handeln? Welches ist berichtet werden?

3) Wie sortiere ich die AICs ausgegeben, so dass die kleineren zuerst kommt?

Danke.

War es hilfreich?

Lösung

Es gibt eine Menge von Fragen und hier aufgeworfenen Fragen. Ich werde versuchen, zu jedem von ihnen zu reagieren.

Arima() ist nur ein Wrapper für arima(), so wird es das gleiche Modell geben.

arima (verwaltet) ein Modell mit differenzier durch eine diffuse vor Verwendung. Das ist nicht das gleiche wie nur die Daten differenzier bevor das Modell passt. Folglich werden Sie leicht unterschiedliche Ergebnisse aus arima(x,order=c(p,1,q)) und arima(diff(x),order=c(p,0,q)) erhalten.

auto.arima() Griffe differenzier direkt und verwendet keine diffuse vor bei der Montage. So erhalten Sie die gleichen Ergebnisse aus auto.arima(x,d=1,...) und auto.arima(diff(x),d=0,...) bekommen

auto.arima() hat ein Argument max.order die die maximal p + q angibt. Standardmäßig max.order=5, so würde Ihre arima(5,1,4) nicht berücksichtigt werden. Erhöhen Sie max.order, wenn Sie solche große Modelle berücksichtigen wollen (obwohl ich würde es nicht empfehlen).

Sie können nicht eine Schleife beteiligt nichtlineare Optimierung bei jeder Iteration vektorisiert.

Wenn Sie Ihre Ausgabe sortieren möchten, müssen Sie es auf eine data.frame speichern und dann sortieren sich auf der entsprechenden Spalte. Der Code zur Zeit spuckt nur die Ergebnisse, wie es geht und nichts ist außer für das letzte Modell eingebaut gespeichert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top