在非季節性資料上比較 auto.arima() 與 ets()
AICc 統計量適用於在「同一」模型類別中做選擇。例如,你可以用它來選擇 ETS 模型,或選擇 ARIMA 模型。不過,你不能用它來比較 ETS 與 ARIMA,因為它們屬於「不同」的模型類別。
相對地,你可以用時間序列交叉驗證來比較 austa 資料上的 ARIMA 與 ETS 模型。由於 tsCV() 需要回傳 forecast 物件的函式,你會先設定一些簡單函式來配適模型並回傳預測。tsCV() 的引數為時間序列、預測函式,以及預測視窗 h。請看第二章的這段程式碼片段:
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 的兩個預測函式之 MSE,並繪製能產生最佳預測的函式之預測結果。austa 已經載入到你的工作環境中。
本練習屬於課程
R 的時間序列預測
練習說明
- 完成
farima()函式,以auto.arima()的結果產生預測。請依照fets()的既有程式碼結構(它對ets()做了相同的事)。 - 使用
tsCV()的一步預測誤差,在austa上計算 ETS 模型的交叉驗證誤差,並將結果存為e1。 - 使用
tsCV()的一步預測誤差,在austa上計算 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 %>% ___ %>% ____