乐趣区

关于数据挖掘:视频Copula算法原理和R语言股市收益率相依性可视化分析附代码数据

浏览全文:http://tecdat.cn/?p=6193

最近咱们被客户要求撰写对于 Copula 的钻研报告,包含一些图形和统计输入。

copula 是将多变量散布函数与其边缘散布函数耦合的函数,通常称为边缘。在本视频中,咱们通过可视化的形式直观地介绍了 Copula 函数,并通过 R 软件应用于金融工夫序列数据来了解它。

为什么要引入 Copula 函数?

当边缘散布(即每个随机变量的散布)不同的随机变量,相互之间并不独立的时候,此时对于联结散布的建模会变得十分困难。

 

让咱们从一个示例问题案例开始。假如咱们测量两个非正态分布且相干的变量。例如,咱们查看各种河流,咱们查看该河流在特定时间段内的最高水位。此外,咱们还计算了每条河流造成洪水的月份。对于河流最高水位的概率分布,咱们能够参考极值实践,它通知咱们最大值是 Gumbel 散布的。洪水产生的次数将依据 Beta 散布进行建模,该散布只是通知咱们产生洪水的概率是洪水与非洪水产生次数的函数。

假如洪水的最高水位和数量是相干的,这是十分正当的。然而,这里咱们遇到了一个问题:咱们应该如何对概率分布进行建模?下面咱们只指定了各个变量的散布,而与另一个变量无关(即边缘散布)。实际上,咱们正在解决这两者的联结散布。

此时,在已知多个已知 边缘散布的随机变量下,Copula 函数则是一个十分好的工具来对其相关性进行建模。

copula 的次要吸引力在于,通过应用他们,您能够别离对相干构造和边缘散布(即每个随机变量的散布)进行建模。

因为对于某些边缘散布组合,没有内置函数来生成所需的多元散布。例如,在 R 中,很容易从多元正态分布中生成随机样本,然而对于边缘别离为 Beta、Gamma 和 Student 的散布来说,这样做并不容易。

copula 将边缘散布与钻研它们的“关系”离开,因而您无需放心思考可能的单变量散布类型的所有可能组合,从而大大简化了所需的代码量。

Copula 能够同时解决多个变量,例如您能够在一个群组中解决多只股票,而不仅仅是一对,以创立最终交易组合,以在更高的维度上发现错误定价。

什么是 copula

Copula 在拉丁语中的意思是“链接”,copula 是将多元散布函数与其边缘散布函数耦合的函数,通常称为边缘或简称为边缘。Copulas 是用于建模和模仿相干随机变量的绝佳工具。

总的来说,copula 是一种统计办法,用于了解多元散布的联结概率。

Copula 是模仿多元相干数据的风行办法,是一个示意多元均匀分布的概率模型,它查看许多变量之间的关联或依赖关系。

明天,copulas 被用于高级财务剖析,以更好地了解波及厚尾和偏度的后果。用于帮忙辨认市场危险、信用风险和操作危险。它依赖于两种或多种资产收益的相互依赖关系。相关性最适宜 正态分布,而金融市场中的散布实质上通常是非正态分布。因而,copula 已利用于诸如期权定价和投资组合危险价值等金融畛域,以解决偏斜或不对称散布。

 

如何应用 copula 剖析数据

回忆一下,您能够应用累积散布函数将任何散布转换为均匀分布。同样,您能够应用逆累积散布函数将均匀分布转换为任何散布。例如要模仿来自高斯 copula 的相干多元数据,请执行以下三个步骤:

1. 从相关矩阵模仿相干的多元正态数据。边缘散布都是规范正态分布。

2. 应用规范正态累积散布函数将正态边缘转换为均匀分布。

3. 应用逆累积散布函数将平均边缘散布转换为 您想要的任何散布。

第二步和第三步中的转换是在数据矩阵的各个列上执行的。变换是枯燥的,这意味着它们不会扭转列之间的等级相关性。因而,最终数据与第一步中的多元正态数据具备雷同的秩相关性。

首先咱们能够生成均匀分布的随机变量

上面,咱们想要转化这些样本使他们变成正态分布。那么,咱们只须要以 x 为累积散布函数值,对正态分布求逆即可,

如果咱们将 x 和转化后的 x  的散布画在一张图中,就能够直观的看出逆累积散布函数的样子。

同理,咱们也能够基于 beta 散布或者 gumbel  散布来失去相似的图像,这种概率积分变换的实质是雷同的。

而咱们如果想要从一个任意的散布到均匀分布,那么咱们只须要进行一次累积散布函数就能够了。这里我将 转换后的 x 再做一次转化

简略的高斯 Copula 例子

