每周数据的预测
对于每周数据,用 ETS 或 ARIMA 模型处理季节性往往很困难,因为季节长度太大(约为 52)。可以改用谐波回归,它通过正弦和余弦函数来刻画季节性。
fourier() 函数可以方便地生成所需的谐波项。阶数($K$)越高,允许的季节形状就越"起伏"。当 \(K=1\) 时,就是一条简单的正弦曲线。您可以通过最小化 AICc 值来选择 $K$。正如视频中所示,fourier() 需要传入一个时间序列、要生成的傅里叶项个数,以及可选的需要预测的行数:
> # fourier(x, K, h = NULL)
> fit <- auto.arima(cafe, xreg = fourier(cafe, K = 6),
seasonal = FALSE, lambda = 0)
> fit %>%
forecast(xreg = fourier(cafe, K = 6, h = 24)) %>%
autoplot() + ylim(1.6, 5.1)
预加载的 gasoline 数据包含美国成品车用汽油(motor gasoline)周度数据。本练习中,您将对该数据集拟合谐波回归,并预测未来 3 年。
本练习是课程的一部分
R 中的预测
练习说明
- 使用
fourier()在gasoline上生成xreg矩阵,命名为harmonics,阶数设为 $K=13$(该值是通过最小化 AICc 选出的)。 - 拟合一个动态回归模型保存到
fit。将xreg设为harmonics,并将seasonal设为FALSE,因为季节性由回归项处理。 - 用相同方式建立新的
xreg矩阵newharmonics,然后计算未来 3 年的预测并保存为fc。 - 最后,绘制预测结果
fc。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Set up harmonic regressors of order 13
harmonics <- fourier(___, K = ___)
# Fit regression model with ARIMA errors
fit <- auto.arima(___, xreg = ___, seasonal = ___)
# Forecasts next 3 years
newharmonics <- fourier(___, K = ___, h = ___)
fc <- forecast(___, xreg = ___)
# Plot forecasts fc
___