知识库 > 数学方法 > 时间序列分析

ARCH波动率模型    

  • 在传统计量经济学模型中,干扰项的方差被假设为常数。但是许多经济时间序列呈现出波动的集聚性,在这种情况下假设方差为常数是不恰当的。我们可以使用Time_ARCH函数来检验回归残差是否服从同方差。

    定义:Time_ARCHTest(u:Array;Q:Integer,Alpha:Real):array
    说明:时间序列异方差的ARCH检验,原假设都为没有异方差,即不存在ARCH效应,Hypothesis为1表示接受原假设,0表示拒绝原假设
    检验统计量为:

    对方程进行估计,得到F统计量和T×R2统计量并进行检验;
    参数:
    u:残差序列,为一维数组类型
    q:滞后阶数,为整数类型
    alpha:1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格

    为了刻画这种异方差性,Engel(1982)提出了ARCH模型,即自回归条件异方差模型。该模型的一般形式如下:
    均值方程:

    方差方程:
    均值方程是外生变量向量。方差方程表示的条件方差由两部门构成,常数项和ARCH项。为保证条件异方差始终为正,要求方差方程中非负,为保证自回归的稳定性,必须限制
    GARCH 模型:ARCH(p)模型解决了时间序列中的异方差问题,但在实际应用中常出现的条件方差依赖于很多期之前的变化量,因此必须估计很多个参数;另外,对大多数的q,无限定约束的估计常常会违背非负的限定条件。为此,Bollerslev(1986)扩展了Engle的原始模型,提出了广义的自回归条件异方差GARCH模型,在方差方程中用一个或两个的滞后项代替很多个的滞后值。一个高阶的ARCH模型可以由一个更为简洁、更易识别估算的低阶GARCH 模型来表达。GARCH(p,q)模型的方差方程的一般形式如下:

    方程右边的是ARCH项,是GARCH项,q是ARCH项的阶数,p是GARCH项的阶数,为保证方差为正,要求方差方程所有系数为正。
    非对称的 ARCH 族模型:在金融时间序列的研究中经常会发现这种现象:不同信息的冲击常常表现为非对称的效应,即好消息和坏消息的冲击对波动性的影响程度不同。就许多股票而言,当前收益和未来波动之间有很强的负相关,收益增加时波动性减小,收益减小时波动性增加,这一趋势通常被称为杠杆效应。TARCH或GJR模型由Zakoian和Glosten,Jafanathan,Runkle(1994)提出,该模型中的方差方程如下:

    其中 是一个虚拟变量,当,其余情况为0,为非对称项,只要,就存在非对称效应:好消息会有倍的冲击,而坏消息会有倍的冲击。如果系数显著不为0,我们就可以得到结论:数据包含非对称效应(门限效应)。如果,负冲击对波动性的影响大于正冲击,非对称效应的主要效果是使得波动加大,存在扛杆效应;如果,则非对称效应的主要效果是使得波动减小。
    指数GARCH模型或EGARCH模型是由Nelson(1991)提出的,采取条件方差对数的形式,方差方程形式如下:

    等式左边是条件方差的对数,这意味着杠杆效应影响是指数而不是二次的,所以方差的预测一定是非负,在估计时对系数无需增加非负的限制,只要,冲击的影响就存在着非对称性。只要,出现利好消息时,会带来的冲击。而出现利空消息时,会带来的冲击。
    GARCH-M模型:我们在GARCH模型的均值的末端加上一个条件异方差,就可以得到GARCH-M模型,该模型的方差方程和GARCH的方差方程是一样的。

    这样模型就可以衡量模型的波动对被解释变量的影响了。

    定义:GarchFit(ModelSpec:Array,y:array,x:Array,e0:Array,s0:Array,y0:Array);
    说明:广义自回归条件异方差模型,采用极大似然估计方法估计模型的参数
    参数:
    ModelSpec:模型设置项,为数据表类型,参考:表
    y:原始数据,一维数字数组
    x:均值方程回归外生变量,二维数字数组,可缺省
    e0:自回归方程残差序列的缺省项,一维数字数组,可缺省
    s0:条件方程方程序列的缺省项,一维数字数组,可缺省
    y0:原始序列的缺省项,一维数字数组,可缺省
    返回结果:
    Ret["C"]:均值方程常数项
    Ret["AR"]:均值方程AR项
    Ret["MA"]:均值方程MA项
    Ret["Regress"]:均值方程外生变量回归项
    Ret["InMean"]:均值方程条件方差项,当选择模型为“GARCH-M”时存在
    Ret["K"]:条件方差方程常数项
    Ret["GARCH"]:条件方差方程GARCH项
    Ret["ARCH"]:条件方差方程ARCH项
    Ret["Leverage"]:条件方差方程杠杆项,当选择模型为“GJR”或者“EGARCH”时存在
    Ret["LLF"]:残差的极大似然函数值
    Ret["e"]:残差序列
    Ret["h"]:条件方差序列

    输入参数ModelSpec字段
    字段含义类型缺省值
    VarianceModel模型类别(Garch,GARCH-M,GJR,EGARCH)VarcharGARCH
    Distribution数据分布类型(Gaussian或者T)VarcharGaussian
    RAR项个数Int0
    MMA项个数Int0
    PGARCH项个数Int1
    QARCH项个数Int1
    DoF自由度(T分布时有效)Int程序计算
    C均值方程常数项初始值(NaN表示不含常数)Real0
    ARAR项初始值Arrayarray()
    MAMA项初始值Arrayarray()
    InMean均值方程是否含条件方差方程BoolFALSE
    Regress回归项初始值Arrayarray()
    K条件方差方程常数项初始值Real程序计算
    GARCHGARCH项初始值Arrayarray()
    ARCHARCH项初始值Arrayarray()
    LeverageLeverage项项初始值Arrayarray()
    MaxFunEvals调用目标次数Int100*变量个数
    MaxIter最大迭代次数Int400
    TolFun目标精度Real1.00E-06
    TolCon约束条件精度Real1.00E-06
    TolX变量精度Real1.00E-06

    以1995年1月至2000年8月日元兑换美元汇率值序列(JPY,如图8-9)为例介绍怎样用天软来进行ARCH建模(序列共1427个值)(参见平台下的Garch_Demo函数)。


    图8-9日元兑换美元汇率值(JPY)序列        图8-10 DJPY时间序列
    JPY序列显然是一个非平稳时间序列,对JPY进行差分,DJPY表示收益,见图8-10,因为DJPY是一个平稳时间序列,应该使用DJPY建立时间序列模型。按照ARMA模型中讲的那样对DJPY拟合ARMA模型,根据自相关系数以及偏自相关系数,AIC准则等,我们最终将模型定为AR(3)模型。

    dJPY := time_diff(JPY);
    m := mean(dJPY);
    dJPY := dJPY-m;
    ret := ARMA(dJPY,3,0);

    得到的结果是:



    残差图
    该模型的残差如图8-11所示,我们怀疑残差含有异方差,使用Time_ARCHTest函数检验。
    Time_ARCHTest(ret["e"],1,0.05);

    残差异方差检验
    拒绝原假设,认为模型含有异方差,建立ARCH模型,首先建立ARCH(7)模型(尝试多次,最大滞后选为7为宜)。
      
    ARCH模型结果       异方差估计情况

    modelspec := array(
        ("R":3,
        "M":0,
        "AR":NIL,
        "MA":NIL,
        "Regress":NIL,
        "VarianceModel":"GARCH",
        "C":nan,
        "P":0,
        "Q":7,
        "GARCH":array(),
        "ARCH":array(),
        "Leverage":NIL));
    t := garchfit(ModelSpec,dJPY);


    得到的异方差如图8-14。ARCH模型中的的滞后项太多,应该尝试建立GARCH(1,1)模型:

    modelspec := array(
        ("R":3,
        "M":0,
        "AR":NIL,
        "MA":NIL,
        "Regress":NIL,
        "VarianceModel":"GARCH",
        "C":nan,
        "P":1,
        "Q":1,
        "GARCH":array(),
        "ARCH":array(),
        "Leverage":NIL));
    t := garchfit(ModelSpec,dJPY);


       
    GARCH模型结果        方差估计情况