当前位置:文档之家› R 语言环境下用ARIMA模型做时间序列预测

R 语言环境下用ARIMA模型做时间序列预测

R 语言环境下使用ARIMA模型做时间序列预测
1.序列平稳性检验
通过趋势线、自相关(ACF)与偏自相关(PACF)图、假设检验和因素分解等方法确定序列平稳性,识别周期性,从而为选择适当的模型提供依据。

1.1绘制趋势线
图1 序列趋势线图
从图1很难判断出序列的平稳性。

1.2绘制自相关和偏自相关图
图2 序列的自相关和偏自相关图
从图2可以看出,ACF拖尾,PACF1步截尾(p=1),说明该现金流时间序列可能是平稳性时间序列。

1.3 ADF、PP和KPSS 检验平稳性
图3 ADF、PP和KPSS检验结果
通过ADF检验,说明该现金流时间序列是平稳性时间序列(p-value for ADF test <0.02,拒绝零假设).pp test和kpss test 结果中的警告信息说明这两种检验在这里不可用。

但是这些检验没有充分考虑趋势、周期和季节性等因素。

下面对该序列进行趋势、季节性和不确定性因素分解来进一步确认序列的平稳性。

1.4 趋势、季节性和不确定性因素分解
R 提供了两种方法来分解时间序列中的趋势、季节性和不确定性因素。

第一种是使用简单的对称过滤法,把相应时期内经趋势调整后的观察值进行平均,通过decompose()函数实现,如图4。

第二种方法更为精确,它通过平滑增大规模后的观察值来寻找趋势、季节和不确定因素,利用stl()函数实现。

如图5。

图4 decompose()函数分解法
图5 stl()函数分解法
两种方法得到的结果非常相似。

从上图可以看出,该现金流时间序列没有很明显的长期趋势。

但是有明显的季节性或周期性趋势,经分解后的不确定因素明显减少。

综上平稳性分析检验,我们选用包含季节性因素的S-ARIMA模型来预测现金流时间序列。

2.S-ARIMA模型
2.1 建立SARIMA模型
在R 软件包中包含auto.arima()、expand.grid() 等函数,针对p,d,q 众多的可能取值,可以通过expand.grid()建立所有的可能参数组合,用for()条件函数代入相应的arima()模型,把结果储存在BIC当中。

其中,BIC根据AIC
是拟合原序列的最佳模型。

指标来计算。

结果显示,SARIMA(0,1,1)(1,1,0)
12
拟合结果如下图6所示:
图6 SARIMA(0,1,1)(1,1,0)12模型拟合结果
结果表明,ma 和sar 的系数为负数并且影响非常显著。

2.2 模型有效性检验
R 提供了tsdiag()函数来检验模型的有效性。

检验结果如下图7:
图7 tsdiag()函数检验结果
图中第二行的ACF 检验说明残差没有明显的自相关性。

第三行的Ljung-Box 测试显示所有的P-value>0.1,说明残差为白噪声。

模型合格。

3.预测未来现金流
模通过以上模型的建立与检验,我们建立了SARIMA(0,1,1)(1,1,0)
12
型来预测未来现金流。

预测结果如图8所示:
图8 模型对未来若干年现金流的预测结果
下面进行预测值与真实值的对比,如图9所示:
图9 预测值与真实值对比图(图中,蓝色代表预测值;红色代表真实值)
从图9可以看出,模型对六个月内的预测值相对准确,但是从2009年4月份开始,预测值与真实值之间出现明显偏差,说明该模型适合短期内预测。

而从长期来看,由于影响现金流的不确定性因素增加,模型的预测能力下降。

相关主题