美文网首页
时间序列预测之: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残差计算方法

    原创,转载注明出处! 通过本教程你可以学会1、如何手动计算ARMA模型的残差2、如何手动计算ARMA模型的预测值3...

  • 时间序列预测之:ARMA方法

    原创,转载注明出处! 本教程目的:提供一个ARMA方法预测时间序列的demo,可直接运行,为初学者提供一个直观的认...

  • 时间序列ARMA

    我这里补充一篇之前我做的时间序列部分的工作记录,留个纪念怕忘。 这里用的数据说我们公司自己的数据,分析过程是随着统...

  • 基于时间序列的ARMA模型预测

    https://www.jianshu.com/p/cced6617b423

  • ARIMA模型——MATLAB实现

    arma() 功能:估计ARMA时间序列模型参数格式:m = armax(data, orders);m = ar...

  • 2020 时序分析(19) AR 模型

    对于平稳时间的序列,可以采用 AR 和 MA 模型进行预测,他们组合起来就是 ARMA 模型。先说 AR 模型吧,...

  • 11.21 interview

    如何评价facebook开源的prophet时间序列预测工具? 时间序列分析 时间序列预测之--ARIMA模型 通...

  • 因素分解及 Prophet 工具使用

    ARMA 和 ARIMA是 对平稳和非平稳时间序列建模方法,另外Facebook有开源的时间序列 prophet。...

  • 时间序列笔记-残差分析

    笔记说明 在datacamp网站上学习“Time Series with R ”track“Forecasting...

  • 时间序列-回归遇上ARMA

    如果将回归模型和时间序列模型结合在一起,建模质量会更高,会得到比其中任何一种方法都好的预测结果。 例子 参考资料:...

网友评论

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

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