美文网首页
时间序列预测之:ARMA残差计算方法

时间序列预测之:ARMA残差计算方法

作者: 遥远的清平湾 | 来源:发表于2019-08-27 15:59 被阅读0次

    原创,转载注明出处!

    • 通过本教程你可以学会
      1、如何手动计算ARMA模型的残差
      2、如何手动计算ARMA模型的预测值
      3、不同残差、不同预测值计算方法的差异

    基本知识

    考虑以下平稳可逆的ARMA(p,q)模型:

    y_t = \phi_0 + \phi_1 y_{t-1} + \ldots + \phi_p y_{t-p} + \varepsilon_t + \theta_1 \varepsilon_{t-1} + \ldots + \theta_q \varepsilon_{t-q}

    \phi_0=0时,上面ARMA(p,q)为一中心化模型,即y_t的期望为0。当\phi_0 \neq 0时,可以通过变换转化为中心化模型:
    两边同时求均值,有

    E y_t = E\phi_0 + E\phi_1 y_{t-1} + \ldots + E\phi_p y_{t-p} +E \varepsilon_t + E\theta_1 \varepsilon_{t-1} + \ldots + E\theta_q \varepsilon_{t-q}

    因为\varepsilon_t为白噪声,所以有

    E\varepsilon_t = E\varepsilon_{t-1} = \ldots = E\varepsilon_{t-q} = 0

    又因为上述ARMA(p,q)模型为平稳的,所以有

    Ey_t = Ey_{t-1} = \ldots = Ey_{t-p}

    综合以上,有

    Ey_t = \frac{\phi_0}{1- \phi_1 - \ldots - \phi_{p}}

    x_t = y_t - \frac{\phi_0}{1- \phi_1 - \ldots - \phi_{p}},则可将原非中心化ARMA(p,q)模型转化为中心化模型:

    x_t = \phi_1 x_{t-1} + \ldots + \phi_p x_{t-p} + \varepsilon_t + \theta_1 \varepsilon_{t-1} + \ldots + \theta_q \varepsilon_{t-q}

    参数回归

    假设在时间序列预测之:ARMA方法arma_mod32模型即ARMA(3,2)的参数已经通过极大似然法求出,如下

                                  ARMA Model Results                              
    ==============================================================================
    Dep. Variable:                      y   No. Observations:                   89
    Model:                     ARMA(3, 2)   Log Likelihood                -804.123
    Method:                       css-mle   S.D. of innovations           2016.787
    Date:                Tue, 27 Aug 2019   AIC                           1622.245
    Time:                        15:02:58   BIC                           1639.666
    Sample:                    12-31-2002   HQIC                          1629.267
                             - 12-31-2090                                         
    ==============================================================================
                     coef    std err          z      P>|z|      [0.025      0.975]
    ------------------------------------------------------------------------------
    const         44.5054     46.003      0.967      0.336     -45.660     134.670
    ar.L1.y       -0.3571      0.162     -2.209      0.030      -0.674      -0.040
    ar.L2.y        0.2441      0.181      1.349      0.181      -0.111       0.599
    ar.L3.y       -0.0450      0.135     -0.334      0.739      -0.309       0.219
    ma.L1.y        0.0228      0.130      0.175      0.862      -0.233       0.278
    ma.L2.y       -0.8108      0.109     -7.439      0.000      -1.024      -0.597
                                        Roots                                    
    =============================================================================
                      Real          Imaginary           Modulus         Frequency
    -----------------------------------------------------------------------------
    AR.1           -1.3198           -0.0000j            1.3198           -0.5000
    AR.2            3.3714           -2.3381j            4.1028           -0.0965
    AR.3            3.3714           +2.3381j            4.1028            0.0965
    MA.1           -1.0966           +0.0000j            1.0966            0.5000
    MA.2            1.1247           +0.0000j            1.1247            0.0000
    -----------------------------------------------------------------------------
    

    那么根据公式
    \varepsilon_t = y_t - \phi_0 - \phi_1 y_{t-1} - \ldots - \phi_p y_{t-p} - \theta_1 \varepsilon_{t-1} - \ldots - \theta_q \varepsilon_{t-q}
    即可求出残差序列\varepsilon_t

    计算残差

    假设t从下标0开始,那么我们可以假设\varepsilon_{-1} = \varepsilon_{-2} = \ldots = \varepsilon_{-q} = 0,当然在一些方法中也可以假设成其他值。
    此外,我们还假设y_{-1} =y_{-2} = \ldots = y_{-p} = 0
    则基于上面假设,可以依次求出\varepsilon_{0} , \varepsilon_{1} , \ldots , \varepsilon_{t}

    • 计算结果如图所示(B列为y,E列为Python模型给出的残差,F列手动计算的残差)

    可以看出E列与F列略有区别,但是最终两列趋于一致。这是因为Python模型对\varepsilon_{-1} , \varepsilon_{-2} , \ldots , \varepsilon_{-q}y_{-1} ,y_{-2} , \ldots , y_{-p}的假设不同。

    批注 2019-08-27 162804.png
    批注 2019-08-27 163850.png
    • 计算公式


      批注 2019-08-27 162922.png
    • \phi_0的计算,其中const=E\ y_t

      批注 2019-08-27 163011.png

    对于in-sample的预测

    可直接通过公式{\hat y}_t = y_t - \varepsilon_t计算{\hat y}_t (此时\varepsilon_t已由上面过程求出,为已知),计算结果如下图I列所示。

    此外,也可以通过下面公式手动递归计算{\hat y}_t
    \hat y_t = \phi_0 + \phi_1 y_{t-1} + \ldots + \phi_p y_{t-p} + \varepsilon_t + \theta_1 \varepsilon_{t-1} + \ldots + \theta_q \varepsilon_{t-q}
    (此时\varepsilon_t为未知,设为0,且还假设\varepsilon_{-1} = \varepsilon_{-2} = \ldots = \varepsilon_{-q} = 0,假设y_{-1} =y_{-2} = \ldots = y_{-p} = 0。)
    结算结果如下图J列所示。

    可以看出I列与J列略有不同,但最终是趋于一致的。这是由于对\varepsilon_{-1} , \varepsilon_{-2} , \ldots , \varepsilon_{-q}y_{-1} ,y_{-2} , \ldots , y_{-p}的假设不同造成的。

    批注 2019-08-27 165529.png

    参考:

    Fitted values of ARMA model
    How to Make Manual Predictions for ARIMA Models with Python

    相关文章

      网友评论

          本文标题:时间序列预测之:ARMA残差计算方法

          本文链接:https://www.haomeiwen.com/subject/swueectx.html