笔记说明
在datacamp网站上学习“Time Series with R ”track
“ARIMA Modeling with R”课程 做的对应笔记。
学识有限,错误难免,还请不吝赐教。
学习的课程为“ARIMA Modeling with R”,主要用astsa包。
如无特殊说明,笔记中所使用数据均来自datacamp课程
ARIMA模型没比ARMA模型多多少知识点,因此本次笔记以一个真实数据练习为主,分析过程中附带一些在ARMA模型笔记中没有提到的内容。
ARIMA模型介绍
在ARMA模型的基础上加上差分就是ARIMA模型(Autoregressive Integrated Moving Average model)了,如果某时间序列的d阶差分符合ARMA(p,q),那么原时间序列符合ARIMA(p,d,q)。
真实数据练习-全球变暖
astsa包中自带的globtemp数据包含1880-2015年间每年的全球平均陆地-海洋温度偏差(与1951-1980年均值相比)
原始数据及其一阶差分情况如下:
差分后的数据消除了长期趋势,有点像平稳序列了。
通过ACF和PACF图尝试定阶:
# Plot the sample P/ACF pair of the differenced data
acf2(diff(globtemp))
对于差分后的ACF和PACF的结果,可以有以下解读:
- ACF和PACF均拖尾,可以考虑ARIMA(1,1,1)模型
- ACF在lag为2处截尾,PACF拖尾,因此可以考虑ARIMA(0,1,2)模型
- ACF拖尾,PACF在lag为3处截尾,可以考虑ARIMA(3,1,0)模型。虽然这个模型拟合的也还可以,但实际上是三个模型中表现最差的。对于数据展示出来的比较小的自相关性它用了过多的参数。为节约篇幅我们就把这个模型忽略了。
拟合第一个模型:
# Fit an ARIMA(1,1,1) model to globtemp
sarima(globtemp,1,1,1)
参数估计结果:
Estimate | SE | t.value | p.value | |
---|---|---|---|---|
ar1 | 0.3549 | 0.1314 | 2.7008 | 0.0078 |
ma1 | -0.7663 | 0.0874 | -8.7701 | 0.0000 |
constant | 0.0072 | 0.0032 | 2.2738 | 0.0246 |
sigma^2估计值为0.009885
自由度132
AIC -3.572642
BIC -4.508392
残差分析图:
拟合第二个模型:
# Fit an ARIMA(0,1,2) model to globtemp
sarima(globtemp,0,1,2)
参数估计结果:
Estimate | SE | t.value | p.value | |
---|---|---|---|---|
ma1 | -0.3984 | 0.0808 | -4.9313 | 0.0000 |
ma2 | -0.2173 | 0.0768 | -2.8303 | 0.0054 |
constant | 0.0072 | 0.0033 | 2.1463 | 0.0337 |
sigma^2估计值为0.00982
自由度132
AIC -3.579224
BIC -4.514974
残差分析图:
模型选择
两个模型的参数估计结果均有统计学意义,残差分析图也都显示模型均是合理的(reasonable)。根据AIC和BIC的结果,可能ARIMA(0,1,2)模型更好一些。
另外,forecast包的auto.arima()函数可以自动尝试不同阶数组合模型并建模,也可以帮助我们定阶。auto.arima()的相关内容见:时间序列笔记-auto.arima()自动定阶
通过模拟过拟合进行模型诊断
除了残差分析以外,还可以通过模拟过拟合(overfitting)来对建立的模型进行诊断:在建立的模型基础上添加额外的参数,看新的拟合结果。如果模型的参数估计等产生了很大的变化,则需要再考虑;如果模型结果没有发生大变动,那么可以比较肯定之前的模型是正确的。(我理解就是检查是否欠拟合吧)
我们在ARIMA(0,1,2)的基础上加一个参数,尝试ARIMA(0,1,3)模型的拟合效果:
# Fit an ARIMA(0,1,3) model to globtemp.
sarima(globtemp,0,1,3)
参数估计结果:
Estimate | SE | t.value | p.value | |
---|---|---|---|---|
ma1 | -0.3760 | 0.0929 | -4.0458 | 0.0001 |
ma2 | -0.2115 | 0.0779 | -2.7157 | 0.0075 |
ma3 | -0.0464 | 0.0865 | -0.5370 | 0.5922 |
constant | 0.0072 | 0.0032 | 2.2574 | 0.0256 |
sigma^2估计值为0.009798
自由度131
AIC -3.566741
BIC -4.481074
残差分析图:
可以看出ma1 ma2的参数估计值变化不大,新加的ma3并没有统计学意义,AIC BIC增大。标明原来的ARIMA(0,1,2)模型并没有欠拟合。
用ARIMA模型进行预测
可以用astsa包的sarima.for(data, n.ahead, p, d, q)函数进行ARIMA建模后的预测。n.ahead参数指定往后预测几个时间单位的值。函数会输出对应预测值及其标准误和图像,图像中黑色表示已有数据,红色表示预测值,还会显示预测值加减1倍标准误的预测区间和加减2倍标准误的预测区间。
# Forecast data 35 years into the future
sarima.for(globtemp,n.ahead=35,0,1,2)