EViews教程 您所在的位置:网站首页 用eviews做arch模型步骤 EViews教程

EViews教程

2024-05-24 10:34| 来源: 网络整理| 查看: 265

GARCH模型‿

2024 | 3477 | 2 | 2

GARCH(Generalized Autoregressive Conditional Heteroskedasticity)模型是金融领域内用得最多的非线性统计模型,它的一个主要应用是预测金融资产收益率的波动率(volatility),这对期权定价、风险管理等金融实务极为重要。当然,GARCH模型还有其他各种应用,有些应用甚至是在金融、经济领域之外的。

一个完整的GARCH模型包含均值方程(mean equation)和方差方程(variance equation)两部分,例如,$$y_t = \theta_0 + \theta_1x_{t} + u_t \tag{均值方程}$$ $$\sigma_t^2 = \omega + \alpha u_{t-1}^2 + \beta \sigma_{t-1}^2 \tag{方差方程}$$ 其中,\(\sigma_t^2\)是误差\(u_t\)的条件方差,\(\sigma_t\)即是所谓的波动率。均值方程一般就是前面介绍过的线性回归模型或自回归模型,所以,GARCH模型的精髓主要在方差方程。不同的方差方程,形成了不同的GARCH类模型。

GARCH模型

GARCH(p,q)模型可以表达为 $$\sigma_t^2 = \omega + \sum_{i=1}^p\alpha_i u_{t-i}^2 + \sum_{i=1}^q \beta_i \sigma_{t-i}^2 $$ 其中,\(u_{t-i}^2\) 被称为ARCH项,\(\sigma_{t-i}^2\)被称为GARCH项。这个模型被记为GARCH(p,q)而不是GARCH(q,p)是因为它实际上可以写为$$u_t^2 = \omega + \sum_{i=1}^p\alpha_i u_{t-i}^2 + \sum_{i=1}^q \beta_i \sigma_{t-i}^2 + e_t$$一个有点像ARMA(p,q)模型的形式。GARCH(p,0)也即是所谓的ARCH(p)模型。

估计GARCH类模型需要用到arch命令。打开EViews安装目录下的Example Files\EV12 Manual Data\Chapter 29 – ARCH and GARCH Estimation\stocks.wf1,假设我们要用其中的spx(标普500指数)的对数收益率估计一个均值方程为AR(1)模型的GARCH(1,2)模型,可以使用下面的代码:

smpl 10/01/1993 10/01/2000 '设定估计样本 equation eq1 eq1.arch(1,2) dlog(spx) c ar(1) 'GARCH(1,2)

arch后直接跟的是均值方程。估计的结果如下图所示:

输出的结果和使用ls命令的情形差不多,只不过多了方差方程的部分。估计完模型后,仍可以用wald命令实施各种统计检验。

在实际应用中,GARCH(1,1)是用得最多的GARCH模型,因此,arch命令默认估计GARCH(1,1)模型,所以,下面的两行代码是等价的:

eq1.arch(1,1) dlog(spx) c ar(1) 'GARCH(1,1) eq1.arch dlog(spx) c ar(1) 'GARCH(1,1)

在方差方程里,除了ARCH项和GARCH项,我们还可以加入其他变量。在估计模型的代码之后加上@,然后列出想要加入的变量就可以了,例如,

eq1.arch(1,1) dlog(spx) c ar(1) @ @lag(dlog(vix),1)

这行代码在方差方程里加入了vix的对数差分的一阶滞后。这里用到了函数@lag(x,n),它表示x的n阶滞后。

估计GARCH模型的鼠标操作是,选中workfile后点击主菜单的Quick/Estimate Equation,或先建一个空的equation对象,然后再点击equation对象窗口上方的Estimate按钮,两种方式都会弹出估计模型的窗口,接下来在Method处选ARCH就会出现如下对话框:

其中,Specification下的Mean equation部分用来设置均值方程;ARCH-M涉及ARCH-M模型(后面会介绍)的设置;Model可选择不同的GARCH类模型(后面会介绍);ARCH后的数字指GARCH(p,q)中的p;GARCH后的数字指GARCH(p,q)中的q;Threshold order后的数字指TARCH模型(后面会介绍)的另一个滞后阶数(后面会介绍);Restrictions用来选择IGARCH模型(后面会介绍);Variance regressors设置方差方程中纳入的其他变量;Error distribution设置误差的分布。Options下可以设置实施最大似然估计的最优化方法、参数估计量的协方差矩阵的计算方式等内容。设置好一切后,点确定就能估计模型了。

ARCH检验

