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?