R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析

本文将分析工业指数(DJIA)。工业指数(DIJA)是一个股市指数,表明30家大型上市公司的价值。

由Kaizong Ye,Sherry Deng撰写

工业指数(DIJA)的价值基于每个组成公司的每股股票价格之和。

本文将尝试回答的主要问题是:

  • 这些年来收益率和交易量如何变化?
  • 这些年来,收益率和交易量的波动如何变化?
  • 我们如何建模收益率波动?
  • 我们如何模拟交易量的波动?
×

什么是ARMA(p,q)模型?


AR(Autoregressive Model)模型即自回归模型,其描述了历史值对当前值的影响。举个实际例子,比如CRSP价值加权指数的月收益率就具有统计上显著的滞后期为1的自相关系数,这个事实说明我们是可以用上一期的CRSP月收益率来预测当期的月收益率的。这也是AR模型的主要作用,用历史值来预测未来,默认历史会重演。其具体表现形式可以表示为:

[公式]

MA(Moving Average Model)模型即移动平均模型,其认为当前值是自回归模型误差项的累和。关于MA模型的理解,我们既可以将其看成是白噪声序列的简单推广,也可以将其理解为参数受到某种约束的无穷阶AR模型,这个具体推导过程详见教程或相关文献。但MA模型有一个特殊的性质就是其总是弱平稳的,主要在于其表现形式是白噪声序列的有限线性组合,从而其前两阶矩不随时间而变化。MA模型可以表示为:

[公式]

在介绍完这两种基本的模型后,我们再回到初始介绍的ARMA(p,q)模型上来。 ARMA(Autoregressive moving average model)即自回归移动平均模型。既然AR和MA模型能够刻画绝大部分的时间序列的动态过程,为什么要引入ARMA模型呢?ARMA模型的引入主要是为了解决有些需要高阶的AR或MA模型才能充分描述的动态数据结构,起到了一个类似‘降维’的作用,减少了参数估计量,降低了参数估计难度。结合上面的两个表达式,我们很容易就能够想到ARMA(p,q)的模型表现形式了:

[公式]

我们这里具体地了解一下其各个参数的含义:如果[公式]代表资产的t期对数收益率,则[公式]代表滞后i 期的收益率,而[公式]则表示滞后j 期的扰动项,但扰动项本身是一个均值为0,方差为[公式]的白噪声序列。[公式][公式]则分别代表相应变量对应的系数。这些含义也适用于接下来的波动率模型,所以下文不再赘述。

这里澄清一点:对金融中的资产收益率进行建模其实是很少用到ARMA模型的!当然这在前面也提到了,但并不妨碍我们的思路继续进行。

什么是GARCH(1,1)模型?

虽然要多一点真诚,少一些套路,但这里请原谅我要继续按套路出牌了。<邪恶脸>根据前面介绍ARMA的套路,在介绍GARCH之前,我们先来简单了解一下其前身ARCH模型。 ARCH(Autoregressive conditional heteroscedasticity model)即自回归条件异方差模型,其首次出现在Robert-Engle教授于1982年发表在《Econometrica》期刊上的一篇论文中,主要用来解决时间序列的波动性问题。那为什么需要对波动率进行建模呢?概括起来主要有以下几个方面:1.波动率建模提供了一个简单的方法来计算风险管理中一个金融头寸的风险值;2.时间序列的波动率建模能够改进参数估计的有效性和区间预测的精准度;3.市场的波动率本身也可以构建成一个交易工具,用来对冲风险,比如CBOE构建的VIX(波动率指数)就有相应的交易品种在交易所交易。讲到这里,我们来看看ARCH模型的具体表现形式:

[公式]

