8.11 练习
图8.29分别显示了36个、360个和1000个随机数的自相关图。
- 解释这些图的区别,从自相关图来看,图中的数据都是白噪声吗?
#> Warning: Ignoring unknown parameters: ylim, main #> Ignoring unknown parameters: ylim, main #> Ignoring unknown parameters: ylim, main
图 8.29: 左侧:长度为36的白噪声序列的自相关图。中间:长度为 360 的白噪声序列的自相关图。右侧:长度为 1000 的白噪声序列的自相关图。
- 为什么这些临界值到 0 的距离不同?为什么虽然他们都来源于白噪声,但是他们的自相关系数都不同?
IBM 股票每日收盘价序列(数据集
ibmclose
)是一个经典的非平稳序列,用R画出它的时序图和自相关图以及偏自相关图。解释为什么图中可以看出序列非平稳并讨论应该如何对数据进行差分。对于下列序列,找到合适的Box-Cox变换以及差分的方法以使数据平稳。
usnetelec
usgdp
mcopper
enplanements
visitors
对
enplanements
数据进行合适的差分,并用延迟算子表示你选择的差分方法。为你的零售数据(2.10的练习3中的数据)找到合适的差分方法(必要时对数据先进行变换)使数据平稳。
使用R来模拟并画出来自于简单ARIMA模型中的一些数据。
- 通过下列R代码来从一个 AR(1) 模型中生成数据,该模型的\(\phi_{1}=0.6\),\(\sigma^2=1\)且\(y_1=0\)。
<- ts(numeric(100)) y <- rnorm(100) e for(i in 2:100) <- 0.6*y[i-1] + e[i] y[i]
- 画出序列的时序图。当 \(\phi_1\) 变化时时序图会如何变化?
- 用你自己的代码从一个 \(\theta_{1} = 0.6 , \sigma^2=1\)的 MA(1) 模型中生成数据。
- 为这些序列 画出时序图。改变 \(\theta_1\) 后时序图会如何变化?
- 从\(\phi_{1} = 0.6\),\(\theta_{1}=0.6\)且\(\sigma^2=1\)的 ARMA(1,1) 模型中生成数据。
- 从\(\phi_{1} =-0.8\),\(\phi_{2}=0.3\)且 \(\sigma^2=1\) 的 AR(2) 模型中生成数据。(请注意这些系数下将会生成非平稳序列。)
- 对后两个序列作图并进行比较。
考虑美国每年被谋杀女性数量(每十万人)(数据集
wmurders
)。- 通过用R作图和分析,确定合适的ARIMA(\(p,d,q\))模型。
- 模型中应该包含常数吗?请作出解释。
- 使用延迟算子写出模型。
- 使用 R 来拟合模型并检验残差。这个模型的表现令人满意吗?
- 预测之后的三个时间点,进行手算来确保你掌握了计算的过程。
- 对序列以及三个预测值作图并给出未来三个时间点的预测区间。
auto.arima()
函数和你选择的模型一样吗?你觉得哪一个模型更好?
考虑澳大利亚 1980 年到 2015 年的国际游客总数(百万)。(数据集
austa
)- 使用
auto.arima()
来找到一个合适的ARIMA模型。auto.arima()
选择了什么模型?残差看起来是不是白噪声?对未来十个时间点进行预测并画图。 - 画出不带漂移的 ARIMA(0,1,1) 模型并与 a 中的模型进行比较,去掉 MA 的部分并再次画图。
- 画出带漂移的 ARIMA(2,1,3) 模型,去掉常数看一看会发生什么。
- 画出带常数的 ARIMA(0,0,1) 模型,去掉MA的部分并再次画图。
- 画出不带常数的 ARIMA(0,2,1) 模型的预测值。
- 使用
对于
usgdp
序列:- 如果必要的话,对数据进行合适的Box-Cox变换。
- 通过
auto.arima()
为数据找到一个合适的ARIMA模型。 - 通过调参来尝试一些其他的可行模型。
- 选择你认为的最优模型并进行残差诊断。
- 用你拟合的模型进行预测,预测值看起来合理吗?
- 将你的结果和使用
ets()
得到的模型(不对数据进行变换)进行比较。
考虑
austourists
序列,它记录的是澳大利亚 1999 到 2010 年之间的季度国际游客总数。- 画出时序图并进行描述。
- 你可以从自相关图中得到什么信息?
- 你可以从偏自相关图中得到什么信息?
- 对季节性差分数据 \((1 - B^{4})Y_{t}\) 画图。图象符合什么模型的特征?
auto.arima()
和你选择的模型一样吗?你觉得哪个模型更优?- 用延迟算子表示模型,之后再用其他的方式来表示模型。
考虑美国 1973 年 1 月到 2013 年 6 月的每月电网发电总量(十亿千瓦时)。(数据集
usmelec
)一般每年在夏季和冬季会各出现一次高峰。- 使用序列的 12 月移动平均值来分析序列包含什么趋势。
- 数据需要进行变换吗?如果必要的话,请进行合适的变换。
- 数据是平稳的吗?如果不是的话,请对数据进行合适的差分来获得平稳数据。
- 找到一些可能在描述时间序列时有用的ARIMA模型,根据AIC值来判断最优模型。
- 估计你选择的最优模型的参数并对残差进行诊断和检验。残差看起来像白噪声吗?如果不是的话,尝试去找到一个效果更好的模型。
- 请预测未来15年的美国发电量,对比the EIA上的数据来分析预测的准确率。
- 你认为你的模型可以对未来多少年的发电量进行有效的预测?
对
mcopper
数据:- 如果必要的话,对数据进行合适的 Box-Cox 变换;
- 通过
auto.arima()
为数据找到一个合适的ARIMA模型; - 通过调参来尝试一些其他的可行模型;
- 选择你认为的最优模型并进行残差诊断;
- 用你拟合的模型进行预测,预测值看起来合理吗?
- 将你的结果和使用
ets()
得到的模型(不对数据进行变换)进行比较。
在
hsales
,auscafe
,qauselec
,qcement
,qgas
这五个季节性时间序列中任选一个。- 数据需要进行变换吗?如果需要,则对其进行合适的变换。
- 数据是平稳的吗?如果不是的话,请对数据进行合适的差分来获得平稳数据。
- 找到一些可能在描述时间序列时有用的ARIMA模型,根据AIC值来判断最优模型。
- 估计你选择的最优模型的参数并对残差进行诊断和检验,残差看起来像白噪声吗?如果不是的话,尝试去找到一个效果更好的模型。
- 用你选择的模型预测未来24个月的数据。
- 将你的预测和使用
ets()
进行的预测进行对比。
对于上一题中的序列,尝试对数据进行季节性时间序列处理(STL),并使用非季节性模型对处理后的数据进行建模。
stlf()
函数可以简化你的计算(method="arima"
)。将新模型的预测结果与上一题的模型进行对比。你觉得哪个模型更优?对于第 5 题中的零售数据:
- 找到一个合适的季节性ARIMA模型;
- 和你在前面章节的模型的预测结果进行对比;
- 从网站ABS website(Cat 8501.0,Table 11) 获最新数据,并比较你的预测值与真实值。你觉得你的各个模型的预测效果如何?
考虑数据集
sheep
,从1867年到1938年英格兰和威尔士的山羊数量。画出时序图。
假设你决定用下列模型进行拟合: \[ y_t = y_{t-1} + \phi_1(y_{t-1}-y_{t-2}) + \phi_2(y_{t-2}-y_{t-3}) + \phi_3(y_{t-3}-y_{t-4}) + \varepsilon_t, \] 这里的 \(\varepsilon_t\) 是白噪声序列,你觉得这是什么ARIMA模型(即\(p\),\(d\)和\(q\)的值是多少)?
通过检查差分数据的自相关图和偏自相关图,解释为什么模型是合适的。
序列最后的五个值如下表所示:
年份 1935 1936 1937 1938 1939 绵羊数量/百万 1648 1665 1627 1791 1797 参数估计为: \(\phi_1 = 0.42\), \(\phi_2 = -0.20\),and \(\phi_3 = -0.30\)。 在不使用
forecast
函数的情况下,自行计算之后三年(1940–1942)的预测值。使用R对模型进行拟合,并使用
forecast
进行预测。得到的预测和你之前计算的有区别吗?为什么?
数据集
bicoal
为美国 1920 年到 1968 年的 烟煤年产量。画出时序图。
用下列模型拟合数据: \[y_t = c + \phi_1 y_{t-1} + \phi_2 y_{t-2} + \phi_3 y_{t-3} + \phi_4 y_{t-4} + \varepsilon_t\] 这里的 \(y_t\) 是年份 \(t\) 的煤产量,\(\varepsilon_t\)是白噪声序列。 这是什么ARIMA模型(即\(p\),\(d\)和\(q\)的值是多少)?
使用自相关图和偏自相关图来解释为什么选择这个模型。
序列最后的五个值如下表所示:
年份 1964 1965 1966 1967 1968 煤产量/百万吨 467 512 534 552 545 The estimated parameters are \(c = 162.00\), \(\phi_1 = 0.83\), \(\phi_2 = -0.34\), \(\phi_3 = 0.55\),and \(\phi_4 = -0.38\). 在不使用
forecast
函数的情况下,自行计算之后三年(1969–1971)的预测值。使用R对模型进行拟合,并使用
forecast
进行预测。得到的预测和你之前计算的有区别吗?为什么?
在做这个练习之前,你需要安装程序包rdatamarket使用如下命令:
install.packages("rdatamarket")
- 从网站Datamarket上选择一个时间序列,使用它的URL地址并通过下列代码来导入数据。
r x <- ts(rdatamarket::dmseries("shorturl")[,1],start=??,frequency=??)
(将??
替换为合适的值) - 对数据画图,并尝试寻找合适的ARIMA模型。
- 对你的 ARIMA 模型进行残差诊断,残差是白噪声吗?
- 使用你的 ARIMA 模型对未来四年的数据进行预测。
- 尝试为数据找到一个合适的指数平滑模型。
- 对指数平滑模型进行残差诊断,残差是白噪声吗?
- 使用你的指数平滑模型对未来四年的数据进行预测。
- 你觉得哪个模型更优?
- 从网站Datamarket上选择一个时间序列,使用它的URL地址并通过下列代码来导入数据。