精华内容
下载资源
问答
  • ARIMA差分自回归模型python代码

    千次阅读 2017-06-13 17:34:13
    ARIMA差分自回归模型python代码
    1.差分自回归模型的基本思想:将预测对象随时间推移而形成的数据序列视为一个随机序列,用一定的数学模型来近似描述这个序列。这个模型一旦被识别后就可以从时间序列的过去值以及现在值来预测未来值。不能对时间序列直接采取线性回归算法是因为时间序列所对应的值并不是独立的。
    2.要对非平稳的序列进行平稳处理,因为非平稳的序列不能进行预测。
    3.代码:
    
    #!/usr/bin/python
    
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from statsmodels.tsa.arima_model import ARIMA
    
    
    def date_parse(date):
        return pd.datetime.strptime(date, '%Y-%m')
    
    if __name__ == '__main__':
    
        data = pd.read_csv('AirPassengers.csv', header = 0, parse_dates = ['Month'], date_parser = date_parse, index_col = ['Month'])
        p,d,q = 2, 1, 2
        data.rename(columns = {'#Passengers':'Passengers'}, inplace = True)
        passengersNums = data['Passengers'].astype(np.float)
        logNums = np.log(passengersNums)
        subtractionNums = logNums - logNums.shift(periods = d)
        rollMeanNums = logNums.rolling(window = q).mean()
        logMRoll = logNums - rollMeanNums
    
        plt.plot(logNums, 'g-', lw = 2, label = u'log of original')
        plt.plot(subtractionNums, 'y-', lw = 2, label = u'subtractionNums')
        plt.plot(logMRoll, 'r-', lw = 2, label = u'log of original - log of rollingMean')
        plt.legend(loc = 'best')
        plt.show()
    
        arima = ARIMA(endog = logNums, order = (p,d,q))
        proArima = arima.fit(disp = -1)
        fittedArima = proArima.fittedvalues.cumsum() + logNums[0]
        fittedNums = np.exp(fittedArima)
        plt.plot(passengersNums, 'g-', lw = 2, label = u'orignal')
        plt.plot(fittedNums, 'r-', lw = 2, label = u'fitted')
        plt.legend(loc = 'best')
        plt.show()

    解释:
    (1)首先对原始时间序列数据进行对数处理,差分处理,滑动平均处理。其中差分处理与滑动平均处理是对非平稳序列进行平稳处理,结果如图:
    平稳处理
    很明显观察到用差分与原始数据减去滑动平均的结果可以对非平稳序列进行平稳处理。
    (2)然后用差分自回归模型拟合原始数据。其中参数p为自回顾函数的参数,d为差分的参数,q为滑动平均的参数。结果如图:
    拟合结果与原始数据

    展开全文
  • 打个比方,在python自回归模型中,我们经常可以用现在产品的价格,可以粗略的推算出明天产品的价格,这就是我们要讨论的在自回归模型中对python产品的预测。python自回归模型是什么?自回归模...

    如今是互联网高速发展新时期,需要高科技的产品应用到人们的生活中去,但是很多高科技产品都离不开编程的开发。就好比最近人们常常提起的python自回归模型。那么可能有人就要问了,python自回归模型是什么?打个比方,在python自回归模型中,我们经常可以用现在产品的价格,可以粗略的推算出明天产品的价格,这就是我们要讨论的在自回归模型中对python产品的预测。

    c979fcc1-c7cd-42a2-8459-f519f66d6106.jpg

    python自回归模型是什么?

    自回归模型或简称为AR模型,仅依靠过去的时间值来预测当前值。这是一个线性模型,其中当前期间的值是过去结果的总和乘以数字因子。我们将其表示为AR(p),其中“

    p”称为模型的阶数,表示我们要包括的滞后值的数量。

    例如,如果我们将X作为时间序列变量,则AR(1)(也称为简单自回归模型)将看起来像这样:

    X t = C + ϕ 1 X t-1 + ϵ t

    让我们仔细研究这个等式的不同部分,以确保我们很好地理解这个概念。

    X t-1是多少?

    对于初学者,X t-1表示上一期间的X值。

    让我们详细说明。

    如果“ t”代表今天并且我们有每周值,那么“ t-1”代表上周。因此,X t-1描述了一周前记录的值。

    ϕ 1是什么?

    系数ϕ 1是一个数字常数,通过该常数我们可以将滞后变量(X

    t-1)相乘。您可以将其解释为先前值的一部分,该值会保留在将来。值得注意的是,这些系数应始终在-1和1之间。

    让我解释一下原因。

    如果系数的绝对值大于1,则随着时间的流逝,它将无可估量地爆炸。

    起初,这个想法似乎令人困惑。因此,让我们看一个数学示例。

    假设我们有一个包含1000个观测值的时间序列,ϕ 1 = 1.3并且C = 0。

    然后,X 2 = 0 + 1.3 X 1

    既然X 3 = 1.3 X 2,我们可以用(1.3 X 1)代替X 2,得到X 3 = 1.3(1.3 X 1)= 1.3 2 X

    1。然后,随着累积的时间越多(例如X 50),系数增加的幅度就越大(1.3 49 X 1)。

    当我们到达第1000个周期时,我们将得到X 1000 = 1.3 999 X

    1。这意味着这些值会继续增加,最终比初始值要高得多。这显然不是预测未来的可靠方法。

    什么是ε 牛逼?

    好了,现在我们需要打破方程的唯一部分是ε 牛逼。这就是所谓的残留,并代表周期t和正确的值(ε我们的预测之间的差吨 = Y 吨 - ŷ

    吨)。这些残差通常是不可预测的差异,因为如果存在某种模式,它将被模型的其他现有因素捕获。

    我们如何解释自回归模型?

    现在我们知道模型的所有部分代表什么,让我们尝试对其进行解释。根据等式,在给定时期(X值吨)等于某个部分(φ 1中的最后一个时间段(X值)T-1),加上一些恒定基准的和不可预测的冲击ε 吨。

    了解我们在给定的数据集上不仅仅使用任何自回归模型至关重要。我们首先需要确定要在分析中包括多少个滞后(过去值)。

    具有更多滞后的自回归模型

    例如,有关气象条件的时间序列将不仅仅依赖于一天前的天气统计数据。可以肯定地说,它将使用过去7天的数据。因此,该模型应考虑最多7个周期的值。

    从数学的角度来看,使用两个滞后的模型(AR(2))如下所示:

    X t = C + ϕ 1 X t-1 + ϕ 2 X t-2 + ϵ t

    如您所料,更复杂的自回归模型将包含更多滞后值X t-n以及它们相关的系数ϕ n。

    我们包含的滞后越多,我们的模型就越复杂。

    模型越复杂,我们必须确定的系数就越多,结果,其中某些系数不重要的可能性就越大。

    现在,通常来说,考虑到更多数据进行预测的模型通常会更好。但是,如果系数(ϕ 1,ϕ 2,…… n)与0的差别不大,则它们对预测值没有影响(因为ϕ k

    X t-k = 0),因此将它们包括在内几乎没有意义。在模型中。

    当然,无法手动确定这些系数的重要性。

    对我们来说幸运的是,Python非常适合这项工作。借助方便的库(例如Pandas和Statsmodels),我们可以为任何给定的数据集确定最合适的自回归模型。

    如果您想了解有关在Python中实现自回归模型或模型选择过程如何工作的更多信息,请务必查看我们的分步Python教程。

    如果您不熟悉 Python,并且热衷于了解更多信息,那么这篇有关学习Python编程的综合文章将指导您从安装到Python

    IDE,库和框架,再到最佳Python职业发展道路,以及工作前景。

    以上就是关于python自回归模型是什么的全部内容,如果想了解更多关于python的信息,请继续关注中培教育。

    展开全文
  • Python变量 Python中的向量自回归模型
  • Autoregression / AR,就是用前期数据来预测后期数据的回归模型,所以叫做自回归模型。 它的逻辑简单,但对时间序列问题能够做出相当准确的预测。 1)回归函数 y^t=b0+b1yt−1+...+bnyt−n,其中n<t y\hat{}_t =...

    Autoregression / AR,就是用前期数据来预测后期数据的回归模型,所以叫做自回归模型。

    它的逻辑简单,但对时间序列问题能够做出相当准确的预测。

    1)自回归函数

    y^t=b0+b1yt1+...+bnytn,n<t y\hat{}_t = b_0 + b_1y_{t-1} + ... + b_ny_{t-n} , 其中n<t
    只有在数据平稳/若平稳的基础上,才能进行实现序列分析

    正式的说,如果一个时间序列xtx_t 的一阶矩和二阶矩(即均值和方差)具有时间不变性,则称它为弱平稳的。弱平稳性是很重要的,因为它为预测提供了基础框架。
    ——《金融数据分析导论:基于R语言》2.1 平稳性

    2)上例子
    1. 首先取数&画图
    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/daily-min-temperatures.csv',
    				 index_col=0, parse_dates=True)
    print(df.head())
    df.plot()
    plt.show()
    
    # 结果如下
                Temp
    Date            
    1981-01-01  20.7
    1981-01-02  17.9
    1981-01-03  18.8
    1981-01-04  14.6
    1981-01-05  15.8
    
    

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200408195712847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h0dWh4Zg==,size_16,color_FFFFFF,t_70从上图可知温度序列是弱平稳的(weakly stationary);但是肉眼看不精确是不是平稳的,此时ADF Test/ Augmented Dickey-Fuller Test就排上用场了,其原假设H0:存在单位根/UNIT ROOT(即数据不平稳)

    from statsmodels.tsa.stattools import adfuller
    a = df.Temp
    print(adfuller(a,    # 下述参数均为默认值
    				maxlag=None, 
    				regression='c', 
    				autolag='AIC',   # 自动在[0, 1,...,maxlag]中间选择最优lag数的方法;
    				store=False, 
    				regresults=False)
    				)
    
    # 结果如下
    (-4.444804924611687,   #  AIC标准下得到的统计值,用于和下边 1%,5%,和10%临界值比较。但更方便的是直接用下边的p值
     0.00024708263003611164,   #  AIC标准下的p值,即原假设成立的概率
     20,     # AIC标准下的lags
     3629,   # nobs: 本次检测用到的观测值个数。ADF TEST中参数maxlag即由它决定,公式是 maxlag=12*(nobs/100)^{1/4},此处即29.45
    {'1%': -3.4321532327220154,   # 1%标准下的临界值
    '5%': -2.862336767636517, 
    '10%': -2.56719413172842}, 
    16642.822304301197)
    

    由p值可以看出,原假设成立的概率极底,我们应该拒绝原假设。即数据平稳。

    adfuller函数官方文档备注:
    Augmented Dickey-Fuller的原假设是存在单位根,备择假设是不存在单位根。如果p-value大于临界值,那么我们就不能拒绝有一个单位根存在。

    p-value是通过MacKinnon 1994年的回归曲面近似得到的,但使用的是更新的2010年表

    1. 快速查看数据是否适合AR模型
    from pandas.plotting import lag_plot
    lag_plot(df)   # 默认lag=1
    plt.show()
    # 结果如图所示:
    

    lag plot如上图所示,yt+1y_{t+1}yty_t明显相关。当然我们能通过计算,得到相关系数是0.77和显著性水平0。

    from scipy.stats.stats import pearsonr
    
    a = df.Temp
    b = df.Temp.shift(1)
    
    print(pearsonr(a[1:], b[1:]))
    
    # 结果如下
    (0.7748702165384458, 0.0)
    
    1. 上边是很好的检测方法。但是如果我们想同时查看YtY_tYt1Y_{t-1},…,YtnY_{t-n}的相关性,重复n次就太繁琐了。
      下面介绍一个一次性画出n多Lag的自回归系数方法:statsmodels.graphics.tsaplots.plot_acf()
    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    fig, axes = plt.subplots(2,1)
    
    fig, axes = plt.subplots(2, 1)
    plot_acf(df['Temp'], ax=axes[0])
    plot_pacf(df['Temp'], ax=axes[1])
    
    plt.tight_layout()
    plt.show()
    

    在这里插入图片描述
    4. 最后,到此为止我们就知道如何查看时间序列数据的自相关性了。接下来看如何用对它建立模型。

    import pandas as pd
    import numpy as np
    from statsmodels.tsa.ar_model import AR
    import matplotlib.pyplot as plt
    from sklearn.metrics import mean_squared_error as MSE
    
    df = pd.read_csv('e:/daily-min-temperatures.csv',
                     index_col=0, parse_dates=True)
    # 把模型数据分为train和test,分别用来训练模型和对比模型预测结果
    x = df.values
    train, test = x[:-7], x[-7:]  # test的个数设定为7
    
    # 训练模型得到所需参数:AR的滞后项个数p,和自回归函数的各个系数
    model_fit = AR(train).fit()
    params = model_fit.params
    p = model_fit.k_ar  # 即时间序列模型中常见的p,即AR(p), ARMA(p,q), ARIMA(p,d,q)中的p。
    # p的实际含义,此处得到p=29,意味着当天的温度由最近29天的温度来预测。
    
    history = train[-p:]   
    history = np.hstack(history).tolist()  # 也可以用history = [history[i] for i in range(len(history))] ,
    # 唯一的目的就是接下来通过append(test[i])实时更新history
    # (append函数不适用于np.narray类型的history)
    test = np.hstack(test).tolist()
    
    predictions = []
    for t in range(len(test)):
    	lag = history[-p:]
    	yhat = params[0]
    	for i in range(p):
    		yhat += params[i+1] * lag[p-1-i]
    	predictions.append(yhat)
    	obs = test[t]
    	history.append(obs)
    print(np.mean((np.array(test) - np.array(predictions))**2))  # 得到mean_squared_error, MSE
    plt.plot(test)
    plt.plot(predictions, color='r')
    plt.show()
    

    在这里插入图片描述附注:

    • 2个随机变量X和Y的pearson线性相关系数定义为:
      ρx,y=Cov(X,Y)Var(X)Var(Y)=E[(Xμx)(Yμy)]E(Xμx)2E(Yμy)2ρ_{x,y} = \frac{Cov(X, Y)}{\sqrt{Var(X)Var(Y)}} = \frac{E[(X-μ_x)(Y-μ_y)]}{\sqrt{E(X-μ_x)^2E(Y-μ_y)^2}}
      – 具体到样本:
      ρ^x,y=t=1T[(xtxˉ)(ytyˉ)]t=1T(xtxˉ)2t=1T(ytyˉ)2\hat{ρ}_{x,y} = \frac{\sum_{t=1}^{T} [(x_t -\bar{x})(y_t-\bar{y})]}{\sqrt{\sum_{t=1}^{T} (x_t -\bar{x})^2\sum_{t=1}^{T}(y_t-\bar{y})^2}}
    展开全文
  • print ("sigmoid([0, 2]) = " + str(sigmoid(np.array([0,2]))))
  • Python实现向量自回归(VAR)模型——完整步骤

    万次阅读 多人点赞 2019-02-01 15:20:14
    以金融价格为例,传统的时间序列模型比如ARIMA,ARIMA-GARCH等,只分析价格自身的变化,模型的形式为: 其中称为自身的滞后项。 但是VAR模型除了分析自身滞后项的影响外,还分析其他相关因素的滞后项对未来值产生...

    废话不多说,先开始分享:

    20210127补充--------------------------------------

    很多童鞋都问我要源代码和数据,本来是因为工作原因不想公开的,后来越来越多的人私信跟我反映说没有参照物实在太抽象了,那鉴于时间也比较久了,很多细节我也有点模糊了,一个一个解释不过来,因此,就发布一下原来我项目的源代码和当时用的数据,真的有需要的童鞋可以下载做参考。附下载地址:

    https://download.csdn.net/download/mooncrystal123/14945452

    ------------------------------------------------------------------------------------------------------------------

    1. 首先啥是VAR模型,我这里简略通俗的说一下,想看代码的童鞋直接跳到第3部分就好了:

    以金融价格为例,传统的时间序列模型比如ARIMA,ARIMA-GARCH等,只分析价格自身的变化,模型的形式为:

    y_{t} = \beta _{1}\cdot y_{t-1} + \beta _{2}\cdot y_{t-2} + ...

    其中y_{t-1}称为自身的滞后项。

    但是VAR模型除了分析自身滞后项的影响外,还分析其他相关因素的滞后项对未来值产生的影响,模型的形式为:

    y_{t} = \beta _{1}\cdot y_{t-1} + \alpha _{1}\cdot x_{t-1} +\beta _{2}\cdot y_{t-2} + \alpha _{2}\cdot x_{t-2} + ...

    其中x_{t-1}就是其他因子的滞后项。

    总结一下,就是可以把VAR模型看做是集合多元线性回归的优点(可以加入多个因子)以及时间序列模型的优点(可以分析滞后项的影响)的综合模型。

    VAR其实是一类模型,以上是最基础的VAR模型形式,其他还有SVAR,CVAR,VECM,同统称为VAR类模型。

    2. VAR模型的建模步骤

    这种数学模型都有固定的建模步骤:

    1)画N个因子的序列相关图,计算相关系数 correlation coiffiant,查看一下线性相关度。(相关系数大小只反映线性相关程度,不反应非线性相关,如果等于0,不能排除存在非线性相关的可能。)

    2)对N个因子的原始数据进行平稳性检验,也就是ADF检验。

    VAR模型要求所有因子数据同阶协整,也就是N个因子里面如果有一个因子数据不平稳,就要全体做差分,一直到平稳为止。

    3)对应变量(yt)和影响因子(Xt)做协整检验

    一般就是EG协整关系检验了,为了看看Y和各个因子Xi之间是否存在长期平稳的关系,这个检验要放在所有数据都通过ADF检验以后才可以做。如果那个因子通不过协整检验,那基本就要剔除了。

    4)然后就是通过AIC,BIC,以及LR定阶。

    一般来说是综合判断三者。AIC,BIC要最小的,比如-10的AIC就优于-1AIC,LR反之要最大的。但是具体偏重那个,就看个人偏好,一般来说,博主的经验是看AIC和LR,因为BIC的惩罚力度大于AIC,大多数时间不太好用。

    具体的实现步骤一般是,把滞后项的阶数列一个范围,比如1-5,然后直接建模,其他啥都不看,先看AIC,BIC,LR的值。一般符合条件的不会只有一个,可以挑2-3个最好的,继续进行。

    5)定阶完成后,就是估计参数,看参数的显著性。

    好的模型所有参数的要通过显著性检验。

    6)对参数进行稳定性检验

    VAR除了对原始数据要进行平稳处理,估计出来的参数还需要检验参数稳定性。

    这是为了查看模型在拟合时,数据样本有没有发生结构性变化。

    有两张检验方法,这两种方法的基本概念是:

    第一个是:AR根,VAR模型特征方程根的绝对值的倒数要在单位圆里面。

    第二个是:cusum检验,模型残差累积和在一个区间内波动,不超出区间。

    这里要注意的是CUSUM检验的原价设(H0):系数平稳,备择假设才是不平稳。所以CUSUM结果要无法拒绝原假设才算通过。

    只有通过参数稳定性检验的模型才具有预测能力,进行脉冲响应和方法分解分析才有意义。

    7)使用乔里斯基正交化残差进行脉冲响应分析

    举例:要分析和预测的是Y,影响Y的有两个因子X1,X2。

    脉冲响应是1对1,根据以上条件,就要做两个脉冲响应分析,分别是:Y和X1,Y和X2。

    看看不同因子上升或者下降,对Y的冲击的程度和方式(Y上升还是下降),以及持续时间。

    8)使用乔里斯基正交化残差进行方差分解分析

    举例:要分析和预测的是Y,影响Y的有两个因子X1,X2。

    方差分解是1对1,根据以上条件,就要做两个方差分解分析,分别是:Y和X1,Y和X2。

    9)为什么使用乔里斯基正交化残差?

    因为进行方差分解和脉冲响应分析的时候,要求模型的残差为白噪声。但是!现实中,我们很难把所有影响Y的因素都囊括进方程,这就导致,现实中VAR模型的残差一般都不是白噪声。因此使用乔里斯基正交化来处理模型的残差。

    VAR建模的时候以上面的条件为例,其实模型估计参数时会给出三个3个方程(应变量各自不同):

    方程1:y_{t} = \beta _{1}\cdot y_{t-1} + \alpha _{1}\cdot X1_{t-1} +\Theta_{1}\cdot X2_{t-1} + \varepsilon _{t}

    方程2:X1_{t} = \beta _{1}\cdot X1_{t-1} + \alpha _{1}\cdot y_{t-1} +\Theta_{1}\cdot X2_{t-1}+ \eta _{t}

    方程3:X2_{t} = \beta _{1}\cdot X2_{t-1} + \alpha _{1}\cdot y_{t-1} +\Theta_{1}\cdot X1_{t-1}+ \omega_{t}

    方程1的残差序列:\varepsilon _{t}

    方程2的残差序列:\eta _{t}

    方差3的残差序列:\omega_{t}

    三个方程的乔里斯基正交化的步骤就是:

    正交1:\frac{\eta _{t}}{\varepsilon _{t}}

    正交2:\frac{\omega _{t}}{\varepsilon _{t}}

    正交3:\frac{\omega _{t}}{\eta _{t}}

    正交4:\frac{\frac{\eta _{t}}{\varepsilon _{t}}}{\frac{\omega _{t}}{\varepsilon _{t}}}

    正交5:\frac{\frac{\eta _{t}}{\varepsilon _{t}}}{\frac{\omega _{t}}{\eta _{t}}}

    最后用正交4/正交5,得到的序列就是乔里斯基正交化残差了。

    乔里斯基正交化之前要对方程的变量按重要性排序,更重要的放在分子上。

     

     

    3. 然后就是如何使用PYTHON 实现VAR模型的建模了:

    以上的步骤是不是很庞大,看着很麻烦?但是电脑都会一下子嗖嗖嗖处理好的。

    1)导入模块

    # 模型相关包
    import statsmodels.api as sm
    import statsmodels.stats.diagnostic
    # 画图包
    import matplotlib.pyplot as plt
    # 其他包
    import pandas as pd
    import numpy as np
    
    

    2)画序列相关图

    fig = plt.figure(figsize=(12,8))
    plt.plot(changeXAUUSD,'r',label='XAU USD')
    plt.plot(shfeXAU,'g',label='SHFE XAU')
    plt.title('Correlation: ' + str(correlation))
    plt.grid(True)
    plt.axis('tight')
    plt.legend(loc=0)
    plt.ylabel('Price')
    plt.show()

    3)ADF单位根

    python里的ADF检验结果就是下面的adfResult,我这里用output整理了一下,方便浏览。童鞋们也可以print结果,然后自行整理。

    这里的数据格式应该是DataFrame里面的series格式,不过dataframe应该也可以吧,没试过。

    adfResult = sm.tsa.stattools.adfuller(data,maxlags)
    output = pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used",
                                             "Critical Value(1%)", "Critical Value(5%)", "Critical Value(10%)"],
                                      columns=['value'])
     output['value']['Test Statistic Value'] = adfResult[0]
     output['value']['p-value'] = adfResult[1]
     output['value']['Lags Used'] = adfResult[2]
     output['value']['Number of Observations Used'] = adfResult[3]
     output['value']['Critical Value(1%)'] = adfResult[4]['1%']
     output['value']['Critical Value(5%)'] = adfResult[4]['5%']
     output['value']['Critical Value(10%)'] = adfResult[4]['10%']

    4)协整检验

    python里面的协整检验通过coint()这个函数进行的,返回P-value值,越小,说明协整关系越强

    result = sm.tsa.stattools.coint(data1,data2)

    5)模型估计+定阶

    这里PYTHON真的很烦,python有两套var估计,一个是VARMAX,一个是VAR。我看了官方文档后,觉得估计参数和定阶还是用VARMAX最好,因为可以返回很多东西,尤其是summary()里面的统计结果特别详细,直接包含了AIC,BIC,HQIC。

    这里要注意,PYTHON定阶没有LR这个指标,要看LR的童鞋只能用EVIEWS和R了。不过AIC,BIC也够用了。

    这里插入的数据只能是DATAFRAME格式的,不然就报错。

    给大家看一下数据构造吧:

    lnDataDict = {'lnSHFEDiff':lnSHFEDiff,'lnXAUDiff':lnXAUDiff}
    lnDataDictSeries = pd.DataFrame(lnDataDict,index=lnSHFEDiffIndex)
    data = lnDataDictSeries[['lnSHFEDiff','lnXAUDiff']]

    这里的fitMod和resid变量后面会用到哦~~

    #建立对象,dataframe就是前面的data,varLagNum就是你自己定的滞后阶数
    orgMod = sm.tsa.VARMAX(dataframe,order=(varLagNum,0),trend='nc',exog=None)
    #估计:就是模型
    fitMod = orgMod.fit(maxiter=1000,disp=False)
    # 打印统计结果
    print(fitMod.summary())
    # 获得模型残差
    resid = fitMod.resid
    result = {'fitMod':fitMod,'resid':resid}

    6)系数平稳检验:CUSUM检验

    这里也注意,Python这里不像EVIEWS,python没有办法算AR根,弄不到AR根图,但是python可以进行cusum检验。返回3各变量,第2个是P-value值,记得我之前说的吗,cusum检验要无法拒绝原假设,也就是说P-value值要大于0.05

    这里的resid就是前面模型的resid

    # 原假设:无漂移(平稳),备择假设:有漂移(不平稳)
    result = statsmodels.stats.diagnostic.breaks_cusumolsresid(resid)

    7)脉冲响应图

    orthogonalized=True代表使用乔里斯基正交,这里很奇葩,官方文档没有加plt.show(),但是博主亲身试验,一定要加,不然画不出来。terms代表周期数。

    # orthogonalized=True,代表采用乔里斯基正交 
    ax = fitMod.impulse_responses(terms, orthogonalized=True).plot(figsize=(12, 8))
    plt.show()

    8)方差分解图

    这里要注意:

    VARMAX很怪,没有做方差分解的方法,但是VAR这个方法里面有。(python就是这么任性!)

    所以这里就用VAR重新估计,然后直接使用fevd进行方差分解

    打印summary()可以看到方差分解的具体结果,plot可以画图,要记得加plt.show()哦~~

    这里的dataFrame就是前面的data噢~~

    md = sm.tsa.VAR(dataFrame)
    re = md.fit(2)
    fevd = re.fevd(10)
    # 打印出方差分解的结果
    print(fevd.summary())
    # 画图
    fevd.plot(figsize=(12, 16))
    plt.show()

     

    以上就是今日份的分享~~然后博主要开始吐槽了!

    博主真是苦逼,最近定期要写研报,博主挑了个向量自回归模型(VAR)来研究,然而博主之前接触过的就只有MATLAB和python,matlab虽然做这种统计很方便,但是一个是博主好久不用啦有点生疏,还有一个是跟项目开发合在一起的话不方便。

    然后博主现在天天用python,所以为了赶稿子,也只能硬着头皮用python搞一波了。但是,博主发现,全网,基本没有人用python搞过这种高级计量经济学模型,因为连范文都找不到1篇!!!!博主亲身尝试摸索后,虽然完成了研报,但是!博主还是要说,统计类的东西,要么用R,要么用EVIEWS,用Python真心苦逼!!!

    主要是各个函数都藏在不知道什么旮旯角落里!!!有些还没有!比如AR根和AR图,要不是靠参考链接里R语言的一篇样板文,我都不知道还有个检验系数稳定性的方法叫cusum,再从另一篇样例里面找到python做cusum的样例。cusum的原假设和备择假设还跟普通检验不一样,反过来的,我查了好多中外文献,才确定这一点。python里面还没有EG因果关系检验,而协整关系检验的名字竟然叫coint……也是从另一篇样例文中找到的!!!都是泪…………

    然后,python只能对VAR模型,VECM模型进行估计,其他var类模型,各位别白废力气寻找了,直接用EVIEWS或者R吧。

    好啦~吐槽结束,博主可以保证,这是全网唯一的,最完整的利用python进行VAR模型建模的教程文了~~~

     

    参考文献:

    1. VARMAX官方样例

    http://www.statsmodels.org/stable/examples/notebooks/generated/statespace_varmax.html

    2. VARMAX官方文档

    http://www.statsmodels.org/stable/generated/statsmodels.tsa.statespace.varmax.VARMAX.html?highlight=varmax

    3.VARMAX fit官方文档

    http://www.statsmodels.org/stable/generated/statsmodels.tsa.statespace.varmax.VARMAX.fit.html#statsmodels.tsa.statespace.varmax.VARMAX.fit

    4.VARMAX fit返回值

    http://www.statsmodels.org/stable/generated/statsmodels.tsa.statespace.mlemodel.MLEResults.html#statsmodels.tsa.statespace.mlemodel.MLEResults

    5. CUSUM检验文献:平稳过程趋势项变点的CUSUM检验

    https://www.ixueshu.com/document/1d642b472b5dc0717d721b29bfac1625.html#pdfpreview

    6. CUSUM检验文献:关于CUSUM检验的改进

    https://wenku.baidu.com/view/65d91ee1172ded630b1cb62c.html

    7. cusum外文文献

    https://doc.docsou.com/b77f40843604bd6fcc70f6d0b-10.html

    8.python实现时间序列

    https://max.book118.com/html/2017/1006/136205976.shtm

    9.VAR python W3Cschool样例

    https://www.w3cschool.cn/doc_statsmodels/statsmodels-examples-notebooks-generated-interactions_anova.html?lang=en

    10.R语言实现VAR模型

    https://blog.csdn.net/Imliao/article/details/80352158

    11. python statsmodel手册

    https://blog.csdn.net/qq_41518277/article/details/85101141#VARVAR_processes_175

    12. python cusum检验方法说明:breaks_cusumolsresid

    https://www.cherylgood.cn/doc/statsmodels/statsmodels-statistics/5bacda5744e2a52489c5292a.html

    13.python 进行cusum检验样例

    https://blog.csdn.net/CoderPai/article/details/83657386

     

     

    展开全文
  • 因此,在大数据分析python自回归模型中,我们将讨论一个反映这种相关性的模型。–自回归模型。    什么是自回归模型?  自回归模型或简称为AR模型,仅依靠过去的时间值来预测当前值。这是一个线性模型,...
  • 自回归AR模型

    千次阅读 2020-04-28 14:38:27
    1. 自回归模型的定义 2. AR模型的状态空间形式 3. AR模型的求解 4. AR模型示例 5 Python对模型参数的求解
  • 代码功能介绍在《初探 岭回归 LASSO回归python 实现)》中有详细的介绍,文章中若有不正确的,也希望能够不吝赐教,相互学习。
  • 各类回归python实现

    2018-03-14 15:40:10
    各种类型回归python实现代码,附带数据,可运行,代码清晰完整,适用于python初学者
  • Python回归模型评估

    2021-02-04 18:09:29
    Python回归模型评估 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。 2 回归模型评估简介 对给给定的回归模型进行质量评估,常见概念见下...
  • python逻辑回归模型.zip

    2020-09-15 15:32:23
    python逻辑回归模型
  • 常用的几种机器学习算法回归模型python代码实现

    千次阅读 多人点赞 2018-07-11 09:35:59
    贝叶斯回归import numpy as np import pandas as pd from sklearn import datasets, linear_model from sklearn.cross_validation import train_test_split from sklearn import metrics from sklearn import ...
  • AR自回归模型matlab代码宏观经济和金融预测工具箱 MATLAB 中金融和宏观经济预测的代码库(Python 和 R 版本正在进行中) 联系维克多塞勒米 () 了解更多信息。 请使用署名。 支持的型号 AR自回归模型 ARDI:因子...
  • logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择...
  • Python进行时间序列预测的自回归模型 回归是一个时间序列模型,它使用以前时间步的观察值作为回归方程的输入,以预测下一个时间步的值。 这是一个非常简单的想法,可以对一系列时间序列问题进行准确的预测。 ...
  • 多元线性回归 及其Python实现

    万次阅读 多人点赞 2019-04-05 21:14:11
    多元线性回归 Python实现 多元线性回归求解过程 多元线性回归的形式: 目标函数: 将一个样本的向量化: 将所有样本的向量化: 向量化后的目标函数及求解结果: ps.上述多元线性回归的正规方程解问题是:事件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,321
精华内容 30,928
关键字:

自回归模型python

python 订阅