根据ARCH模型的表现形式,我们可以知道其一些特点,简单概括一下,因为后面建模会涉及到对性质的利用。ARCH模型分布的尾部相比于正态分布尾部更厚,即其‘扰动’比高斯白噪声序列更容易产生异常值,这与实证研究中资产收益率表现出的异常值多于正态分布一致,而且ARCH模型能够很好地刻画波动率聚集效应。但其也存在着一些缺点,比如说,ARCH模型假定正的扰动和负的扰动对波动率有相同的影响,因为根据其表达式,我们知道波动率依赖于扰动项的平方。但实证研究中,金融资产价格对正的和负的扰动反应是不同的。同时ARCH模型对参数的限制比较强,尤其是对高阶的ARCH模型,参数约束会更加复杂,这导致ARCH模型不能很好地刻画超额峰度,最后ARCH模型给出的波动率预测值会偏高,因为它对收益率序列大的孤立的‘扰动’反应缓慢。

啰嗦了这么多,那到底什么是GARCH模型,其跟我前文介绍的内容又有什么关系嘛?我们知道每一个新的模型的提出都是为了解决之前模型的一些缺点,GARCH也不例外。在ARCH模型中,其假设时间序列的变量的波动幅度(方差)是一个常数,而在实证研究中,学者们早就发现收益率的波动幅度是随时间变化的,并非是固定的值。因此Bollerslev在1986年提出了GARCH(Generalized autoregressive conditional heteroscedasticity model) 模型,即广义自回归条件异方差模型,其在方差的影响因素中增加了方差的滞后项。GARCH模型对ARCH模型的另一大改进是使得高阶ARCH模型退出了历史舞台,因为高阶的ARCH对于波动率建模参数约束太多,并且难以估计,就是上面提到的第二个缺点,这其实又与前面的 ARMA模型相互呼应了。然而GARCH依然没有解决杠杆效应的问题。当然GARCH的衍生模型很好地解决了,不过这是后话了。现在我们先来看一下GARCH(p, q)模型的表现形式:

[公式]

是不是有一种似曾相识的感觉?是的,没错,GARCH模型可以看作是一个ARMA(p,q)模型的‘变脸’,其将因变量由收益率变为了波动率的平方。至于GARCH的性质大家可以对照上文介绍的ARCH来理解,改进部分我也在前面提到了。这里补充一点,关于波动率模型上面都只是给出了波动率的表达式,其实其还有均值方程以及扰动项方程,完整形式应如下所示:

[公式]



任何时间序列都由一个均值方程和一个方差方程所组成,普通的ARMA我们忽略了方差方程,因为残差是一个白噪声,没有任何信息可以挖掘了。所以一般只写一个ARMA。而GARCH模型,我们平时都假设均值方程是一个常数,而残差有ARCH效应,所以就focus在残差上,均值略去不写。

所谓的ARMA-GARCH就是分别对均值和方差建模。即均值满足ARMA过程,残差满足GARCH过程的一个随机过程。

总结:
ARMA model: x~ARMA(p,q)+e, where e is a white noise
GARCH model: x~c+e, where c is a constant, e^2 follows a GARCH(p,q) process
ARMA-GARCH model: x~ARMA(p,q)+e, where e^2 follows a GARCH(m,n) process


为此,本文按以下内容划分:

第1部分: 获取每日和每周对数收益的 数据,摘要和图
第2部分:获取每日交易量及其对数比率的数据,摘要和图
第3部分: 每日对数收益率分析和GARCH模型定义
第4部分: 每日交易量分析和GARCH模型定义

获取数据

利用quantmod软件包中提供的getSymbols()函数,我们可以获得2007年至2018年底的工业平均指数。

让我们看一下DJI xts对象,它提供了六个时间序列,我们可以看到。


热门课程

R语言数据分析挖掘必知必会

面对扑面而来的数据浪潮,包含Google、Facebook等国际企业,都已采用R语言进行数据分析

探索课程

更准确地说,我们有可用的OHLC(开盘,高,低,收盘)指数值,调整后的收盘价和交易量。在这里,我们可以看到生成的相应图表。


我们在此分析调整后的收盘价。

简单对数收益率

简单的收益定义为:

对数收益率定义为:

