Saya telah menggunakan fungsi ets () dan auto.arima () dari paket perkiraan untuk memperkirakan sejumlah besar rangkaian waktu univariat. Saya telah menggunakan fungsi berikut untuk memilih antara 2 metode, tapi saya bertanya-tanya apakah CrossValidated punya ide yang lebih baik (atau kurang naif) untuk peramalan otomatis.
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: Bagaimana dengan fungsi ini?
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
}
"Ketidaksepakatan" adalah jumlah periode yang ingin Anda gunakan sebagai sampel uji. Fungsi ini kemudian menghitung jendela fit dan jendela uji berdasarkan parameter ini. Kemudian menjalankan fungsi auto.arima dan ets pada jendela pas, dan memilih yang dengan MAE terendah di jendela tes. Jika ketidaksamaan sama dengan 0, itu menguji kecocokan in-sample.
Apakah ada cara untuk memperbarui model yang dipilih secara otomatis dengan set data lengkap, setelah itu dipilih?