在这个文章中,我们演示了copula GARCH方法(一般情况下)。
首先,我们模拟一下创新分布。我们选择了一个小的样本量。理想情况下,样本量应该更大,更容易发现GARCH效应。在金融时间序列分析中,Copula GARCH方法已经成为一种重要的工具,用于捕捉金融时间序列的复杂动态特性。这种方法结合了Copula函数和GARCH模型,能够有效地描述金融时间序列的尾部依赖性和条件异方差性。本文将详细演示Copula GARCH方法的一般应用过程,并探讨其在实际问题中的应用价值。
Copula函数是一种用于描述多变量间依赖结构的工具,能够灵活地捕捉变量间的非线性相关性和尾部依赖性。在金融时间序列分析中,Copula函数常常被用来描述不同金融资产收益率之间的相关性。
GARCH模型(广义自回归条件异方差模型)则是一种用于描述时间序列条件异方差性的模型。它通过对误差项的方差进行建模,能够捕捉金融时间序列中常见的波动聚集现象。
可下载资源
作者
1 模拟数据
## 模拟创新
d <- 2 # 维度
tau <- 0.5 # Kendall's tau
Copula("t", param = th, dim = d, df = nu) # 定义copula对象
rCopula(n, cop) # 对copula进行采样
sqrt((nu.-2)/nu.) * qt(U, df = nu) # 对于ugarchpath()来说,边缘必须具有均值0和方差1!
Copula-GARCH类方法
投资组合收益率和标的指数收益率的相关关系是最优套保比率研究的关键,以上模型研究描述的都是正态分布假设下线性相关的关系,实际中很多收益率分布并不满足正态假设,甚至方差都不存在,但仍然存在相关性很强的变量,这时引入Copula-GARCH可以较好的反映非正态假设下非线性相关关系,从而提高套期保值效果。 内容来自股民网校
B-GARCH(1,1)的Copula形式:
学炒股,上股民网校
其中,为标准残差的边际分布密度函数,是Copula函数。本文中我们采用二元t分布Copula函数,二元t分布Copula密度函数形式如下:
其中Rt是相关系数矩阵,v是t分布自由度,是自由度为v的单变量标准t分布函数的反函数。
对于常相关系数GARCH,相关系数的估计较为简单,可以计算样本序列的Kendall’sτ,根据t-Copula估计的相关系数与Kendall’sτ的一一对应关系:,直接得到固定的相关数。
对于时变相关系数和动态相关系数模型,则仍然使用极大似然估计。模型残差的联合密度函数:,其中是Copula密度函数,则对数似然函数:
。
这里,Copula密度的参数θc包含t分布的自由度以及相关系数矩阵或协方差矩阵自回归方程中的参数,共3个参数,θi和θf则分别包含了两个一元GARCH方程的参数以及t分布的自由度。对这个似然函数来说,同时得到所有参数的极大似然估计较为困难,因此实际中仍然采用两步估计法,第一步利用一元GARCH模型来估计边际分布的参数:
。 内容来自股民网校
现在我们用这些copula依赖的创新分布来模拟两个ARMA(1,1)-GARCH(1,1)过程。
## 边缘模型的参数
fixed.p <- list(mu = 1,
spec(varModel, meanModel,
fixed.pars ) # 条件创新密度(或使用,例如,"std")
## 使用创新模拟ARMA-GARCH模型
## 注意: ugarchpath(): 从spec中模拟;
garchpath(uspec,
n.sim = n, # 模拟的路径长度
## 提取结果系列
X. <- fitted(X) # X\_t = mu\_t + eps_t (simulated process)
## 基本检查:
stopifnot(all.equal(X., X@path$seriesSim, check.attributes = FALSE),
## 绘制边缘函数
plot(X., type = "l", xlab = "t")
2 基于模拟数据的拟合程序
我们现在展示如何对X进行ARMA(1,1)-GARCH(1,1)过程的拟合(我们删除参数fixed.pars来估计这些参数)。
spec(varModel, mean.model = meanModel)
ugarchfit(uspec, data = x))
检查(标准化的)Z,即残差Z的伪观测值。
plot(U.)
对于边缘分布,我们也假定为t分布,但自由度不同。
fit("t", dim = 2), data = U., method = "mpl")
nu. <- rep(nu., d) # 边缘自由度
est <- cbind(fitted = c(estimate, nu.), true = c(th, nu, nu.)) # 拟合与真实值
3 从拟合的时间序列模型进行模拟
从拟合的copula 模型进行模拟。
set.seed(271) # 可重复性
sapply(1:d, function(j) sqrt((nu\[j\]-2)/nu\[j\]) * qt(U\[,j\], df = nu\[j\]))
## => 创新必须是标准化的garch()
sim(fit\[\[j\]\], n.sim = n, m.sim = 1,
并绘制出每个结果序列(XtXt)。
apply(sim,fitted(x)) # 模拟序列
plot(X.., type = "l")
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!