我们计算对数收益率

让我们看看。

给出了下面的图。

可以看到波动率的急剧上升和下降。第3部分将对此进行深入验证。

辅助函数

我们需要一些辅助函数来简化一些基本的数据转换,摘要和绘图。

1.从xts转换为带有year and value列的数据框。这样就可以进行年度总结和绘制。

2.摘要统计信息,用于存储为数据框列的数据。

3.返回关联的列名。

4.基于年的面板箱线图。

5.密度图,以年份为基准。

6.基于年份的QQ图。

7. Shapiro检验


R语言ARMA-GARCH-COPULA模型和金融时间序列案例

阅读文章


每日对数收益率探索性分析

我们将原始的时间序列转换为具有年和值列的数据框。这样可以按年简化绘图和摘要。

基本统计摘要

给出了基本统计摘要。

在下文中,我们对上述一些相关指标进行了具体评论。


随时关注您喜欢的主题


平均值

每日对数收益率具有正平均值的年份是:

按升序排列。

中位数

正中位数是:

以升序排列。

偏度

偏度(Skewness)可以用来度量随机变量概率分布的不对称性。

公式:

其中  是均值,  是标准差。

几何意义:

偏度的取值范围为(-∞,+∞)

当偏度<0时,概率分布图左偏(也叫负偏分布,其偏度<0)。

当偏度=0时,表示数据相对均匀的分布在平均值两侧,不一定是绝对的对称分布。

当偏度>0时,概率分布图右偏(也叫正偏分布,其偏度>0)。

例如上图中,左图形状左偏,右图形状右偏。

每日对数收益出现正偏的年份是:

按升序返回对数偏度。

 

峰度

峰度(Kurtosis)可以用来度量随机变量概率分布的陡峭程度。

公式:

其中  是均值,  是标准差。

几何意义:

峰度的取值范围为[1,+∞),完全服从正态分布的数据的峰度值为 3,峰度值越大,概率分布图越高尖,峰度值越小,越矮胖。

例如上图中,左图是标准正太分布,峰度=3,右图的峰度=4,可以看到右图比左图更高尖。

通常我们将峰度值减去3,也被称为超值峰度(Excess Kurtosis),这样正态分布的峰度值等于0,当峰度值>0,则表示该数据分布与正态分布相比较为高尖,当峰度值<0,则表示该数据分布与正态分布相比较为矮胖。

每日对数收益出现超值峰度的年份是:

按升序返回超值峰度。

2018年的峰度最接近2008年。

箱形图

我们可以看到2008年出现了最极端的值。从2009年开始,除了2011年和2015年以外,其他所有值的范围都变窄了。但是,与2017年和2018年相比,产生极端值的趋势明显改善。

密度图

2007年具有显着的负偏。2008年的特点是平坦。2017年的峰值与2018年的平坦度和左偏一致。

shapiro检验

正态的零假设在2007-2018年的所有年份均被拒绝。

每周对数收益率探索性分析

可以从每日对数收益率开始计算每周对数收益率。让我们假设分析第{t-4,t-3,t-2,t-1,t}天的交易周,并知道第t-5天(前一周的最后一天)的收盘价。我们将每周的对数收益率定义为:

可以写为:

因此,每周对数收益率是应用于交易周窗口的每日对数收益率之和。

我们来看看每周的对数收益率。

该图显示波动率急剧上升和下降。我们将原始时间序列数据转换为数据框。

基本统计摘要

在下文中,我们对上述一些相关指标进行了具体评论。

平均值

每周对数收益呈正平均值的年份是:

所有平均值按升序排列。

中位数

中位数是:

所有中值按升序排列。

偏度

出现正偏的年份是:

所有偏度按升序排列。

峰度

出现正峰度的年份是:

峰度值都按升序排列。

2008年也是每周峰度最高的年份。但是,在这种情况下,2017年的峰度为负,而2016年的峰度为第二。

箱形图

密度图

shapiro检验

