时间序列基础操作:使用python与eviews对AR与ARMA模型进行定阶与预报

这篇具有很好参考价值的文章主要介绍了时间序列基础操作:使用python与eviews对AR与ARMA模型进行定阶与预报。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一般处理时间序列的基本过程:(无季节趋势)

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python
处理时间序列的简单过程(无季节趋势)

注:上图中LB检验的统计量纠正:n*(n+2),而不是n*(n-2)

 几种基础时间序列模型(模型的具体形式补充见文末):

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

目录

一、Python处理

1.1.step1:平稳性检验与白噪音检验

1.1.1平稳性检验:ADF检验

1.1.2差分修正:

1.1.3白噪音检验:L-B统计量/Q统计量

1.2.step2:模型识别与定阶

1.2.1法一:观察ACF与PACF的拖尾与截尾

1.2.2法二:AIC与BIC信息准则

1.3.step3:模型构建与预报

1.3.4step4:模型检验

二、Eviews处理

2.1.step1:平稳性检验与白噪音检验

2.2.step2:模型识别与定阶

2.3.step3:模型构建与预报

2.3.1模型构建:

2.3.2模型预报:

2.4.step4:模型检验

2.5ARCH模型的检验和建立

ARCH效应检验:LM检验

对残差建立ARCH模型

三、Python实践过程 


以《应用时间序列分析》王燕,第四版中p94-p96页中17题数据为例

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

基础介绍:

一、Python处理

重点参考文章:

时间序列模型(ARIMA和ARMA)完整步骤详述_Foneone的博客-CSDN博客_arma_order_select_ic

1.1.step1:平稳性检验与白噪音检验

首先可以绘制线图直接观察数据走势粗略判断平稳性,既无趋势也无周期;

df.plot(color='blue',title='data-17') #绘制时间序列的线图

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

1.1.1平稳性检验:ADF检验

· 检验假设:H0:存在单位根 vs H1:不存在单位根

如果序列平稳,则不应存在单位根,所以我们希望能拒绝原假设

· python代码:adfuller

from statsmodels.tsa.stattools import adfuller
adftest = adfuller(x, autolag='AIC')  #ADF检验

检验结果如下:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

 adftest[0]:ADF检验的t值; adftest[1]:ADF检验的t值的p值; adftest[4:6]:ADF检验对应三个置信度(1%,5%,10%)的t值,可以直接将 adftest[0]与这三个值做比较;

由本输出结果来看-5.7185显著小于后面三个t值,且p值接近为0,因而在1%的显著水平下拒绝原假设,认为该序列平稳;

1.1.2差分修正:

若不平稳可以考虑做差分运算修正为平稳序列。若差分后平稳,则对原序列建立ARIMA模型。

· python代码:timeseries.diff( )

#### 差分运算
def diff(timeseries):
    d1_sale=timeseries.diff(periods=1).dropna()#dropna删除NaN
    d1_sale.plot(color='orange',title='diff1')
    return d1_sale

1.1.3白噪音检验:L-B统计量/Q统计量

· 检验假设与统计量:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

(上图a.中的“残差”应当替换为“序列”)通常m取【n/10】or【根号n】若观测量较小也可以取【n/4】;若拒绝原假设则认为不是白噪音检验

· python代码:acorr_ljungbox

from statsmodels.stats.diagnostic import acorr_ljungbox #白噪声检验
test_value = acorr_ljungbox(timeseries, lags=1)

检验结果如下:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

 test_value[1]为p值,所以可以在5%的显著水平下认为该序列不是一个白噪音序列

1.2.step2:模型识别与定阶

1.2.1法一:观察ACF与PACF的拖尾与截尾

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

· python代码:

plot_acf(timeseries,lags) #lags:延迟阶数

plot_pacf(timeseries,lags)

import statsmodels.api as sm
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
def determinate_order_acf(timeseries):  
    plot_acf(timeseries,lags=30) #自己定延迟数
    plot_pacf(timeseries,lags=30)
    plt.show()

