予測パッケージのauto.arima()とets()を組み合わせる


8

多くの単変量時系列を予測するために、予測パッケージの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の場合、サンプル内フィットをテストします。

選択されたモデルを完全なデータセットで自動的に更新する方法はありますか?

回答:


15

2つのモデルクラスからの可能性、つまりAIC値は、初期化の仮定が異なるため、比較できません。そのため、関数は無効です。シリーズの2つのモデルクラスを試してみて、どちらがサンプル外の最良の予測を提供するかを確認することをお勧めします。


質問を編集して、それを行うために記述した関数を含めました。私の新しい機能は意味がありますか?
Zach

holdout = 0の場合、より多くのパラメーターを持つモデルを優先するインサンプルフィットを使用しています。しかし、holdout> 0の場合、それは理にかなっていますが、メソッドが確実に最良のモデルを選択するには、かなり大きなholdoutサンプルが必要です。一般的に、1つのシリーズの短いホールドアウトサンプルのサンプル外予測パフォーマンスだけを考慮するのではなく、他の考慮事項に基づいて使用するモデルを選択します。たとえば、シリーズのアンサンブル全体(一度に1つのシリーズではなく)でサンプル外のパフォーマンスを検討し、その方法で最適なモデルクラスを選択できます。
Rob Hyndman、2011年

提案をありがとう、私はその方向に動き始めます。ホールドアウトがゼロの場合、パラメーターに何らかのペナルティを導入するとどうなりますか?
Zach

1
私が言っているように、シリーズの大規模なセットでサンプル外のパフォーマンスを使用します。2つのモデルクラスのサンプル内のパフォーマンスを簡単に比較することはできません。
Rob Hyndman、2011年

わかりました、すべてのアドバイスをありがとう。アンサンブル全体でサンプル外のパフォーマンスを使用して、モデルクラスを選択します。
Zach
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.