Combinando auto.arima () y ets () del paquete de pronóstico

8

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?

Zach
fuente

Respuestas:

15

Las probabilidades de las dos clases de modelos, y por lo tanto los valores de AIC, no son comparables debido a los diferentes supuestos de inicialización. Entonces su función no es válida. Le sugiero que pruebe las dos clases de modelos en su serie y vea cuál ofrece los mejores pronósticos fuera de la muestra.

Rob Hyndman
fuente
Edité mi pregunta para incluir una función que escribí para hacer eso. ¿Tiene sentido mi nueva función?
Zach
Si holdout = 0, está usando un ajuste de muestra que favorecerá al modelo con más parámetros. Pero si holdout> 0, tiene sentido, aunque necesita una muestra de holdout bastante grande para que el método seleccione el mejor modelo de manera confiable. En general, elegiría el modelo a utilizar en función de otras consideraciones en lugar de considerar solo el rendimiento del pronóstico fuera de la muestra en una muestra corta de una serie. Por ejemplo, podría considerar el rendimiento fuera de la muestra en todo el conjunto de series (en lugar de una serie a la vez) y seleccionar la mejor clase de modelo de esa manera.
Rob Hyndman
gracias por la sugerencia, comenzaré a avanzar en esa dirección. En el caso en que mi reserva sea igual a cero, ¿qué pasa si introduzco algún tipo de penalización para los parámetros?
Zach
1
Como sigo diciendo, use el rendimiento fuera de la muestra en un gran conjunto de series. No puede comparar fácilmente el rendimiento en muestra de las dos clases de modelos.
Rob Hyndman el
Ok, gracias por todos los consejos. Usaré el rendimiento fuera de la muestra en todo el conjunto para elegir una clase de modelo.
Zach