2016-06-23 2 views
2

Ich habe den folgenden Code, der das Modell mit dem niedrigsten AIC gibt, aber ich möchte alle Modelle mit ihren AIC in auf- oder absteigender Reihenfolge die eingebaute in Sortierfunktion in R ohneSortierung ARIMA AIC in R

sp <- rnorm(100) ## just some toy data to make code work! 
spfinal.aic <- Inf 
spfinal.order <- c(0,0,0) 
for (p in 1:4) for (d in 0:1) for (q in 1:4) { 
    spcurrent.aic <- AIC(arima(sp, order=c(p, d, q))) 
    if (spcurrent.aic < spfinal.aic) { 
    spfinal.aic <- spcurrent.aic 
    spfinal.order <- c(p, d, q) 
    spfinal.arima <- arima(sp, order=spfinal.order) 
    } 
} 

ich mag spfinal.order<-c(p,d,p) eine Liste aller Modelle in auf- oder absteigender Reihenfolge der AIC sein. Wie kann ich das machen?

+0

Können Sie erklären, warum Sie 'sort' vermeiden möchten? –

+0

Funktionen wie 'order()' oder 'sort()' führen zu überflüssigen Berechnungen. – Waqas

+0

habe ich, aber jetzt habe ich es wieder gelöscht. Ich dachte, das wäre keine gute Frage. – Waqas

Antwort

2

Der folgende Code tut, was Sie wollen. Da eine Aufzeichnung aller Modelle versucht werden soll, wird kein Vergleich innerhalb der Schleife durchgeführt. Ein Vektor aic.vec wird AIC-Werte aller Modelle halten, während eine Matrix order.matrix wird Spalte-für-Spalte die ARIMA-Spezifikation halten. Am Ende sortieren wir beide nach aufsteigenden AIC-Werten, so dass Sie wissen, dass das beste Modell das erste ist.

Ich habe keine Liste verwendet, um die ARIMA-Spezifikation zu speichern, weil ich denke, dass eine Matrix besser ist. Im Moment ist die Matrix in einem breiten Format, d. H. Mit 3 Zeilen, während viele Spalten. Sie können es für eine bessere Druck transponieren:

order.matrix <- t(order.matrix) 

Vielleicht möchten Sie auch order.matrix und aic.vec zusammen für eine bessere Präsentation binden? Tun Sie dies:

result <- cbind(order.matrix, aic.vec) 
colnames(result) <- c("p", "d", "q", "AIC") 

Ich denke, das macht es einfacher für Sie zu inspizieren. Beispielausgabe (erste 5 Zeilen):

> result 
     p d q  AIC 
[1,] 2 0 2 305.5698 
[2,] 3 0 3 305.8882 
[3,] 1 0 3 307.8365 
[4,] 2 1 3 307.9137 
[5,] 1 1 2 307.9952