ARMA中文全称为自回归移动平均模型,广泛用于时间时间序列分析中。本文以statsmodels 模块中自带数据集co2为例,实战研究ARMA模型。
一、探索性数据分析。
首先导入必要的package与数据集
from statsmodels.datasets import co2
data=co2.load(as_pandas=True).data
print(data)
得到的data为DataFrame 格式的格式,数据结构为2284行,1列。
对数据进行可视化,这里用pandas 的画图方法,能较好地显示横坐标,个人感觉比plt.plot()好用。
data.plot()
plt.show()
这里看到两个信息:1、数据并不是以天为单位,所以画出的图中存在间断点,2、数据本身存在周期与趋势。
解决办法是先做一个数据上采样,将数据转变为月度平均,然后做一个12阶滞后的差分,消除趋势与周期
data=data.resample('M').mean().ffill()#均值上采样,用前项填充法填充缺失值
data_diff=data.diff(12).dropna()#12阶差分,删掉缺失值
print(data_diff.head(10))
输出前10 条数据,1958年3月份-1959年2月份的12条数据由于缺失被删除了,所以差分后的数据从1959年3月份开始。
画图检验12阶差分后数据的平稳性,平不平稳不敢说,至少比原始数据要好。
data_diff.plot()
plt.show()
所以我们用更为严格的方法来说明问题,这里用单位根检验(ADF)把原始数据和差分后数据均检验了一遍。原始数据P值为0.99,大于0.05,拒绝数据平稳的假设;差分后数据通过平稳性检验。
from statsmodels.tsa.stattools import adfuller#导入tsa.stattools中的ADF
print("12阶差分数据单位根检验的P值",adfuller(data_diff)[1])