非季節データにおける auto.arima() と ets() の比較
AICc 統計量は、同じクラス内のモデルを選択するのに役立ちます。たとえば、ETS モデルの中から選ぶ、あるいは ARIMA モデルの中から選ぶといった使い方です。ただし、ETS と ARIMA はモデルクラスが異なるため、AICc で両者を比較することはできません。
その代わりに、austa データに対して時系列クロスバリデーションを用いることで、ARIMA モデルと ETS モデルを比較できます。tsCV() は予測オブジェクトを返す関数を必要とするため、モデルを当てはめて予測を返す簡単な関数を用意します。tsCV() の引数は、時系列、予測関数、予測ホライズン h です。第2章の次のコード断片を確認してください。
e <- matrix(NA_real_, nrow = 1000, ncol = 8)
for (h in 1:8)
e[, h] <- tsCV(goog, naive, h = h)
...
さらに、R のパイプ演算子は、左側の値を右側の関数に順に引数として渡すことを思い出してください。以前の章で見たコードを基にした例を示します。
# ets() でモデル化した lynx 系列の20年予測をプロット
lynx %>% ets() %>% forecast(h = 20) %>% autoplot()
この演習では、austa に適用した2つの予測関数の MSE を比較し、最も良い予測を行う関数の予測をプロットします。今回も、austa はワークスペースに読み込まれています。
この演習はコースの一部です
Rで学ぶ予測入門
演習の手順
auto.arima()の予測を行うようにfarima()関数を完成させてください。ets()に対して同様の処理を行っているfets()の既存コードの構造に従いましょう。austaに対して、tsCV()を使って ETS モデルの一歩先予測誤差を計算し、e1に保存してください。austaに対して、tsCV()を使って ARIMA モデルの一歩先予測誤差を計算し、e2に保存してください。- それぞれのモデルクラスについて、クロスバリデーションの MSE を計算し、欠損値を除外してください。MSE の計算方法を忘れた場合は前の章を参照しましょう。
- 最良のモデルクラスを用いて、
austaの将来値を10年先まで予測し、プロットしてください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Set up forecast functions for ETS and ARIMA models
fets <- function(x, h) {
forecast(ets(x), h = h)
}
farima <- function(x, h) {
forecast(___, ___)
}
# Compute CV errors for ETS on austa as e1
e1 <- tsCV(austa, ___, ___)
# Compute CV errors for ARIMA on austa as e2
e2 <- tsCV(___, ___, ___)
# Find MSE of each model class
mean(___, ___)
mean(___, ___)
# Plot 10-year forecasts using the best model class
austa %>% ___ %>% ____