设立方差方程的理念是认为误差的条件方差与过去的信息有关,这对还是不对,我们可以在GARCH模型估计完后,通过检查ARCH项和GARCH项的显著性来判断。这是一种事后的角度:先假设误差的条件方差与过去的信息有关,然后再检验这个假设有没有问题。

事实上,我们也可以从事前的角度来判断设立方差方程有没有必要:先假设误差的条件方差与过去的信息无关,然后再检验这个假设有没有问题。ARCH检验即是这样一种事前检验,它能帮助我们快速判断对一个均值方程,有无再设一个方差方程的必要。

ARCH检验的想法是,如果原假设没有问题,均值方程的残差的平方\(\hat{u}_t^2\)应该不受它的过去影响。用\(\hat{u}_t^2\)建立一个p阶自回归模型,然后检验所有滞后项的系数的联合显著性,这就是ARCH检验。在EViews中,估计完均值方程后,用archtest命令就能实施ARCH检验了:

eq1.ls(arma=cls,cov=white) dlog(spx) c ar(1) 'OLS估计均值方程 eq1.archtest(3) 'ARCH检验,p=3 eq1.archtest 'ARCH检验,默认p=1

下图为p=1时ARCH检验的主要结果:

archtest命令会报告两个检验统计量:F-statistic和Obs*R-squared,第二至四列依次是它们的数值、服从的分布和对应检验的p值。

从建模逻辑上讲,在建立一个GARCH模型之前,应先进行ARCH检验,只有拒绝了ARCH检验的原假设,才考虑进一步设立一个方差方程。但是,如果分析的数据是金融资产的收益率,ARCH检验一般不需要做,可以直接设方差方程,这是因为成千上万的研究已经表明,收益率的条件方差确实与过去的信息相关。

ARCH检验对应的鼠标模式是在equation对象窗口左上选View/Residual Diagnostics/Heteroskedasticity Tests,然后Test type选ARCH,设好滞后阶数后确定。

分布假设

GARCH模型是通过最大似然法估计的,因此,均值方程里的误差的分布需要提前设定好。EViews默认会假设误差服从正态分布,此外,也可以选择假设误差服从t分布或GED(Generailized Error Distribution,广义误差分布)。使用后两种分布主要是考虑到有些收益率序列的分布是尖峰厚尾的,当t分布的自由度比较小时或GED的尾部参数小于2时,这两种分布都是尖峰厚尾的。

使用t分布或GED只需对arch命令加上可选参数tdist或ged,例如:

eq1.arch(1,1,tdist) dlog(spx) c ar(1) 'GARCH(1,1)-t eq1.arch(1,1,ged) dlog(spx) c ar(1) 'GARCH(1,1)-GED

注意,在上面的代码中,t分布的自由度以及GED的尾部参数会被视为未知参数,因此,输出的结果中会多出T-DIST.DOF或GED PARAMETER,它们分别对应两个参数的最大似然估计结果。我们也可直接令这两个参数等于固定的数值,例如:

eq1.arch(1,1,tdist=5) dlog(spx) c ar(1) 'GARCH(1,1)-t,自由度为5 eq1.arch(1,1,ged=1.5) dlog(spx) c ar(1) 'GARCH(1,1)-GED,尾部参数为1.5

理论上讲,通过数据估计t分布的自由度或GED的尾部参数是比主观设定它们的数值要好的,但是,把它们视为未知参数会加剧模型的非线性程度,某些情况下,最大似然估计无法达到收敛。此时,一种解决方案是尝试其他的最优化方法或步长选择方式,或增加迭代次数,这可以通过arch命令的三个可选参数optmethod、optstep和maxit实现。这和[回归模型]一讲中介绍的估计非线性回归模型的情形是一模一样的。optmethod可以等于bfgs(默认)、opg、newton或legacy;optstep可以等于marquardt(默认)、dogleg或linesearch;maxit的默认值是500,可令其等于一个更大的数。

如果上述办法仍无法使收敛达成,还可以考虑另一种解决方案:把t分布的自由度设为4~10中的一些值,或把GED的尾部参数设为0.5~1.8中的一些值,估计对应的若干个模型后比较它们的似然值,然后挑选出似然值最大的模型。

如果我们的目标仅是一致地估计模型参数以及做相关的统计检验,即使是对尖峰厚尾的收益率序列,使用正态分布假设也是可以达成这一目标的,这就是所谓的QMLE(Quasi MLE):基于错误的似然函数也能一致地估计模型参数并做正确的统计检验。对GARCH模型做QMLE,只需对arch命令加上cov=bollerslev:

eq1.arch(1,1,cov=bollerslev) dlog(spx) c ar(1) 模型诊断