零假设在2007、2008、2016年被拒绝。

QQ图

在2008年尤其明显地违背正态分布的情况。

交易量探索性分析

在这一部分中,本文将分析道琼斯工业平均指数(DJIA)的交易量。

获取数据

每日量探索性分析

我们绘制每日交易量。

值得注意的是,2017年初的水平跃升,我们将在第4部分中进行研究。我们将时间序列数据和时间轴索引转换为数据框。

基本统计摘要

在下文中,我们对上面显示的一些相关指标进行了评论。

平均值

每日交易量具有正平均值的年份是:

所有每日交易量均值按升序排列。

中位数

每日交易量中位数为正的年份是:

所有每日成交量中值均按升序排列。

偏度

每日交易量出现正偏的年份是:

每日交易量偏度值均按升序排列。

峰度

有正峰度的年份是:

按升序排列。

箱形图

从2010年开始交易量开始下降,2017年出现了显着增长。2018年的交易量甚至超过了2017年和其他年份。

密度图

shapiro检验

正态分布的零假设被拒绝。

QQ图

QQplots直观地确认了每日交易量分布的非正态情况。

每日交易量对数比率探索性分析

与对数收益类似,我们可以将交易量对数比率定义为

vt:= ln(Vt/Vt−1)
我们可以通过PerformanceAnalytics包中的CalculateReturns对其进行计算并将其绘制出来。

将交易量对数比率时间序列数据和时间轴索引映射到数据框。

基本统计摘要

在下文中,我们对一些相关的上述指标进行了具体评论。

平均值

每日交易量对数比率具有正平均值的年份是:

所有每日成交量比率的平均值均按升序排列。

中位数

每日交易量对数比率具有正中位数的年份是:

道琼斯所有每日成交量比率的中位数均按升序排列。

偏度

每日成交量比率具有正偏的年份是:

所有每日成交量比率的平均值均按升序排列。

峰度

有正峰度的年份是:

均按升序排列。

箱形图

可以在2011、2014和2016年发现正的极端值。在2007、2011、2012、2014年可以发现负的极端值。

密度图

shapiro检验

基于报告的p值,我们可以拒绝所有正态分布的零假设。

QQ图

在所有报告的年份都可以发现偏离正态状态。

对数收益率GARCH模型

我将为工业平均指数(DJIA)的每日对数收益率建立一个ARMA-GARCH模型。

这是工业平均指数每日对数收益的图。

离群值检测

Performance Analytics程序包中的Return.clean函数能够清除异常值。在下面,我们将原始时间序列与调整离群值后的进行比较。

作为对波动率评估的更为保守的方法,本文将以原始时间序列进行分析。

相关图

以下是自相关和偏相关图。

上面的相关图表明p和q> 0的一些ARMA(p,q)模型。将在本分析的该范围内对此进行验证。

单位根检验

我们运行Augmented Dickey-Fuller检验。

基于报告的检验统计数据与临界值的比较,我们拒绝单位根存在的零假设。

ARMA模型

现在,我们确定时间序列的ARMA结构,以便对结果残差进行ARCH效应检验。ACF和PACF系数拖尾表明存在ARMA(2,2)。我们利用auto.arima()函数开始构建。

建议使用ARMA(2,4)模型。但是,ma3系数在统计上并不显着,进一步通过以下方法验证:

因此,我们将MA阶q <= 2作为约束。

现在,所有系数都具有统计意义。

使用ARMA(2,1)和ARMA(1,2)进行的进一步验证得出的AIC值高于ARMA(2,2)。因此,ARMA(2,2)是更可取的。这是结果。

所有系数均具有统计学意义。

所有系数均具有统计学意义。此外,我们使用TSA软件包报告中的eacf()函数。

以“ O”为顶点的左上三角形位于(p,q)= {(1,2 ,,(2,2),(1,3)}}内,它表示一组潜在候选对象(p,q)值。ARMA(1,2)模型已经过验证。ARMA(2,2)已经是候选模型。让我们验证ARMA(1,3)。

