python arima平稳性检验 arima模型平稳性_拟合


消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。
本文建立ARIMA(1,1,0)模型,预测河南省社会消费品5年的零售总额,预测出2019~2023年河南省社会消费品零售总额预测值分别为21166.3、21517.8、21734.4、21867.7、21949.8亿元。

1、平稳性检验

绘制河南省社会消费品零售总额与年度关系的时序图。从图中可以看出,社会消费品零售总额随时间的变化逐年增加。


python arima平稳性检验 arima模型平稳性_差分_02

图1 原始序列的时序图


python arima平稳性检验 arima模型平稳性_拟合_03

图2 原始序列的自相关图

做出了原始序列的自相关图,并作出两条辅助的虚线,由图像可以明显看出,系数长期大于零,序列间的相关性很强。


python arima平稳性检验 arima模型平稳性_时序图_04


接下来做单位根检验,我们得到的p值大于0.05,这我们可以说序列是不显著的,由此判断该序列为非平稳的。

2、差分运算

第一步要对最初的序列进行一阶差分后,可得到所要研究的最初序列是不平稳。


python arima平稳性检验 arima模型平稳性_时序图_05

图3 原始序列一阶差分图

对最初序列进行一阶差分后,发现最初序列表现为不平稳的,接下来,接着对于最初的序列做二阶差分。


python arima平稳性检验 arima模型平稳性_时序图_06

图4 原始序列二阶差分图

二阶差分之后序列的时序图在均值附近比较平稳的波动我们可以判断为其序列为平稳序列,那么我们可以接着作平稳性检验。


python arima平稳性检验 arima模型平稳性_差分_07

图5 二阶差分之后序列的自相关图

做出直观的图像如上所示,我们另外做两条虚线的辅助线,通过对比,我们看到,二阶差分之后序列的自相关图有短期相关性。


python arima平稳性检验 arima模型平稳性_时序图_08


二阶差分后,我们再次做单位根检验以验证模型是否平稳,二阶差分后序列的单位根检验的结果如上所示,我们看到,此时p值是小于0.05的,我们得出该模型显著,二阶差分后的序列是平稳序列。
二阶差分后继续做白噪声的检验,检验的数据结果如下。


python arima平稳性检验 arima模型平稳性_时序图_09


我们得出,此时的p值为0.004043,显然,该结果小于显著性水平,因此由上面的数据结果,我们可以得出一阶差分之后的序列是平稳非白噪声序列,所以,我们可以作接下来的检验。

3、模型定阶

那么接下来开始对于ARMA模型进行拟合,那么拟合的方式是通过构造平稳白噪声序列进行趋势拟合,这样我们可以得到p和q的数值,确定了模型的拟合数值,最后的话进行模型定阶。
第一步开始做出模型的偏自相关图。


python arima平稳性检验 arima模型平稳性_时序图_10

图6 二阶差分后序列的偏自相关图

做出二阶差分后序列的偏自相关图如上所示,首先,做出一条虚的辅助线,可以明显的看出,该序列具有一阶截尾和偏自相关图拖尾性,构建ARIMA(0,1,1)模型进行模型分析以及研究。
并计算BIC信息量的值,用BIC值最小的数,进行模型定阶。BIC图如下。


python arima平稳性检验 arima模型平稳性_python arima平稳性检验_11

图7 BIC图

通过BIC最小原则,对原始序列建立ARIMA(1,1,0)模型。

4、ARIMA模型预测

应用ARIMA(1,1,0)的时间序列模型预测河南省社会消费品未来5年的零售总额,得出2019~2023年河南省社会消费品的零售总额分别为21166.3、21517.8、21734.4、21867.7、21949.8亿元,并且,从预测图像上可以看出,河南省社会消费品的零售总额的数值随时间的增加逐年增加。


python arima平稳性检验 arima模型平稳性_拟合_12


python arima平稳性检验 arima模型平稳性_python arima平稳性检验_13

图8 社会消费品零售总额预测图

#ARIMA模型R程序 
library(forecast) 
library(fUnitRoots) 
Data <- read.csv("C:Users27342Desktop河南省社会消费品零售总额数据.csv", header = TRUE)[, 2]
sales <- ts(Data) 
plot.ts(sales, xlab = "年份", ylab = "社会消费品零售总额/亿元")  

# 单位根检验 
unitrootTest(sales)  

# 自相关图 
acf(sales)  

# 一阶差分 
difsales <- diff(sales) 
plot.ts(difsales, xlab = "年份", ylab = "社会消费品零售总额/亿元")  

# 二阶差分 
difsales <- diff(difsales) 
plot.ts(difsales, xlab = "年份", ylab = "社会消费品零售总额/亿元")  

# 自相关图 
acf(difsales)  

# 单位根检验 
unitrootTest(difsales)   

# 白噪声检验 
Box.test(difsales,type="Ljung-Box")  

# 偏自相关图 
pacf(difsales)  

# ARIMA(1,1,0)模型 
arima <- arima(sales, order = c(1, 1,0)) 
arima   

#河南省社会消费品零售总额预测 
forecast <- forecast(arima, h = 5, level= c(99.5)) 
forecast