估计完GARCH模型后,诊断检验是必不可少的。如果均值方程是一个ARMA模型,误差的白噪声检验是需要做的。我们仍可通过correl命令实施Ljung–Box Q检验:

eq1.correl(10) 'eq1是GARCH模型

注意,对GARCH模型,用于诊断检验的残差都是标准化残差\(\hat{u}_t /\hat{\sigma}_t\),而不是原始的残差\(\hat{u}_t\)。

另一个必做的诊断检验是检验方差方程的设定有没有问题。如果没有问题,我们应该预期\(u_t^2 /\sigma_t^2\)不会受它的过去影响。基于这一想法,我们可以使用两种方法进行诊断检验。第一种是利用标准化残差的平方做Ljung–Box Q检验,这可以通过correlsq命令实现:

eq1.correlsq(10) 'eq1是GARCH模型

第二种方法是利用标准化残差做ARCH检验,仍是用archtest命令:

eq1.archtest(lags=2) 'eq1是GARCH模型

如果Q检验或ARCH检验不拒绝原假设,说明设定的方差方程是合理的。

如果Q检验或ARCH检验的结果显示有必要设方差方程,是不是说GARCH模型的方差方程就是合理的呢?答案是否定的。因此,估计完GARCH模型或其他你即将看到的GARCH类模型后,还需要进一步检验模型的方差方程是否设得合理。在EViews里,可以通过Sign-Bias检验来实现这一目标。

Sign-Bias检验的基本想法是,如果方差方程设得合理,那么前一期的误差的方向(即正负号)以及大小,都不会影响当前期的方差。这其实和金融里很重要的概念杠杆效应(leverage effect)或不对称效应有关,这一效应指对很多金融资产,等量的坏消息(bad news,模型中指负的误差)比等量的好消息(good news,模型中指正的误差)对资产收益率的波动率的贡献要大。实施Sign-Bias检验可通过signbias命令实现:

eq1.arch dlog(spx) c ar(1) 'GARCH(1,1) eq1.signbias '实施Sign-Bias检验

检验结果如下:

其中,Sign-Bias检验消息符号的影响,Negative-Bias检验坏消息的影响,Positive-Bias检验好消息的影响,Joint-Bias是对前三种影响的联和检验,这是我们最关注的检验。如果该检验的p值很小(如图中的0.0007),则拒绝原假设。EViews里显示的原假设是标准化残差没有杠杆效应,这即是假设方差方程设得没有问题,所以,图中的结果显示对当前的数据,GARCH模型的方差方程可能是有问题的。

上述检验都可通过鼠标选择equation对象窗口左上的View/Residual Diagnostics实现。

预测

在EViews中,基于GARCH模型的预测和基于ARMA模型的预测,代码实现是完全一样的,基于GARCH模型的预测只不过是多了一个方差方程,它可以帮我们预测未来的方差。我们需要做的,就是在输入前面学过的实施预测的代码后,加上@garch,然后在其后设一个保存预测的方差的变量名就行了,例如:

smpl 10/01/1993 10/01/2000 '设定估计样本 eq1.arch(1,1) dlog(spx) c ar(1) smpl 10/02/2000 10/17/2000 '设定预测的样本期 eq1.forecast(d, f=na) dlspxf @garch vf '预测的方差存入序列对象vf

注意,由于方差\(\sigma^2\)是一个无法观测的变量,我们虽然能用模型进行预测,但是,我们是无法评估模型的预测精度的。

命令复习 (.)arch:建立GARCH模型并估计 .archtest:实施ARCH检验 .correlsq(10):显示标准化残差的平方的相关图和Q统计量 .signbias:实施Sign-Bias检验

[注] ( . )命令表示命令可单独使用,也可跟在对象后使用;.命令表示命令只能跟在对象后使用。

练习 重复上面的操作并回答问题:根据诊断检验的结果,上面设立的GARCH(1,1)模型是合理的吗? 读后有收获欢迎打赏站长吃支可爱多😂 点赞 WeChat sina 豆瓣 QQ空间 Facebook Twitter 扫一扫,点右上角⋯分享 协整回归模型 GARCH类模型 2条留言  

  Haoran    发表于2024-05-22 15:48

老师您好,再garch方差方程中加入虚拟变量,是在文章中的:在估计模型的代码之后加上@,然后列出想要加入的变量就可以了,例如,eq1.arch(1,1) dlog(spx) c ar(1) @ @lag(dlog(vix),1)。 将@lag(dlog(vix),1)修改为虚拟变量吗

回复

  卯光宇    回复于2024-05-23 00:23

可以加,只要是可观测的变量就行。

回复     给站长留言    取消回复   我要留言


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有