R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模

本文将说明单变量和多变量金融时间序列的不同模型,特别是条件均值和条件协方差矩阵、波动率的模型。

 

由Kaizong Ye,Sherry Deng撰写

均值模型

本节探讨条件均值模型。

iid模型

我们从简单的iid模型开始。iid模型假定对数收益率xt为N维高斯时间序列:

均值和协方差矩阵的样本估计量分别是样本均值

×

平稳性在时间序列中是非常重要的。我们说对于一个单变量时间序列 [公式] ,平稳性分为严格平稳和弱平稳(又称协方差平稳)。我们通常讨论的平稳性都是协方差平稳,平稳的序列称为I(0)序列——即差分0次之后可以得到平稳序列。平稳的序列可以用常用的ARMA模型进行拟合。

但对于多变量时间序列来说,问题就会变得复杂。比方说 [公式] 是一个多变量时间序列,它包含k个变量:

[公式]

在通常情况下,如果每一个[公式]都是平稳的,[公式]基本上也可以说是平稳的。那这种情况下,我们就可以直接分析这个多变量序列,最常见的是VARMA模型(Vector Autoregression Moving Average,向量自回归移动平均模型),也就是ARMA的多变量版。通常情况下,我们用的更多的是VAR(向量自回归)模型而忽略MA项。通过VAR我们可以进行种类繁多的各类分析和预测,包括格兰杰因果检验(Granger causality test)、脉冲响应函数(Impulse response function)和方差分解(Variance decomposition)等。

但是当[公式]中的其中一些或者全部变量是不平稳的,问题就比较麻烦了。(这里我们只考虑I(1)的情况,不考虑高阶的单整。)其实我们只需要考虑变量全部不平稳的情况就好了,如果 [公式] 一部分变量平稳,一部分变量不平稳,那我们直接拆成两部分就好了,拆开来各自分析不影响整体结果。因此这里我们假定所有变量都是I(1)序列。

不平稳怎么办?最简单的办法就是差分啦,这是最方便的方法。但这里又有一个显著的问题叫信息损失,凡是差分都有这个毛病。考虑一个最常见的不平稳序列,k阶随机游走过程(random walk)

[公式]

这里的 [公式] 是一个k阶的白噪声(white noise)。

现在对它差分,我们得到一个平稳序列

[公式]

然后我们可以对这个序列进行分析。我们要知道这个序列描述的是由第 [公式] 期到第 [公式] 期的变化,也就是一个短期关系。对于时间序列分析来说,我们通常长更关注的是长期关系而不是短期关系。比方说财政赤字货币化(无限印钞票)这件事,从宏观模型上看,短期内通胀不会很高,甚至还可以拉动GDP上扬,看起来就是个百利而无一害的事。但是长期来看,赤字货币化会导致恶性通货膨胀(Hyperinflation)并永久性地损害经济。如果我们用差分后的模型来做预测的话,就会陷入这样的麻烦事之中。

那什么叫长期呢?我们说“长期均衡=无条件均衡”。举个例子,假设一个AR(1)过程

[公式]

那么 [公式] 的长期均衡值就是

[公式]

也就是说,在计算长期均衡的时候我们令第 [公式] 期到第 [公式] 期的取值相等!想象一下我们现在要预测2120年和2121年的失业率,我们真的会认为这两个数有什么不同么,除非去开个天眼吧……

同理,对于这个随机游走的 [公式] 来说,我们的长期关系也可以通过令 [公式] 来找到。这种情况下, [公式] 就会变成

[公式]

所以差分并不是什么受欢迎的处理方法。那么问题来了,除了差分,我们还有别的解决方案吗?Engle和Granger给出了解决方案——协整(cointegration)。

仍然考虑随机游走模型,这里我们限制 [公式] 仅包含两个变量 [公式] 和 [公式] 。对于一个随机游走过程来说,它最大的毛病在于随着时间的推移,这个序列可能会发散到任何地方去。