输出结果如下:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

1.2.2法二:AIC与BIC信息准则

迭代不同p与q的取值下的估计,选取AIC与BIC最小的参数p与q;

注:AIC可能高估阶数,BIC可能低估阶数

· python代码:sm.tsa.arma_order_select_ic

#AIC
AIC_summary=sm.tsa.arma_order_select_ic(timeseries,max_ar=4,max_ma=0,ic='aic')
#BIC
BIC_summary=sm.tsa.arma_order_select_ic(timeseries,max_ar=4,max_ma=0,ic='bic')

输出结果:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

如果想直接得到AIC与BIC最小的阶数则直接加入索引:['aic_min_order']

#AIC
AIC=sm.tsa.arma_order_select_ic(timeseries,max_ar=ar_max,max_ma=ma_max,
                                    ic='aic')['aic_min_order']
#BIC
BIC=sm.tsa.arma_order_select_ic(timeseries,max_ar=ar_max,max_ma=ma_max,
                                    ic='bic')['bic_min_order']
print('the AIC is{},\nthe BIC is{}\n'.format(AIC,BIC))

1.3.step3:模型构建与预报

· 模型构建:arma_model = ARMA(train_data,order).fit()

· 模型预报:arma_model.forecast(pred_end)

#### 模型构建:利用机器学习的知识(?
def ARMA_model(train_data,order,pred_end): # train_data:(训练数据,测试数据)拟合数据,order:所定阶数
    arma_model = ARMA(train_data,order).fit()#ARMA模型训练器
    #拟合结果
    print(arma_model.summary())
    #给出一个残差序列的方差 尝试作为sigma的估计值(不确定对不对
    print('随机扰动项的标准差sigma估计:',np.std(arma_model.resid))
    #out_sample_pred = arma_model.predict(start=len(train_data),end = len(train_data)+pred_end-1,dynamic=True)
    #print(out_sample_pred)
    print('预测未来{}天,其预测结果\n{}\n标准误差\n{}\n置信区间如下:\n{}'.format(pred_end,
                                                            arma_model.forecast(pred_end)[0],
                                                            arma_model.forecast(pred_end)[1],
                                                            arma_model.forecast(pred_end)[2]))

缺点:ARMA模型训练器的结果似乎没有含随机扰动项服从方差的估计(输出残差序列arma_model.resid尝试计算其方差来替代)使用ARIMA模型似乎可以得到sigma的估计值(?不确定 ARIMA的操作还没学www)

输出结果:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

1.3.4step4:模型检验

把残差序列再做一次白噪音检验;其余还有qq图检验正态性等(待补充)

二、Eviews处理

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

2.1.step1:平稳性检验与白噪音检验

2.1.1平稳性检验:ADF检验:UnitRoot Test

2.1.2白噪音检验:Correlogram 直接观察ACF的Q检验统计量与p值。本题输出结果如下图,可以拒绝原假设,即是一个非随机序列。如果p值较大,接受原假设,认为是白噪音序列(但此时要注意观察序列线图,有没有存在异方差问题,如果存在异方差,则也不能认为是白噪音)

2.2.step2:模型识别与定阶

法一:观察ACF与PACF的拖尾与截尾:Correlogram 直接观察即可。

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

法二:AIC与BIC准则:eviews内部没有自动迭代检测最小AIC与BIC的方法,只能自行选取几个备选模型分别做拟合,得到的结果中含有AIC的值,自己人工比较;

2.3.step3:模型构建与预报

2.3.1模型构建:

补一些建模指令:

MA(1)模型:ls x c ma(1)

生成一阶差分:genr->d(x)或x-x(-1)

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

 关于随机扰动项服从标准差的估计值:利用resid序列的统计学描述,选取Std.Dev.作为估计值;

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

2.3.2模型预报:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

 先expand序列的长度,再在拟合的模型上点击forecast,选取预测范围,得到的新的序列内即含有预测的结果;

