多くの単変量時系列を予測するために、予測パッケージのets()およびauto.arima()関数を使用しています。私は次の関数を使用して2つの方法のいずれかを選択していますが、CrossValidatedに自動予測の優れた(またはそれほど単純ではない)アイデアがあるかどうか疑問に思っていました。
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
}
/編集:この関数はどうですか?
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
}
「ホールドアウト」は、サンプル外テストとして使用する期間の数です。次に、関数はこのパラメーターに基づいてフィットウィンドウとテストウィンドウを計算します。次に、フィットウィンドウでauto.arima関数とets関数を実行し、テストウィンドウでMAEが最も低い関数を選択します。ホールドアウトが0の場合、サンプル内フィットをテストします。
選択されたモデルを完全なデータセットで自動的に更新する方法はありますか?