只有一个系数具有统计意义。

结论是,我们选择ARMA(2,2)作为均值模型。现在,我们可以继续进行ARCH效果检验。

ARCH效应检验

现在,我们可以检验模型残差上是否存在ARCH效应。如果ARCH效应对于我们的时间序列的残差在统计上显着,则需要GARCH模型。

基于报告的p值,我们拒绝没有ARCH效应的原假设。

粗略地说,平稳。

让我们看一下残差相关图。

条件波动率

条件均值和方差定义为:

μt:= E(rt | Ft-1)σt2:= Var(rt | Ft-1)= E [(rt-μt)2 | Ft-1]

条件波动率可以计算为条件方差的平方根。

eGARCH模型

将sGARCH作为方差模型的尝试未获得具有统计显着性系数的结果。

而指数GARCH(eGARCH)方差模型能够捕获波动率内的不对称性。要检查DJIA对数收益率内的不对称性,显示汇总统计数据和密度图。

负偏度值确认分布内不对称性的存在。

这给出了密度图。

我们继续提出eGARCH模型作为方差模型(针对条件方差)。更准确地说,我们将使用ARMA(2,2)作为均值模型,指数GARCH(1,1)作为方差模型对ARMA-GARCH进行建模。

在此之前,我们进一步强调ARMA(0,0)在这种情况下不令人满意。ARMA-GARCH:ARMA(0,0)+ eGARCH(1,1)

所有系数均具有统计学意义。但是,根据以上报告的p值的标准化残差加权Ljung-Box检验,我们确认该模型无法捕获所有ARCH效果(我们拒绝了残差内无相关性的零假设) )。

作为结论,我们通过在下面所示的GARCH拟合中指定ARMA(2,2)作为均值模型来继续进行。

ARMA-GARCH:ARMA(2,2)+ eGARCH(1,1)

所有系数均具有统计学意义。在标准化残差或标准化平方残差内未发现相关性。模型正确捕获所有ARCH效果。然而:

*对于某些模型参数,Nyblom稳定性检验无效假设认为模型参数随时间是恒定的

*正偏差为零的假设在5%的显着性水平上被拒绝;这种检验着重于正面冲击的影响

*拒绝了标准化残差的经验和理论分布相同的Pearson拟合优度检验原假设

注意:ARMA(1,2)+ eGARCH(1,1)拟合还提供统计上显着的系数,标准化残差内没有相关性,标准化平方残差内没有相关性,并且正确捕获了所有ARCH效应。但是,偏差检验在5%时不如ARMA(2,2)+ eGARCH(1,1)模型令人满意。

进一步显示诊断图。

我们用平均模型拟合(红线)和条件波动率(蓝线)显示了原始的对数收益时间序列。

模型方程式

结合ARMA(2,2)和eGARCH模型,我们可以:

yt − ϕ1yt−1 − ϕ2yt−2 = ϕ0 + ut + θ1ut−1 +θ2ut-2ut= σtϵt,ϵt = N(0,1)ln⁡(σt2)=ω+ ∑j = 1q(αjϵt−j2 +γ (ϵt−j–E | ϵt−j |))+ ∑i =1pβiln(σt−12)

使用模型结果系数,结果如下。

yt +0.476 yt-1 +0.575 yt-2 = ut +0.429 ut-1 +0.563 ut-2ut = σtϵt,ϵt = N(0,1)ln⁡(σt2)= -0.313 -0.174ϵt-12 +0.189( ϵt−1–E | ϵt−1 |))+ 0.966 ln(σt−12)

波动率分析

这是由ARMA(2,2)+ eGARCH(1,1)模型得出的条件波动图。

显示了年条件波动率的线线图。

显示了按年列出的条件波动率箱图。

2008年之后,日波动率基本趋于下降。在2017年,波动率低于其他任何年。不同的是,与2017年相比,我们在2018年的波动性显着增加。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498