和样本协方差矩阵

我们从生成数据开始,熟悉该过程并确保估计过程给出正确的结果(即完整性检查)。然后使用真实的市场数据并拟合不同的模型。

让我们生成合成iid数据并估算均值和协方差矩阵:

现在,让我们针对不同数量的观测值T再做一次:


单变量ARMA模型

对数收益率xt上的ARMA(p,q)模型是

其中wt是均值为零且方差为σ2的白噪声序列。模型的参数是系数ϕi,θi和噪声方差σ2。

请注意,ARIMA(p,d,q)模型是时间差分为d阶的ARMA(p,q)模型。因此,如果我们用xt代替对数价格,那么先前的对数收益模型实际上就是ARIMA(p,1,q)模型,因为一旦对数价格差分,我们就获得对数收益。

rugarch生成数据 

我们将使用rugarch包  生成单变量ARMA数据,估计参数并进行预测。

首先,我们需要定义模型:

然后,我们可以生成时间序列:

ARMA模型

现在,我们可以估计参数(我们已经知道):

我们还可以研究样本数量T对参数估计误差的影响:


R语言GARCH-DCC模型和DCC(MVT)建模估计

阅读文章


首先,真正的μ几乎为零,因此相对误差可能显得不稳定。在T = 800个样本之后,其他系数得到了很好的估计。

ARMA预测

为了进行健全性检查,我们现在将比较两个程序包 Forecast 和 rugarch的结果

确实,这两个软件包给出了相同的结果。

ARMA模型选择 

在先前的实验中,我们假设我们知道ARMA模型的阶数,即p = 1和q = 0。实际上,阶数是未知的,因此必须尝试不同的阶数组合。阶数越高,拟合越好,但这将不可避免地导致过度拟合。已经开发出许多方法来惩罚复杂性的增加以避免过度拟合,例如AIC,BIC,SIC,HQIC等。

在这种情况下,由于观察次数T = 1000足够大,因此阶数被正确地检测到。相反,如果尝试使用T = 200,则检测到的阶数为p = 1,q = 3。


随时关注您喜欢的主题


ARMA预测 

一旦估计了ARMA模型参数ϕi  ^ i和θ^j,就可以使用该模型预测未来的值。例如,根据过去的信息对xt的预测是

并且预测误差将为xt-x ^ t = wt(假设参数已被估计),其方差为σ2。软件包 rugarch 使对样本外数据的预测变得简单:

多元VARMA模型

对数收益率xt上的VARMA(p,q)模型是

其中wt是具有零均值和协方差矩阵Σw的白噪声序列。该模型的参数是矢量/矩阵系数ϕ0,Φi,Θj和噪声协方差矩阵Σw。

比较

让我们首先加载S&P500:

现在,我们使用训练数据(即,对于t = 1,…,Ttrnt = 1,…,Ttrn)来拟合不同的模型(请注意,通过指示排除了样本外数据 out.sample = T_tst)。特别是,我们将考虑iid模型,AR模型,ARMA模型以及一些ARCH和GARCH模型(稍后将对方差建模进行更详细的研究)。

我们使用不同的模型来预测对数收益率:

我们可以计算不同模型的预测误差(样本内和样本外):

我们可以观察到,随着模型复杂度的增加,样本内误差趋于变小(由于拟合数据的自由度更高),尽管差异可以忽略不计。

重要的实际上是样本外误差:我们可以看到,增加模型复杂度可能会得出较差的结果。就预测收益的误差而言,似乎最简单的iid模型已经足够了。

最后,让我们展示一些样本外误差的图表:

请注意,由于我们没有重新拟合模型,因此随着时间的发展,误差越大(对于ARCH建模尤其明显)。

滚动窗口比较

让我们首先通过一个简单的示例比较静态预测与滚动预测的概念:

我们可以清楚地观察到滚动窗口过程对时间序列的影响。

现在,我们可以在滚动窗口的基础上重做所有模型的所有预测:

