• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

拓端tecdat|R语言实现 Copula 算法建模相依性案例报告

武飞扬头像
拓端研究室TRL
帮助1

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

相关视频:Copula算法原理和R语言股市收益率相依性可视化分析

Copula算法原理和R语言股市收益率相依性可视化分析

,时长16:34

copulas如何工作 

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

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

我们使用cor()和散点图矩阵检查样本相关性。 

  1.  
     
  2.  
    pairs.panels(Z)
  3.  
     
  4.  
    [,1] [,2] [,3]
  5.  
    [1,] 1.0000000 0.3812244 0.1937548
  6.  
    [2,] 0.3812244 1.0000000 -0.7890814
  7.  
    [3,] 0.1937548 -0.7890814 1.0000000


 

学新通

  1.  
     
  2.  
    pairs.panels(U)

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

学新通
 

 我们可以绘制矢量的3D图表示u。 

学新通

 
 

现在,作为最后一步,我们只需要选择边缘并应用它。我选择了边缘为Gamma,Beta和Student,并使用下面指定的参数。

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

下面是我们模拟数据的3D图。 

学新通

  1.  
    df < - cbind(x1,x2,x3)
  2.  
    pairs.panels(DF)
  3.  
     
  4.  
    x1 x2 x3
  5.  
    x1 1.0000000 0.3812244 0.1937548
  6.  
    x2 0.3812244 1.0000000 -0.7890814
  7.  
    x3 0.1937548 -0.7890814 1.0000000

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

学新通

使用copula

让我们使用copula复制上面的过程。

现在我们已经通过copula(普通copula)指定了相依结构并设置了边缘,mvdc()函数生成了所需的分布。然后我们可以使用rmvdc()函数生成随机样本。

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

模拟数据当然非常接近之前的数据,显示在下面的散点图矩阵中:

学新通

简单的应用示例

现在为现实世界的例子。我们将拟合两个股票 ,并尝试使用copula模拟 。 

让我们在R中加载 :

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

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

我们可以看到 正相关 :

学新通

在上面的第一个例子中,我选择了一个正态的copula模型,但是,当将这些模型应用于实际数据时,应该仔细考虑哪些更适合数据。例如,许多copula更适合建模非对称相关,其他强调尾部相关性等等。我对股票收益率的猜测是,t-copula应该没问题,但是猜测肯定是不够的。本质上, 允许我们通过函数使用BIC和AIC执行copula选择 :

  1.  
     
  2.  
    pobs(as.matrix(cbind(cree,yahoo)))[,1]
  3.  
    selectedCopula
  4.  
     
  5.  
     
  6.  
    $ PAR
  7.  
    [1] 0.4356302
  8.  
     
  9.  
    $ PAR2
  10.  
    [1] 3.844534

拟合算法确实选择了t-copula并为我们估计了参数。 
让我们尝试拟合建议的模型,并检查参数拟合。

  1.  
    t.cop
  2.  
    set.seed(500)
  3.  
    m < - pobs(as.matrix(cbind(cree,yahoo)))
  4.  
     
  5.  
    COEF(FIT)
  6.  
     
  7.  
    rho.1 df
  8.  
    0.43563 3.84453

 我们来看看我们刚估计的copula的密度

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

学新通

现在我们只需要建立Copula并从中抽取3965个随机样本。

  1.  
    rCopula(3965,tCopula( = 2, ,df = df))
  2.  
     
  3.  
     
  4.  
    [,1] [,2]
  5.  
    [1,] 1.0000000 0.3972454
  6.  
    [2,] 0.3972454 1.0000000

这是包含的样本的图:

学新通

t-copula通常适用于在极值(分布的尾部)中存在高度相关性的现象。
现在我们面临困难:对边缘进行建模。为简单起见,我们将假设正态分布 。因此,我们估计边缘的参数。

直方图显示如下:

学新通学新通

现在我们在函数中应用copula,从生成的多变量分布中获取模拟观测值。最后,我们将模拟结果与原始数据进行比较。

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

学新通

正如您所看到的,t-copula导致结果接近实际观察结果 。 

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

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

学新通

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggjeif
系列文章
更多 icon
同类精品
更多 icon
继续加载