最近看了时间序列,本文想简单通俗的介绍一下ARIMA算法的应用,每一步的意义,用R代码实现
选择R中的时间序列数据skirts.dat。以此数据为例,举一个入门例子。
1.首先把数据导入,并设置开始时间,查看走势图
skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)
skirtsts<- ts(skirts,start = c(1866))
plot.ts(skirtsts)
![Clipboard Image.png](https://ask.hellobi.com/uploads/article/20161024/b16d562feec706b2f532a32e6845b49a.png)
从上图看出走势并不平稳,需要转化成平稳时间序列,因为从数据角度需要保证整个时间周期内变化是有规律的
2.对数据进行平稳变化,差分变化
skirtstsdiff<-diff(skirtsts,differences=1)
plot.ts(skirtstsdiff)
skirtstsdiff2<-diff(skirtsts,differences=2)
plot.ts(skirtstsdiff2)
![Clipboard Image.png](https://ask.hellobi.com/uploads/article/20161024/fbe9bc710e35e91ce4f394e666c38575.png)
差分变化可以理解成将数据走势图转化成斜率走势图,即使原图整体变化趋势都是向上,他们每个时间的变化程度(斜率)是有规律的(先多,后少,再多,再少等。
上图转化后,变化趋势稳定,第二步确定数据集可转化成平稳序列,即可进行时间序列预测。
3.进行arima方法预测,R语言中具有一个函数auto.arima,可直接进行时间序列预测
library(forecast);
skirtsarima<-auto.arima(skirtsts,trace=T)
ARIMA(2,2,2) : Inf
ARIMA(0,2,0) : 393.6216
ARIMA(1,2,0) : 391.6212
ARIMA(0,2,1) : 392.0664
ARIMA(2,2,0) : 393.9273
ARIMA(1,2,1) : 393.9276
ARIMA(2,2,1) : Inf
Best model: ARIMA(1,2,0)
Series: skirtsts
ARIMA(1,2,0)
Coefficients:
ar1
-0.2997
s.e. 0.1424
sigma^2 estimated as 397.8: log likelihood=-193.66
AIC=391.33 AICc=391.62 BIC=394.9
这个步骤选择的结果最终是以AIC为指标,AIC通俗的理解就是实际值和预测值之间的差值的一个变换,越小越好。
4. 预测后5年
skirtsarimaforecast<-forecast.Arima(skirtsarima,h=5,level=c(99.5))
skirtsarimaforecast
Point Forecast Lo 99.5 Hi 99.5
1912 534.8045 478.8188 590.7902
1913 539.8663 429.4297 650.3028
1914 544.5513 366.6838 722.4188
1915 549.3492 294.7542 803.9442
1916 554.1133 214.1185 894.1081
结果即呈现,验证方法很多。此处就不一一举例。