咱们构建一个简略的例子,来看如何利用概率积分变换来意识高斯 copula。首先从二元正态分布中生成样本:

 

通过给 x1 和 x2 的累积散布函数进行采样,咱们能够将其转化成均匀分布。

 

当初,咱们在下面的根底上(构建的高斯 Copula 函数),把边缘散布换成 Beta 散布和 Gumbel 散布:

 

 

那如果没有二者的耦合关系,这个图是怎么的呢?

 

两张图比照一下,还是很容易看出区别的吧!这就是咱们应用 copula 函数外在的办法了,其外围还是通过均匀分布。

Copula 的数学定义

它是一个多元散布 C,边缘散布为均匀分布。它实际上只是一个具备均匀分布边缘属性的函数。它的确只有在与另一个变换联合以取得咱们想要的边缘散布时才有用。

 

咱们也能够更好地了解高斯 copula 的数学形容:

对于给定的 R, 具备参数矩阵的高斯 copula 能够写成,其中 Φ− 1 是规范正态的逆累积散布函数,并且 ΦR 是均匀向量为零且协方差矩阵等于相关矩阵的多元正态分布的联结累积散布函数 R.

请留神,在下面的例子中,咱们采纳相同的形式从该散布创立样本。此处示意的高斯 copula 采纳 均匀分布输出,将它们转换为高斯,而后利用相关性并将它们转换回均匀分布。

Copula 函数次要利用在哪里呢?

该工具最后是用在金融衍生品畛域,该函数建模作为衍生品危险度量的工作进行应用。在 2008 年金融危机中,这个工具被人宽泛的提及,认为过后采纳的高斯 copula 没有可能残缺度量衍生品连带之间的危险,从而导致一系列的守约,进而引发次贷危机、经济危机。

也有人预先写了文章来介绍这个工具和事实社会经济的关系,包含很有名的电影《大空头》,也有这段的刻画。

说回工具自身,除了金融畛域,当初很多钻研概率分布的畛域都在应用 copula,例如电力系统畛域钻研风电、光伏等间歇性能源,也在应用这种办法进行建模。

接下来咱们在 R 软件中对金融工夫序列进行 copula 建模。

copulas 如何工作 

首先,让咱们理解 copula 的工作形式。

 set.seed(100)m < -  3
n < -  2000
 
z < -  mvrnorm(n,mu = rep(0,m),Sigma = sigma,empirical = T)

咱们应用 cor() 和散点图矩阵查看样本相关性。

 pairs.panels(Z)[,1] [,2] [,3]
[1,] 1.0000000 0.3812244 0.1937548
[2,] 0.3812244 1.0000000 -0.7890814
[3,] 0.1937548 -0.7890814 1.0000000
 pairs.panels(U)

这是蕴含新随机变量的散点图矩阵u


点击题目查阅往期内容

R 语言多元 Copula GARCH 模型工夫序列预测

左右滑动查看更多

01

02

03

04

咱们能够绘制矢量的 3D 图示意u

当初,作为最初一步,咱们只须要抉择边缘并利用它。我抉择了边缘为 Gamma,Beta 和 Student,并应用上面指定的参数。

x1 < -  qgamma(u [,1],shape = 2,scale = 1)x2 < -  qbeta(u [,2],2,2)x3 < -  qt(u [,3],df = 5)

上面是咱们模仿数据的 3D 图。

df < -  cbind(x1,x2,x3)pairs.panels(DF)x1 x2 x3
x1 1.0000000 0.3812244 0.1937548
x2 0.3812244 1.0000000 -0.7890814
x3 0.1937548 -0.7890814 1.0000000

这是随机变量的散点图矩阵:

应用 copula

让咱们应用 copula 复制下面的过程。

当初咱们曾经通过 copula(一般 copula)指定了相依构造并设置了边缘,mvdc()函数生成了所需的散布。而后咱们能够应用 rmvdc() 函数生成随机样本。

 colnames(Z2)< -  c(“x1”,“x2”,“x3”)pairs.panels(Z2)

模仿数据当然十分靠近之前的数据,显示在上面的散点图矩阵中:

简略的利用示例

当初为事实世界的例子。咱们将拟合两个股票,并尝试应用 copula 模仿。

让咱们在 R 中加载:

cree < -  read.csv('cree_r.csv',header = F)$ V2
yahoo < -  read.csv('yahoo_r.csv',header = F)$ V2

在间接进入 copula 拟合过程之前,让咱们查看两个股票收益之间的相关性并绘制回归线:

咱们能够看到 正相干:

