Domanda

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)

Perché i modelli ARMA che agiscono sui primi differenze dei dati di differire dai corrispondenti modelli ARIMA?

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

Lo stesso con Arima(data,c(5,1,4)) e Arima(diff(data),c(5,0,4)) nel pacchetto previsione. Posso ottenere la consistenza desiderata con

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

, ma sembra che il titolare della stima minima AIC per questi dati non sono stati presi in considerazione dall'algoritmo dietro auto.arima; da qui la scelta ottimale di ARMA (3,0) al posto di ARMA (5,4) agendo sulle prime differenze. Una questione collegata è quanto le due stime AIC devono differire prima si considera un modello migliore rispetto agli altri ha poco a che fare programmazione wuth - la più piccola titolare AIC dovrebbe almeno essere considerata / riferito, anche se 9 coefficienti possono essere un po 'troppo per una previsione di 100 osservazioni.

Le mie domande sono R:

1) la versione Vectorised del doppio loop in modo che è più veloce?

2) Perché il arima(5,1,4) agendo sui dati differiscono da arma(5,4) agendo sulle prime differenze dei dati? Quale è da segnalare?

3) Come faccio a ordinare l'output AIC in modo che il piccolo venuto prima?

Grazie.

È stato utile?

Soluzione

Ci sono un sacco di domande e questioni sollevate qui. Cercherò di rispondere a ciascuno di essi.

Arima() è solo un wrapper per arima(), ti darà lo stesso modello.

Arima () gestisce un modello con differencing utilizzando una diffusa precedente. Che non è la stessa come solo differenziazione dei dati prima di montare il modello. Di conseguenza, si ottengono risultati leggermente diversi da arima(x,order=c(p,1,q)) e arima(diff(x),order=c(p,0,q)).

auto.arima() gestisce direttamente differenziazione e non utilizzare una diffusa prima durante il montaggio. Così si ottengono gli stessi risultati da auto.arima(x,d=1,...) e auto.arima(diff(x),d=0,...)

auto.arima() ha un max.order argomento che specifica il massimo di p + q. Per impostazione predefinita, max.order=5, così il vostro arima(5,1,4) non sarebbe considerato. Aumentare max.order se si vuole considerare tali modelli di grandi dimensioni (anche se io non lo consiglio).

Non si può vettorizzare un ciclo che coinvolge l'ottimizzazione non lineare ad ogni iterazione.

Se si desidera ordinare l'output, è necessario salvarlo in un data.frame e quindi ordinare sulla relativa colonna. Il codice attualmente solo sputa fuori i risultati come va e nulla viene salvato tranne che per il modello più recente installato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top