7.8 练习
考虑
pigs
序列 — 维多利亚州每月屠宰的猪的数量。- 使用R中的
ses()
函数找到 \(\alpha\) 和 \(\ell_0\)的最优值,并生成未来四个月的预测。 - 使用 \(\hat{y} \pm 1.96s\) 计算第一个预测的95%的预测区间,其中 \(s\) 是残差的标准差。将你的区间与R产生的区间进行比较。
- 使用R中的
编写自己的函数来实现简单的指数平滑。该函数应该使用参数
y
(时间序列),alpha
(平滑参数 \(\alpha\))和level
(初始水平 \(\ell_0\))。它应该返回时间系列中下一个观测值的预测值。它是否给出与ses()
相同的预测值?修改上一题你编写的函数,使得返回值变成误差平方和,而不是下一个观测值的预测值。然后使用
optim
函数找到 \(\alpha\) 和 \(\ell_0\) 的最优值。你是否得到了与ses()
函数相同的值?结合前面的两个函数来得到一个函数,使得它可以找到 \(\alpha\) 和 \(\ell_0\) 的最优值,并对时间序列中的下一个观测值进行预测。
books
数据集包含了同一家商店的平装书和精装书的每日销量 。任务是预测未来四天 平装书和精装书的销量。- 绘制时序图并讨论数据的主要特征。
- 使用
ses()
函数预测每个时间序列,并绘制预测图。 - 计算每种情况下训练数据的RMSE值。
- 现在,将Holt线性方法应用于
paperback
和hardback
序列,并计算每种情况下的之后四天预测值。 - 对于上一个问题中的两个时间序列,比较使用Holt方法时与简单指数平滑方法时的RMSE值。(请记住,Holt的方法比SES方法多用一个参数。)讨论在这些数据集上使用这两种预测方法的优点。
- 使用这两种方法比较两个时间序列的预测值。你认为哪个最好?
- 使用RMSE值并假设误差是正态的,为每个时间序列的第一个预测值计算95%的预测区间。比较你的区间与使用
ses
和holt
生成的预测区间。
- 现在,将Holt线性方法应用于
本题中,使用数据集
eggs
,它包含1900–1993年间美国一打鸡蛋的价格。尝试使用holt()
函数中的各种选项来查看预测值随衰减趋势或Box-Cox变换而变化的情况。尝试直观地观察每个参数对预测有什么影响。[提示:在调用
holt()
时使用h=100
,以便在绘制预测图时可以清楚地看到各种选项之间的差异。]哪个模型有最好的RMSE?
回顾零售时间序列数据(来自 2.10 节的练习3)。
- 为什么乘性季节性对这个时间序列很必要?
- 将Holt-Winters的乘性方法应用于这个数据。尝试使用衰减趋势。
- 比较两种方法的一步预测的RMSE。你倾向于哪种方法?
- 检查最佳方法得到的残差是否看起来像是白噪声。
- 现在找到测试集的RMSE,同时将模型训练到2010年底。你可以做得比 3.7 节中练习7的朴素季节性方法更好吗?
对于同样的零售数据,请尝试对Box-Cox转换后的时间序列进行STL分解,然后在季节性调整后的数据上使用ETS。这与你之前对测试集的最佳预测相比效果如何?
本题使用数据集
ukcars
,这是从1977年第一季度到2005年第一季度的英国乘用车生产季度数据。- 绘制数据并描述该序列的主要特征。
- 使用STL分解该序列并获得季节性调整数据。
- 使用适用于季节性调整数据的加性衰减趋势方法来对该序列未来两年进行预测。(这可以通过使用
stlf()
函数并设置参数etsmodel=“AAN”, damped=TRUE
来一步完成。) - 使用应用于季节性调整数据的加性趋势方法(如前,但
damped=FALSE
)来对该序列的未来两年进行预测。 - 现在使用
ets()
为数据选择一个季节性模型。 - 将ETS模型的RMSE与使用STL分解获得的模型的RMSE进行比较。哪种方法的样本内拟合效果更好?
- 比较三种方法的预测结果?哪种方法最合理?
- 检查你的首选模型的残差。
本题使用的数据集
visitors
,即1985年5月至2005年4月澳大利亚短期海外游客月度数据。- 绘制该数据的时序图并描述该系列的主要特征。
- 将你的数据分解成一个训练集和一个包含最近两年可用数据的测试集。使用Holt-Winters乘性方法来预测测试集。
- 为什么这里有必要使用乘性季节性?
- 使用以下每种方法预测两年的测试集: i)ETS模型; ii)应用于Box-Cox变换后的序列的加性ETS模型; iii)朴素季节性方法; iv)将STL分解应用于Box-Cox转换数据,然后将ETS模型应用于季节性调整(转换)数据。
- 哪种方法可以提供最佳预测?它通过了残差测试吗?
- 使用
tsCV()
函数对时间序列进行交叉验证来比较这五种方法,而不是使用训练集和测试集。你是否得出了相同的结论?
下面的
fets()
函数返回ETS预测值。<- function(y, h) { fets forecast(ets(y), h = h) }
- 将 ’tsCV()
应用于 $h=4$ 的预测范围,将ETS和朴素季节性方法应用于
cement数据,(提示:使用新创建的
fets()和现有的
snaive()` 函数作为你的预测函数的参数。) - 计算产生的 \(4\) 步向前误差的MSE。(提示:确保删除了缺失值。)为什么会存在缺少值?讨论哪些预测更准确。这是你的预期吗?
- 将 ’tsCV()
在以下六个时间序列上比较
ets()
,snaive()
和stlf()
。对于stlf()
,你可能需要使用Box-Cox转换。使用三年的测试集来决定哪一个给出了最佳预测。ausbeer
,bricksq
,dole
,a10
,h02
,usmelec
。在以下系列中使用
ets()
:bicoal
,chicken
,dole
,usdeaths
,lynx
,ibmclose
,eggs
。它总是给出好的预测吗?
找到一个效果不佳的例子并解释原因。
证明ETS(M,A,M)模型与Holt-Winters乘性模型得到的点预测值相同。
证明ETS(A,N,N)模型的预测误差由下式得出: \[ \sigma^2\left[1+\alpha^2(h-1)\right]. \]
假设误差服从正态分布,已知 \(\ell_T\), \(\alpha\), \(h\) 和 \(\sigma\),写出ETS(A,N,N)模型的95%预测区间。