注:eviews不会提供预报的误差具体值,只会提供一个置信区间的图;

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

2.4.step4:模型检验

残差的白噪音检验:选择数据框内的r(残差序列)继续:Correlogram 观察ACF的Q检验统计量与p值。

2.5ARCH模型的检验和建立

(此处使用的是一组新数据)

ARCH模型的形式:

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

step1:按照前面的方式建立合适的主回归模型

step2:ARCH效应检验:LM检验

对主模型的残差做ARCH效应的LM检验

View→Residual Diagnostics→Heteroskedasticity Tests→ARCH 然后再lags处自己定延迟阶数

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

 LM检验:H0不存在ARCH效应的异方差问题

观察检验的p值:若p值很小,则拒绝原假设,认为残差具有异方差问题,存在ARCH效应。

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

 step3:对残差建立ARCH模型

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

三、Python实践过程 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #画图
import statsmodels.api as sm

from statsmodels.graphics.tsaplots import plot_acf,plot_pacf #ACF与PACF
from statsmodels.tsa.stattools import adfuller #ADF检验
from statsmodels.stats.diagnostic import acorr_ljungbox #白噪声检验
from statsmodels.tsa.arima_model import ARMA #ARMA模型
from statsmodels.tsa.arima_model import ARIMA #ARIMA模型

step1:平稳性检验与白噪音检验

#### 平稳性检验
def ADF_test(timeseries):
    x = np.array(timeseries) #转为一维数组
    adftest = adfuller(x, autolag='AIC')  #ADF检验
    print (adftest) 
    if adftest[0] < adftest[4]["1%"] and adftest[1] < 10**(-6): 
    # 对比Adf结果和10%的时的假设检验 以及 P-value是否非常接近0(越小越好)
        print("序列平稳")
        return True 
    else:
        print("非平稳序列")
        return False
    
####  随机性检验(白噪声检验)
def random_test(timeseries) : 
    p_value = acorr_ljungbox(timeseries, lags=1)  # p_value 返回二维数组,第二维为P值
    #print(p_value)
    if p_value[1] < 0.05: 
        print("非随机性序列")
        return  True
    else:
        print("随机性序列,即白噪声序列")
        return False
"""
————————————————
版权声明:本文为CSDN博主「Foneone」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/foneone/article/details/90141213
"""

注:我在实际使用上述ADF检验时会出现与eviews的ADF检验输出的统计量结果相差很多的情况,暂时不知道问题出在了哪里。

 差分运算:

#### 差分运算
def diff(timeseries):
    d1_sale=timeseries.diff(periods=1).dropna()#dropna删除NaN
    d1_sale.plot(color='orange',title='diff1')
    return d1_sale

 step2:模型选择与定阶

模型选择:绘制ACF与PACF

#### 绘制ACF与PACF的图像
def plot_acf_pacf(timeseries): #利用ACF和PACF判断模型阶数 
    plot_acf(timeseries,lags=30) #延迟数
    plot_pacf(timeseries,lags=30)
    plt.show()

 AIC与BIC定阶:两种方法

#法一:利用自带函数:ARIMA模型则需要用差分后的序列带入。

#法二:迭代调优

法二参考文章:时间序列分析ARIMA及其Python实现_木星健谈能手的博客-CSDN博客_arima python实现

#### AIC与BIC定阶
#法一:利用自带函数
def detetminante_order(timeseries,ar_max,ma_max): #信息准则定阶:AIC、BIC
    #AIC
    AIC_summary=sm.tsa.arma_order_select_ic(timeseries,max_ar=ar_max,max_ma=ma_max,ic='aic')
    #BIC
    BIC_summary=sm.tsa.arma_order_select_ic(timeseries,max_ar=ar_max,max_ma=ma_max,ic='bic')
    print('the AIC is{},\nthe BIC is{}\n'.format(AIC_summary.['aic_min_order'],BIC.['bic_min_order']))
    print(AIC_summary,'\n',BIC_summary)
    
