python 模型拟合_介绍使用python的statsmodels模块拟合ARIMA模型

免费资源网,https://freexyz.cn/

导入必要包和模块

from scipy import statsimport pandas as pdimport matplotlib.pyplot as pltimport statsmodels.api as smfrom statsmodels.tsa.arima.model import ARIMAfrom 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')免费资源网,https://freexyz.cn/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
StatsmodelsPython中用于统计建模和计量经济学的库,它提供了各种统计模型,包括线性回归、时间序列分析等。在时间序列分析中,ARIMA模型是一种常用的模型ARIMA模型是自回归移动平均模型的缩写,它是一种广义的线性模型,常用于描述时间序列数据的自相关结构和随机性。ARIMA模型可以分为AR(自回归)、MA(移动平均)和差分(I)三部分,其中AR是指用当前值的前几个值来预测当前值,MA是指用当前误差的前几个值来预测当前误差,差分是指对时间序列进行差分处理,使其变得平稳。 在Python中,使用Statsmodels中的ARIMA模型进行时间序列分析可以分为以下几个步骤: 1. 导入相关库 ```python import pandas as pd import numpy as np import statsmodels.api as sm import matplotlib.pyplot as plt ``` 2. 读取数据 ```python data = pd.read_csv("data.csv", index_col=0, parse_dates=True) ``` 3. 绘制时间序列图 ```python plt.plot(data) plt.show() ``` 4. 确定模型阶数 可以使用ACF和PACF图来确定ARIMA模型的阶数。ACF图展示了时间序列与其滞后版本之间的自相关性,PACF图展示了当前时间序列与其滞后版本之间的部分自相关性。根据ACF和PACF图的信息,可以确定ARIMA模型的p、d和q参数。 ```python fig, ax = plt.subplots(2,1) sm.graphics.tsa.plot_acf(data, lags=30, ax=ax[0]) sm.graphics.tsa.plot_pacf(data, lags=30, ax=ax[1]) plt.show() ``` 5. 拟合模型 根据确定的ARIMA模型阶数,使用ARIMA()函数拟合时间序列数据。 ```python model = sm.tsa.ARIMA(data, order=(p,d,q)) results = model.fit() ``` 6. 模型诊断 使用plot_diagnostics()函数进行模型诊断,检查残差是否符合白噪声假设。 ```python results.plot_diagnostics(figsize=(15, 12)) plt.show() ``` 7. 预测 使用forecast()函数进行预测。 ```python forecast = results.forecast(steps=10) ``` 以上就是使用PythonStatsmodels包进行时间序列分析ARIMA模型的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值