导入必要包和模块

from scipy import stats
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_predict
plt.rcParams['font.sans-serif']=['simhei']#用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用于正常显示负号

1.读取数据并画图

data=pd.read_csv('数据/客运量.csv',index_col=0)
data.index = pd.Index(sm.tsa.datetools.dates_from_range('1949', '2008'))#将时间列改为专门时间格式,方便后期操作
data.plot(figsize=(12,8),marker='o',color='black',ylabel='客运量')#画图

#本文所使用的客流量时间序列数据:https://download.csdn.net/download/weixin_45590329/14143811
#时间序列折线图如下所示,显然数据有递增趋势,初步判断数据不平稳

2.平稳性检验

sm.tsa.adfuller(data,regression='c')
sm.tsa.adfuller(data,regression='nc')
sm.tsa.adfuller(data,regression='ct')

进行三种形式的ADF单位根检验,如部分结果所示,发现序列不平稳

3.对数据作一阶差分处理

diff=data.diff(1)
diff.dropna(inplace=True)
diff.plot(figsize=(12,8),marker='o',color='black')#画图

作出数据一阶差分后折线图,初步判断平稳

4.对一阶差分数据进行平稳性检验

sm.tsa.adfuller(diff,regression='c')
sm.tsa.adfuller(diff,regression='nc')
sm.tsa.adfuller(diff,regression='ct')

如图所示,说明序列平稳

5.确定ARIMA(p,d,q)阶数

fig = plt.figure(figsize=(12,8))
ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(diff.values.squeeze(), lags=12, ax=ax1)#自相关系数图1阶截尾,决定MA(1)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(diff, lags=12, ax=ax2)#偏相关系数图1阶截尾,决定AR(1)

根据自相关系数图ACF和偏自相关系数图PACF,将原始数据确定为ARIMA(1,1,1)模型

6.参数估计

model = ARIMA(data, order=(1, 1, 1)).fit()#拟合模型
model.summary()#统计信息汇总#系数检验
params=model.params#系数
tvalues=model.tvalues#系数t值
bse=model.bse#系数标准误
pvalues=model.pvalues#系数p值#绘制残差序列折线图
resid=model.resid#残差序列
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
ax = model.resid.plot(ax=ax)#计算模型拟合值
fit=model.predict(exog=data[['TLHYL']])

7.模型检验

#8.1.检验序列自相关
sm.stats.durbin_watson(model.resid.values)#DW检验:靠近2——正常;靠近0——正自相关;靠近4——负自相关#8.2.AIC和BIC准则
model.aic#模型的AIC值
model.bic#模型的BIC值#8.3.残差序列正态性检验
stats.normaltest(resid)#检验序列残差是否为正态分布
#最终检验结果显示无法拒绝原假设,说明残差序列为正态分布,模型拟合良好#8.4.绘制残差序列自相关图和偏自相关图
fig = plt.figure(figsize=(12,8))
ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=12, ax=ax1)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(resid, lags=12, ax=ax2)
#如果两图都零阶截尾,这说明模型拟合良好

8.预测

#预测至2016年的数据。由于ARIMA模型有两个参数,至少需要包含两个初始数据,因此从2006年开始预测
predict = model.predict('2006', '2016', dynamic=True)
print(predict)#画预测图及置信区间图
fig, ax = plt.subplots(figsize=(10,8))
fig = plot_predict(model, start='2002', end='2006', ax=ax)
legend = ax.legend(loc='upper left')

使用python的statsmodels模块拟合ARIMA模型相关推荐

  1. python一阶差分_介绍使用python的statsmodels模块拟合ARIMA模型

    相关免费学习推荐: 导入必要包和模块 from scipy import statsimport pandas as pdimport matplotlib.pyplot as pltimport s ...

  2. 用python的statamodels模块拟合VAR模型

    import pandas as pd import statsmodels.api as sm from statsmodels.tsa.vector_ar.var_model import VAR ...

  3. Python、MATLAB股票投资:ARIMA模型最优的选股、投资组合方案与预测

    全文链接:http://tecdat.cn/?p=31651 我们基于当前统计的股票数据为客户选择最优的选股方案和投资组合方案,以及预测股票价格未来一段时间的走向趋势以及波动程度,具有很大的实用价值. ...

  4. R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合、模型阶数(p,d,q)、设置seasonal参数指定在模型中是否包含季节信息

    R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合.模型阶数(p,d,q).设置seasonal参数指定在模型中是否包含季节信息 目录

  5. R语言拟合ARIMA模型并使用拟合模型进行预测推理、使用autoplot函数可视化ARIMA模型预测结果、可视化包含置信区间的预测结果

    R语言拟合ARIMA模型并使用拟合模型进行预测推理.使用autoplot函数可视化ARIMA模型预测结果.可视化包含置信区间的预测结果 目录

  6. R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表)

    R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表) 目录

  7. R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(包含时间点、预测值、两个置信区间)

    R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(包含时间点.预测值.两个置信区间) 目录

  8. arima模型怎么拟合_7个统计测试,用于验证和帮助拟合ARIMA模型

    arima模型怎么拟合 什么是ARIMA? (What is ARIMA?) ARIMA models are one of the most classic and most widely used ...

  9. r语言 python 股票_R语言使用ARIMA模型预测股票收益

    原文链接:http://tecdat.cn/?p=2831 "预测非常困难,特别是关于未来".丹麦物理学家尼尔斯·波尔(Neils Bohr) 很多人都会看到这句名言.预测是这篇博 ...

最新文章

  1. Junit指定测试执行顺序
  2. Android Studio如何用真机调试
  3. Nodejs系列课程,从入门到进阶帮你打通全栈
  4. python自定义抛出异常信息_浅谈python抛出异常、自定义异常, 传递异常
  5. mysql手机客户端_图解MySQL索引--B-Tree(B+Tree)
  6. delphi盒子那些软件商店里的年轻人
  7. vue中的阿里巴巴矢量图标使用
  8. 华为手机解锁码快速申请方式
  9. 在EXCEL中生成服从三角分布随机数的方法
  10. 【python】必应api获取壁纸信息+修改桌面+倒计时显示
  11. 5G将给普通人,带来哪些黄金红利期?
  12. 三星note5 android9,史上最快!三星公布新版安卓9.0升级名单:Note FE在内
  13. Python实现文字转语音功能
  14. linux sudoers文件损坏修复
  15. c++中的system(pause)的作用
  16. 电脑手机快速互传文件7个免费工具软件
  17. 解决RK3328 RealTek 8822CS检测不到WIFI模块问题
  18. html 输入框并行,Python:输入文本框并行捕获userinput到OpenCV Live网络摄像头图像...
  19. 给datatable添加序号列
  20. 树莓派驱动6轴传感器MPU6500与SPI初体验(一)

热门文章

  1. Python -- jpype JVM的第三方库使用
  2. 获得 PMP 认证的 10 个 好处
  3. CDH里HDFS的HA配置
  4. rar压缩工具在lunix下安装和使用
  5. 田野调查手记·浮山摩崖石刻(三)
  6. 【Linux环境搭建】十三、Linux(CentOS7) Redis集群模式和哨兵模式配置
  7. Python的requests库安装遇到部分问题以及解决方法
  8. FS-LDM第一讲-----金融业务逻辑数据模型
  9. asp.net1044-学院宿舍报修信息系统#毕业设计
  10. python函数实现求非负实数平方根,在shell里调用