#法二:迭代调优
def determine_aic_arima(train_data,pmax,I,qmax):
    aic_matrix=[]
    for p in range(pmax+1):
        tmp=[]
        for q in range(qmax+1):
            try:
                tmp.append(ARIMA(train_data,order=(p,I,q)).fit().aic)
            except:
                tmp.append(None)
        aic_matrix.append(tmp)
    aic_matrix=pd.DataFrame(aic_matrix)    
    p,q=aic_matrix.stack().idxmin() #最小值的索引
    print('用AIC方法得到最优的p值是%d,q值是%d'%(p,q))
    
def determine_bic_arima(train_data,pmax,I,qmax):
    bic_matrix=[]
    for p in range(pmax+1):
        tmp=[]
        for q in range(qmax+1):
            try:
                tmp.append(ARIMA(train_data,order=(p,I,q)).fit().bic)
            except:
                tmp.append(None)
        bic_matrix.append(tmp)
    bic_matrix=pd.DataFrame(bic_matrix)    
    p,q=bic_matrix.stack().idxmin() #最小值的索引
    print('用AIC方法得到最优的p值是%d,q值是%d'%(p,q))

 step3:模型构建与预报

如果需要拟合ARIMA,则只需要替换为ARIMA(train_data,order).fit()即可

#### 模型构建:利用机器学习的知识(?
def ARMA_model(train_data,order,pred_end): # train_data:(训练数据,测试数据)拟合数据,order:所定阶数
    arma_model = ARMA(train_data,order).fit()#ARMA模型训练器
    print(arma_model.summary()) #拟合结果
    print('随机扰动项的标准差sigma估计:',np.std(arma_model.resid))#给出一个残差序列的方差 尝试作为sigma的估计值(不确定对不对
    print('预测未来{}天,其预测结果\n{}\n标准误差\n{}\n置信区间如下:\n{}'.format(pred_end,
                                                            arma_model.forecast(pred_end)[0],
                                                            arma_model.forecast(pred_end)[1],
                                                            arma_model.forecast(pred_end)[2]))

正式过程:

df1=pd.read_excel(r'F:\个人嘿嘿嘿\北师大BNU\研一上-课业资料\时间序列\作业2\timeseries17.xlsx')
df17=df1['cq']

df17.plot(color='blue',title='data-17') #绘制时间序列的线图
plot_acf_pacf(df17)             #绘制时间序列的ACF与PACF
ADF_test(df17)      #平稳性检验
random_test(df17)   #白噪音检验
detetminante_order(df17,4,0)        #AIC,BIC定阶
ARMA_model(df17,(1,0),5)                #模型拟合和预报

四、时序常见模型的形态

(一)AR模型(自回归模型)

当前时间点的数据与过去自身数据的关系。

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

(二)MA模型(滑动平均模型)

当前时间点的数据与过去噪声的关系。

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

(三)ARMA模型(自回归滑动平均模型)

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

(四)ARIMA模型:针对有趋势的时间序列

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

(五)乘积的ARMA模型:有季节周期的时间序列

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

(六)乘积的ARIMA模型:有趋势+周期的时间序列

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

(七)ARCH模型+GARCH模型

ARCH模型:自回归条件异方差模型

特点:当自回归模型的残差是异方差时,对残差形式做了变换,使其等于过去残差的某种变换,从而满足同方差假定;

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python

GARCH模型:引入滞后算子的自回归条件异方差模型

sm.tsa.arma_order_select_ic,希望它早日平稳的时间序列,ar,python文章来源地址https://www.toymoban.com/news/detail-723253.html

