Ich habe die Funktionen ets () und auto.arima () aus dem Prognosepaket verwendet, um eine große Anzahl univariater Zeitreihen vorherzusagen . Ich habe die folgende Funktion verwendet, um zwischen den beiden Methoden zu wählen, aber ich habe mich gefragt, ob CrossValidated bessere (oder weniger naive) Ideen für die automatische Prognose hat.
auto.ts <- function(x,ic="aic") {
XP=ets(x, ic=ic)
AR=auto.arima(x, ic=ic)
if (get(ic,AR)<get(ic,XP)) {
model<-AR
}
else {
model<-XP
}
model
}
/ edit: Was ist mit dieser Funktion?
auto.ts <- function(x,ic="aic",holdout=0) {
S<-start(x)[1]+(start(x)[2]-1)/frequency(x) #Convert YM vector to decimal year
E<-end(x)[1]+(end(x)[2]-1)/frequency(x)
holdout<-holdout/frequency(x) #Convert holdout in months to decimal year
fitperiod<-window(x,S,E-holdout) #Determine fit window
if (holdout==0) {
testperiod<-fitperiod
}
else {
testperiod<-window(x,E-holdout+1/frequency(x),E) #Determine test window
}
XP=ets(fitperiod, ic=ic)
AR=auto.arima(fitperiod, ic=ic)
if (holdout==0) {
AR_acc<-accuracy(AR)
XP_acc<-accuracy(XP)
}
else {
AR_acc<-accuracy(forecast(AR,holdout*frequency(x)),testperiod)
XP_acc<-accuracy(forecast(XP,holdout*frequency(x)),testperiod)
}
if (AR_acc[3]<XP_acc[3]) { #Use MAE
model<-AR
}
else {
model<-XP
}
model
}
Das "Holdout" ist die Anzahl der Perioden, die Sie als Test außerhalb der Stichprobe verwenden möchten. Die Funktion berechnet dann basierend auf diesem Parameter ein Anpassungsfenster und ein Testfenster. Anschließend werden die Funktionen auto.arima und ets im Anpassungsfenster ausgeführt und diejenige mit der niedrigsten MAE im Testfenster ausgewählt. Wenn der Holdout gleich 0 ist, wird die Anpassung in der Stichprobe getestet.
Gibt es eine Möglichkeit, das ausgewählte Modell nach Auswahl automatisch mit dem vollständigen Datensatz zu aktualisieren?