让我们看看滚动基准情况下的预测误差:

和一些图表:

我们看到,现在所有模型都拟合了时间序列。此外,我们在模型之间没有发现任何显着差异。

我们最终可以比较静态误差和滚动误差:

我们可以看到,滚动预测在某些情况下是必须的。因此,实际上,我们需要定期进行滚动预测改进。

方差模型

ARCH和GARCH模型

对数收益率残差wt的ARCH(m)模型为

其中zt是具有零均值和恒定方差的白噪声序列,而条件方差σ2t建模为

其中,m为模型阶数,ω> 0,αi≥0为参数。

GARCH(m,s)模型使用σ2t上的递归项扩展了ARCH模型:

其中参数ω> 0,αi≥0,βj≥0需要满足∑mi =1αi+ ∑sj = 1βj≤1的稳定性。

rugarch生成数据 

首先,我们需要定义模型:

然后,我们可以生成收益率时间序列:

GARCH

现在,我们可以估计参数:

我们还可以研究样本数量T对参数估计误差的影响:

真实的ω几乎为零,因此误差非常不稳定。至于其他系数,就像在ARMA情况下一样,μ的估计确实很差(相对误差超过50%),而其他系数似乎在T = 800个样本后得到了很好的估计。

GARCH结果比较 

作为健全性检查,我们现在将比较两个软件包 fGarch 和 rugarch的结果

确实,这两个软件包给出了相同的结果。

使用rugarch包进行GARCH预测 

一旦估计出GARCH模型的参数,就可以使用该模型预测未来的值。例如,基于过去的信息对条件方差的单步预测为

给定ω^ /(1-∑mi =1α^ i-∑sj =1β^ j)。软件包 rugarch 使对样本外数据的预测变得简单:

不同方法

让我们首先加载S&P500:

常数

让我们从常数开始:

移动平均值

现在,让我们使用平方收益的移动平均值:

EWMA

指数加权移动平均线(EWMA):

请注意,这也可以建模为ETS(A,N,N)状态空间模型:

乘法ETS

我们还可以尝试ETS模型的不同变体。例如,具有状态空间模型的乘性噪声版本ETS(M,N,N):


随时关注您喜欢的主题


ARCH

现在,我们可以使用更复杂的ARCH建模:

GARCH

我们可以将模型提升到GARCH:

SV随机波动率

最后,我们可以使用随机波动率建模:

或者,等效地,

比较

现在,我们可以比较每种方法在样本外期间的方差估计中的误差:

滚动窗口比较

六种方法的滚动窗口比较:MA,EWMA,ETS(MNN),ARCH(5),GARCH(1,1)和SV。

多元GARCH模型

出于说明目的,我们将仅考虑恒定条件相关(CCC)和动态条件相关(DCC)模型,因为它们是最受欢迎的模型。对数收益率残差wt建模为

其中zt是具有零均值和恒定协方差矩阵II的iid白噪声序列。条件协方差矩阵Σt建模为

其中Dt = Diag(σ1,t,…,σN,t)是标准化噪声向量C,协方差矩阵ηt=C-1wt(即,它包含等于1的对角线元素)。

基本上,使用此模型,对角矩阵Dt包含一组单变量GARCH模型,然后矩阵C包含序列之间的一些相关性。该模型的主要缺点是矩阵C是恒定的。为了克服这个问题,DCC被提议为

其中Ct包含等于1的对角元素。要强制等于1的对角元素,Engle将其建模为

Qt具有任意对角线元素并遵循模型

我们将生成数据,估计参数和预测。

从加载多元ETF数据开始:

  • SPDR S&P 500 ETF
  • 20年以上国债ETF
  • IEF:7-10年期国债ETF

首先,我们定义模型:

接下来,我们拟合模型:

我们可以绘制时变相关性:

我们看到两个收益ETF之间的相关性非常高且相当稳定。与SPY的相关性较小,在小于0的区间波动。


可下载资源

关于作者

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

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

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

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