时间序列笔记-ARIMA模型

笔记说明

在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的结果,可以有以下解读:

  1. ACF和PACF均拖尾,可以考虑ARIMA(1,1,1)模型
  2. ACF在lag为2处截尾,PACF拖尾,因此可以考虑ARIMA(0,1,2)模型
  3. 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)

推荐阅读更多精彩内容