He estado usando las funciones ets () y auto.arima () del paquete de pronóstico para pronosticar una gran cantidad de series de tiempo univariadas. He estado usando la siguiente función para elegir entre los 2 métodos, pero me preguntaba si CrossValidated tenía ideas mejores (o menos ingenuas) para el pronóstico automático.
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: ¿Qué pasa con esta función?
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
}
La "retención" es el número de períodos que desea utilizar como prueba fuera de la muestra. La función calcula una ventana de ajuste y una ventana de prueba en función de este parámetro. Luego ejecuta las funciones auto.arima y ets en la ventana de ajuste, y elige la que tenga el MAE más bajo en la ventana de prueba. Si la retención es igual a 0, prueba el ajuste en la muestra.
¿Hay alguna manera de actualizar automáticamente el modelo elegido con el conjunto de datos completo, una vez que se ha seleccionado?