在非季节性数据上比较 auto.arima() 与 ets()
AICc 统计量适用于在同一模型类别中进行选择。例如,您可以用它来选择一个 ETS 模型,或选择一个 ARIMA 模型。但是,不能用它来比较 ETS 与 ARIMA,因为它们属于不同的模型类别。
相反,您可以使用时间序列交叉验证,在 austa 数据上比较一个 ARIMA 模型与一个 ETS 模型。由于 tsCV() 需要返回预测对象的函数,您将先设置一些简单函数来拟合模型并返回预测。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 %>% ___ %>% ____