到了这里,关于时间序列基础操作:使用python与eviews对AR与ARMA模型进行定阶与预报的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

    🚨注意🚨 :最近经粉丝反馈,发现有些订阅者将此专栏内容进行二次售卖,特在此声明,本专栏内容仅供学习,不得以任何方式进行售卖,未经作者许可不得对本专栏内容行使发表权、署名权、修改权、发行权、转卖权、信息网络传播权,如有违者,追究其法律责任。 👑

    2023年04月15日
    浏览(44)
  • tableau基础学习2:时间序列数据预处理与绘图

    这一部分,我们记录一些分析时序趋势的分析步骤 原始数据是excel表格,其中包含三个Sheet页, 这里我们选择两家公司的股票,作为时序数据进行对比:恩捷股份与科大讯飞 首先打开下面的【已使用数据解释器清理】,这里可以自动剔除一部分无用行,以保留需要分析的数据

    2024年02月10日
    浏览(31)
  • 时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

    目录 引言 LSTM的预测效果图 LSTM机制 了解LSTM的结构 忘记门 输入门 输出门 LSTM的变体 只有忘记门的LSTM单元 独立循环(IndRNN)单元 双向RNN结构(LSTM) 运行代码 代码讲解 LSTM(Long Short-Term Memory)是一种常用的循环神经网络(RNN)模型,用于处理序列数据,具有记忆长短期的能力。

    2024年02月08日
    浏览(60)
  • 通过R语言实现平稳时间序列的建模--基础(ARMA模型)

    目录 1. 建模流程 2. 序列平稳性检验和纯随机性检验 2.1 图检验 2.2 单位根检验 3. 模型选择 ​  4. 参数估计 5. 模型检验 5.1 模型显著性检验 5.2 参数显著性检验 6. 模型优化 6.1 AIC准则 6.2 BIC准则 7. 预测 1.1 序列平稳性检验+纯随机性检验 1.2 模型选择 1.3 参数估计 1.4 模型检验 1

    2024年02月06日
    浏览(49)
  • 基于Python的时间序列异常值检测

      今天我们介绍一下使用python做时间序列数据分析和预测中异常值检测的方法,常用的异常值检测方法有以下几种: 3sigma: 基于正太分布,当数据值超过±3个标准差(3sigma)时为异常值。 z-score : z标准分数,它测量数据值到平均值的距离,当数据与平均值相差2个标准差时z-score为

    2023年04月24日
    浏览(30)
  • Python时间序列分析--ARIMA模型实战案例

    **本文将介绍使用Python来完成时间序列分析ARIMA模型的完整步骤与流程,绘制时序图,平稳性检验,单位根检验,白噪声检验,模型定阶,参数估计,模型检验等完整步骤。Python建立时间序列分析–ARIMA模型实战案例 时间序列指的是将带有同一指标单位的数值按照产生时间的先

    2024年01月17日
    浏览(37)
  • 一文搞懂Python时间序列预测(步骤,模板,python代码)

    预测包括,数值拟合,线性回归,多元回归,时间序列,神经网络等等 对于单变量的时间序列预测:模型有AR,MA,ARMA,ARIMA,综合来说用ARIMA即可表示全部。 数据和代码链接:数据和Jupyter文件 以预测美国未来10年GDP的变换情况为列: 目录 第一步进行数据导入 第二步进行平稳序

    2024年02月12日
    浏览(30)
  • 用Python语言进行时间序列ARIMA模型分析

    应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛。以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向。例如,利用历史股市数据和经济指标进行时间序列分析,可以预测未来股市的走向。

    2024年02月03日
    浏览(53)
  • Python探索金融数据进行时间序列分析和预测

    大家好,时间序列分析是一种基于历史数据和趋势分析进行预测的统计技术。它在金融和经济领域非常普遍,因为它可以准确预测趋势并做出明智的决策。本文将使用Python来探索经济和金融数据,执行统计分析,并创建时间序列预测。 我们将在本教程中使用NumPy、Pandas和Mat

    2024年02月16日
    浏览(40)
  • [开源] 基于GRU的时间序列预测模型python代码

    基于GRU的时间序列预测模型python代码分享给大家,记得点赞哦 更多时间序列预测代码获取: 时间序列预测算法全集合--深度学习

    2024年04月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包