/ / ARIMA, ARMA und AICs? - r, Datenmodellierung, Prognose

ARIMA, ARMA und AICs? - r, Datenmodellierung, Prognose

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 unterscheiden sich die ARMA-Modelle, die auf die ersten Unterschiede der Daten wirken, von den entsprechenden ARIMA-Modellen?

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

Das gleiche mit Arima(data,c(5,1,4)) und Arima(diff(data),c(5,0,4)) im Prognosepaket. Ich kann die gewünschte Konsistenz mit bekommen

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 der Inhaber der Mindest-AIC zu seinDie Schätzung für diese Daten wurde vom Algorithmus hinter auto.arima nicht berücksichtigt. daher die suboptimale Wahl von ARMA (3,0) anstelle von ARMA (5,4), die auf die ersten Unterschiede einwirkt. Eine verwandte Frage ist, um wie viel sich die beiden AIC-Schätzungen unterscheiden sollten, bevor eines davon für ein Modell besser geeignet ist als das andere, was mit der Programmierung zu tun hat für eine Prognose aus 100 Beobachtungen.

Meine R-Fragen sind:

1) Vektorisierte Version der Doppelschleife, damit sie schneller ist?

2) Warum? arima(5,1,4) auf die Daten einwirken unterscheiden sich von arma(5,4) auf die ersten Unterschiede der Daten reagieren? Welches ist zu melden?

3) Wie sortiere ich die AIC-Ausgabe so, dass die kleineren zuerst kommen?

Vielen Dank.

Antworten:

8 für die Antwort № 1

Hier werden viele Fragen und Fragen aufgeworfen. Ich werde versuchen, auf jeden von ihnen zu antworten.

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

arima () behandelt ein Modell mit Differenzierung nachmit einem diffusen vor. Das ist nicht gleichbedeutend mit der Differenzierung der Daten, bevor das Modell angepasst wird. Folglich erhalten Sie etwas andere Ergebnisse arima(x,order=c(p,1,q)) und arima(diff(x),order=c(p,0,q)).

auto.arima() handhabt die Differenzierung direkt und verwendet beim Einbau keine diffuse Oberfläche. So erhalten Sie die gleichen Ergebnisse von auto.arima(x,d=1,...) und auto.arima(diff(x),d=0,...)

auto.arima() hat ein Argument max.order was gibt das Maximum von p + q an. Standardmäßig, max.order=5, also dein arima(5,1,4) würde nicht berücksichtigt werden. Erhöhen, ansteigen max.order Wenn Sie solche großen Modelle in Betracht ziehen möchten (obwohl ich es nicht empfehlen würde).

Sie können bei jeder Iteration keine Schleife vektorisieren, die eine nichtlineare Optimierung beinhaltet.

Wenn Sie Ihre Ausgabe sortieren möchten, müssen Sie dies tunSpeichern Sie es in einem data.frame und sortieren Sie dann die entsprechende Spalte. Der Code spuckt derzeit nur die Ergebnisse aus, und es wird nichts gespeichert außer dem neuesten angepassten Modell.