在下面的第一个例子中,我抉择了一个正态的 copula 模型,然而,当将这些模型利用于理论数据时,应该认真思考哪些更适宜数据。例如,许多 copula 更适宜建模非对称相干,其余强调尾部相关性等等。我对股票收益率的猜想是,t-copula 应该没问题,然而猜想必定是不够的。实质上,容许咱们通过函数应用 BIC 和 AIC 执行 copula 抉择:

 
  pobs(as.matrix(cbind(cree,yahoo)))[,1]
  selectedCopula
 

$ PAR
[1] 0.4356302

$ PAR2
[1] 3.844534

拟合算法的确抉择了 t -copula 并为咱们预计了参数。
让咱们尝试拟合倡议的模型,并查看参数拟合。

t.cop  
set.seed(500)m < -  pobs(as.matrix(cbind(cree,yahoo)))COEF(FIT)rho.1 df 
0.43563 3.84453

咱们来看看咱们刚预计的 copula 的密度

rho < -  coef(fit)[1]
df < -  coef(fit)[2]

当初咱们只须要建设 Copula 并从中抽取 3965 个随机样本。

  rCopula(3965,tCopula(= 2,,df = df))[,1] [,2]
[1,] 1.0000000 0.3972454
[2,] 0.3972454 1.0000000

这是蕴含的样本的图:

t-copula 通常实用于在极值(散布的尾部)中存在高度相关性的景象。
当初咱们面临艰难:对边缘进行建模。为简略起见,咱们将假如正态分布。因而,咱们预计边缘的参数。

直方图显示如下:

当初咱们在函数中利用 copula,从生成的多变量散布中获取模仿观测值。最初,咱们将模仿后果与原始数据进行比拟。

这是在假如正态分布边缘和相依构造的 t -copula 的状况下数据的最终散点图:

正如您所看到的,t-copula 导致后果靠近理论察看后果。

让咱们尝试 df=1df=8:

显然,该参数 df 对于确定散布的形态十分重要。随着 df 减少,t-copula 偏向于正态分布 copula。


本文摘选 R 语言实现 Copula 算法建模相依性案例剖析报告 ,点击“ 浏览原文”获取全文残缺材料。


点击题目查阅往期内容

Copula 预计边缘散布模仿收益率计算投资组合危险价值 VaR 与冀望损失 ES
MATLAB 用 COPULA 模型进行蒙特卡洛 (MONTE CARLO) 模仿和拟合股票收益数据分析
python 中的 copula:Frank、Clayton 和 Gumbel copula 模型预计与可视化 R 语言中的 copula GARCH 模型拟合工夫序列并模仿剖析
matlab 应用 Copula 仿真优化市场危险数据 VaR 剖析
R 语言多元 Copula GARCH 模型工夫序列预测
R 语言 Copula 函数股市相关性建模:模仿 Random Walk(随机游走)
R 语言实现 Copula 算法建模依赖性案例剖析报告
R 语言 ARMA-GARCH-COPULA 模型和金融工夫序列案例
R 语言基于 copula 的贝叶斯分层混合模型的诊断准确性钻研
R 语言 COPULA 和金融工夫序列案例
matlab 应用 Copula 仿真优化市场危险数据 VaR 剖析
matlab 应用 Copula 仿真优化市场危险
R 语言多元 CopulaGARCH 模型工夫序列预测
R 语言 Copula 的贝叶斯非参数 MCMC 预计
R 语言 COPULAS 和金融工夫序列 R 语言乘法 GARCH 模型对高频交易数据进行波动性预测
R 语言 GARCH-DCC 模型和 DCC(MVT)建模预计
Python 应用 GARCH,EGARCH,GJR-GARCH 模型和蒙特卡洛模仿进行股价预测
R 语言工夫序列 GARCH 模型剖析股市稳定率
R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测
matlab 实现 MCMC 的马尔可夫转换 ARMA – GARCH 模型预计
Python 应用 GARCH,EGARCH,GJR-GARCH 模型和蒙特卡洛模仿进行股价预测
应用 R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略
R 语言用多元 ARMA,GARCH ,EWMA, ETS, 随机稳定率 SV 模型对金融工夫序列数据建模
R 语言股票市场指数:ARMA-GARCH 模型和对数收益率数据探索性剖析
R 语言多元 Copula GARCH 模型工夫序列预测
R 语言应用多元 AR-GARCH 模型掂量市场危险
R 语言中的工夫序列分析模型:ARIMA-ARCH / GARCH 模型剖析股票价格
R 语言用 Garch 模型和回归模型对股票价格剖析
GARCH(1,1),MA 以及历史模拟法的 VaR 比拟
matlab 预计 arma garch 条件均值和方差模型
R 语言 ARMA-GARCH-COPULA 模型和金融工夫序列案例

退出移动版