ITPub博客

首页 > 大数据 > 数据分析 > R语言实现 Copula 算法建模依赖性案例分析报告

R语言实现 Copula 算法建模依赖性案例分析报告

原创 数据分析 作者:tecdat 时间:2020-10-21 16:20:21 0 删除 编辑

原文链接: http://tecdat.cn/?p=6193

 

copula是将多变量分布函数与其边际分布函数耦合的函数,通常称为边缘。Copula是建模和模拟相关随机变量的绝佳工具。Copula的主要吸引力在于,通过使用它们,你可以分别对相关结构和边缘(即每个随机变量的分布)进行建模。 

copulas如何工作 

首先,让我们了解copula的工作方式。 

set.seed(100)m < -  3n < -  2000z < -  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。 


 

 我们可以绘制矢量的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 x3x1 1.0000000 0.3812244 0.1937548x2 0.3812244 1.0000000 -0.7890814x3 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)$ V2yahoo < -  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.copset.seed(500)m < -  pobs(as.matrix(cbind(cree,yahoo)))COEF(FIT)rho.1 df0.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=1和 df=8:

 
显然,该参数 df对于确定分布的形状非常重要。随着 df增加,t-copula倾向于高斯copula。

非常感谢您阅读本文,有任何问题请在下面留言!


参考文献

1. 用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)的应用

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

3. R语言实现 Copula 算法建模依赖性案例分析报告

4. R语言COPULAS和金融时间序列数据VaR分析

5. R语言多元COPULA GARCH 模型时间序列预测

6. 用R语言实现神经网络预测股票实例

7. r语言预测波动率的实现:ARCH模型与HAR-RV模型

8. R语言如何做马尔科夫转换模型markov switching model

9. matlab使用Copula仿真优化市场风险


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69982319/viewspace-2728504/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
拓端tecdat分享最in的大数据资讯,提供“一站式”的数据分析学习和咨询体验,让我们一起做有态度的数据人。关注公众号:拓端数据部落、拓端数据。

注册时间:2020-08-21

  • 博文量
    87
  • 访问量
    62167