Combinando auto.arima () e ets () do pacote de previsão


8

Eu tenho usado as funções ets () e auto.arima () do pacote de previsão para prever um grande número de séries temporais univariadas. Eu tenho usado a função a seguir para escolher entre os 2 métodos, mas queria saber se o CrossValidated tinha idéias melhores (ou menos ingênuas) para previsão automática.

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: E sobre esta função?

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
}

O "holdout" é o número de períodos que você deseja usar como um teste fora da amostra. A função calcula uma janela de ajuste e uma janela de teste com base nesse parâmetro. Em seguida, ele executa as funções auto.arima e ets na janela de ajuste e escolhe aquela com o MAE mais baixo na janela de teste. Se o holdout for igual a 0, ele testará o ajuste na amostra.

Existe uma maneira de atualizar automaticamente o modelo escolhido com o conjunto de dados completo, depois de selecionado?

Respostas:


15

As probabilidades das duas classes de modelo e, portanto, os valores da AIC, não são comparáveis ​​devido a diferentes suposições de inicialização. Portanto, sua função não é válida. Sugiro que você experimente as duas classes de modelo em sua série e veja quais oferecem as melhores previsões fora da amostra.


Editei minha pergunta para incluir uma função que escrevi para fazer isso. Minha nova função faz sentido?
Zach

Se holdout = 0, ele está usando ajuste de amostra, o que favorecerá o modelo com mais parâmetros. Mas se o holdout for> 0, faz sentido, embora você precise de uma amostra de holdout bastante grande para o método selecionar o melhor modelo de maneira confiável. Em geral, eu escolheria o modelo a ser usado com base em outras considerações, em vez de considerar apenas o desempenho da previsão fora da amostra em uma amostra resumida de uma série. Por exemplo, você pode considerar o desempenho fora da amostra em todo o conjunto de séries (em vez de uma série por vez) e selecionar a melhor classe de modelo dessa maneira.
precisa saber é o seguinte

obrigado pela sugestão, vou começar a seguir nessa direção. No caso em que meu holdout é igual a zero, e se eu introduzisse algum tipo de penalidade nos parâmetros?
Zach

1
Como continuo dizendo, use desempenho fora da amostra em um grande conjunto de séries. Você não pode comparar facilmente o desempenho dentro da amostra das duas classes de modelo.
Rob Hyndman

Ok, obrigado por todos os conselhos. Usarei o desempenho fora da amostra em todo o conjunto para escolher uma classe de modelo.
Zach
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.