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

阅读全文:http://tecdat.cn/?p=6193

copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它点击文末“阅读原文”获取完整代码数据

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


为什么要引入Copula函数?

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

52f79515b0ca45177b999429c83d5f71.png

让我们从一个示例问题案例开始。假设我们测量两个非正态分布且相关的变量。例如,我们查看各种河流,我们查看该河流在特定时间段内的最高水位。此外,我们还计算了每条河流造成洪水的月份。对于河流最高水位的概率分布,我们可以参考极值理论,它告诉我们最大值是Gumbel分布的。洪水发生的次数将根据Beta分布进行建模,该分布只是告诉我们发生洪水的概率是洪水与非洪水发生次数的函数。

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

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

3fb274bd3adc0b00fc708fb4999aaf2c.png

copula 的主要吸引力在于,通过使用他们,您可以分别对相关结构和边缘分布(即每个随机变量的分布)进行建模。

5dce843aaf7a1fb10f65b69be3f9c072.png

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

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

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

什么是copula

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

总的来说,copula 是一种统计方法,用于理解多元分布的联合概率。

Copula是模拟多元相关数据的流行方法,是一个表示多元均匀分布的概率模型,它检查许多变量之间的关联或依赖关系。

今天,copulas 被用于高级财务分析,以更好地理解涉及厚尾和偏度的结果。用于帮助识别市场风险、信用风险和操作风险。它依赖于两种或多种资产收益的相互依赖关系。相关性最适合 正态分布,而金融市场中的分布本质上通常是非正态分布。因此,copula 已应用于诸如期权定价和投资组合风险价值等金融领域,以处理偏斜或不对称分布。

2b33daaac1228f3fa4a0b977c4bed295.png

如何使用copula 分析数据

回想一下,您可以使用累积分布函数将任何分布转换为均匀分布。同样,您可以使用逆累积分布函数将均匀分布转换为任何分布。例如要模拟来自高斯 copula 的相关多元数据,请执行以下三个步骤:

1.从相关矩阵模拟相关的多元正态数据。边缘分布都是标准正态分布。

2.使用标准正态累积分布函数将正态边缘转换为均匀分布。

3.使用逆累积分布函数将均匀边缘分布转换为 您想要的任何分布。

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

首先我们可以生成均匀分布的随机变量

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

8b9d64e44ff009adcddc809373c7ac65.png

如果我们将 x 和转化后的x  的分布画在一张图中,就可以直观的看出逆累积分布函数的样子。

89ad293f20a738b053ab573646a05c04.png

同理,我们也可以基于 beta 分布或者gumbel  分布来得到类似的图像,这种概率积分变换的本质是相同的。

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

3651e51bf7335c4dd343e0e13f4648d5.png

简单的高斯Copula例子

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

fb94bf38052587f348980eb50db8cb67.png

通过给 x1和x2的累积分布函数进行采样,我们可以将其转化成均匀分布。

87dc6c72522312e466cef1e43c37af05.png

现在,我们在上面的基础上(构建的高斯Copula函数),把边缘分布换成Beta分布和Gumbel分布:

f9f9e2c5267b35ecb518d67cf1d9be83.png

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

c4ff4bb659d9f591bce293561a858a0f.png

两张图对比一下,还是很容易看出区别的吧!这就是我们使用copula函数内在的方法了,其核心还是通过均匀分布。

Copula的数学定义

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

e5338d48ca1f97a80c8b8dbd6484b83a.png

我们也可以更好地理解高斯 copula 的数学描述:

对于给定的R, 具有参数矩阵的高斯copula可以写成   ,其中Φ− 1是标准正态的逆累积分布函数,并且ΦR是平均向量为零且协方差矩阵等于相关矩阵的多元正态分布的联合累积分布函数R.

请注意,在上面的例子中,我们采用相反的方式从该分布创建样本。此处表示的高斯 copula 采用 均匀分布输入,将它们转换为高斯,然后应用相关性并将它们转换回均匀分布。

Copula函数主要应用在哪里呢?

该工具最初是用在金融衍生品领域,该函数建模作为衍生品风险度量的工作进行使用。在2008年金融危机中,这个工具被人广泛的提及,认为当时采用的高斯copula没有能够完整度量衍生品连带之间的风险,从而导致一系列的违约,进而引发次贷危机、经济危机。

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

说回工具本身,除了金融领域,现在很多研究概率分布的领域都在使用copula,例如电力系统领域研究风电、光伏等间歇性能源,也在使用这种方法进行建模。

接下来我们在R软件中对金融时间序列进行copula建模。

copulas如何工作 

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

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

abb02955cca03aceedf7af26569ea84b.png

pairs.panels(U)

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


点击标题查阅往期内容

feb69ba502c939503f4841c4aca001eb.jpeg

R语言多元Copula GARCH 模型时间序列预测

outside_default.png

左右滑动查看更多

outside_default.png

01

c2df0be36802420e9fcbf35e0564f282.jpeg

02

f7f17a87be1ad822ebb3cfcfb01df5fc.jpeg

03

51d0b51c665f81a7986fc965a59753dc.jpeg

04

bf9d8caa242eee0a7b18d9e4afb8d9f2.jpeg

0e1d6f2ba174f950288bef53a5b010d3.png

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

def2d03e6655a268a1a59e2afe8c3e48.png

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

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

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

e086e568d4bed7d6e7ed7b255ed7b881.png

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

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

f3c334aeadb88aa30e30cc3b03b88450.png

使用copula

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

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

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

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

5b9263010efacfd65efdff82ef3717a2.png

简单的应用示例

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

让我们在R中加载 :

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

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

我们可以看到 正相关 :

e06524fbfe691d358ccc7177b50cdd47.png

在上面的第一个例子中,我选择了一个正态的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\]

2b959b2dc9437431d01c2adee9b45489.png

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

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

这是包含的样本的图:

96fe56889729bb5c15553575f0b7d634.png

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

直方图显示如下:

fedb220ea8a3f98aee5c4364416538be.png

4956312cf24dcb79388e860b58fea033.png

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

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

e4f0188738d9d8e134dcf4b78054b39d.png

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

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

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

3a21f115808d3eca86a882988cce2a15.png

1e98471e4a14bd1e4f21f599e7ca4962.jpeg

本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 

5284f2669305073d65db57febc4884a3.png


1bacba8dd636ea1b23b78bb0ed6235c8.jpeg

本文摘选R语言实现 Copula 算法建模相依性案例分析报告,点击“阅读原文”获取全文完整资料。

fd943323bad8603c7b82a89e6f07e5e3.jpeg

28e92daf732fd1a1b9bd61e8301882c7.png

点击标题查阅往期内容

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模型和金融时间序列案例

96d19df54f93a1e1dec3793bdc18b2bc.png

0a1cf2c541f5d2fa54098a5f91c79509.jpeg

f9a1935ffc86640a875918802f2a2c43.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1014.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 支持哪些日志框架

Spring Boot 支持多种日志框架&#xff0c;主要包括以下几种&#xff1a; SLF4J (Simple Logging Facade for Java) Logback&#xff08;默认&#xff09;Log4j 2Java Util Logging (JUL) 其中&#xff0c;Spring Boot 默认使用 SLF4J 和 Logback 作为日志框架。如果你需要使…

OpenCV基础:视频的采集、读取与录制

从摄像头采集视频 相关接口 - VideoCapture VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自多种源的视频。 主要参数&#xff1a; cv2.VideoCapture(source): source: 这是一个整数或字符串&#xff0c;表示视频的来源。 如果是整数&a…

Uniapp仿ChatGPT Stream流式输出(非Websocket)

Uniapp仿ChatGPT Stream流式输出&#xff08;非Websocket&#xff09; 前言&#xff1a;流式输出可以使用websocket也可以使用stream来实现EventSource是 HTML5 中的一个接口&#xff0c;用于接收服务器发送的事件流&#xff08;Server - Sent Events&#xff0c;SSE&#xff…

《自动驾驶与机器人中的SLAM技术》ch2:基础数学知识

目录 2.1 几何学 向量的内积和外积 旋转矩阵 旋转向量 四元数 李群和李代数 SO(3)上的 BCH 线性近似式 2.2 运动学 李群视角下的运动学 SO(3) t 上的运动学 线速度和加速度 扰动模型和雅可比矩阵 典型算例&#xff1a;对向量进行旋转 典型算例&#xff1a;旋转的复合 2.3 …

深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比

众所周知&#xff0c;不管是什么框架&#xff0c;在前端 UI 渲染时&#xff0c;都会有构造出一套相关的渲染树&#xff0c;并且在 UI 更新时&#xff0c;为了尽可能提高性能&#xff0c;一般都只会进行「差异化」更新&#xff0c;而不是对整个 UI Tree 进行刷新&#xff0c;所以…

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束&#xff0c;常见的Mapping属性包括&#xff1a; type&#xff1a;字段数据类…

occ的开发框架

occ的开发框架 1.Introduction This manual explains how to use the Open CASCADE Application Framework (OCAF). It provides basic documentation on using OCAF. 2.Purpose of OCAF OCAF (the Open CASCADE Application Framework) is an easy-to-use platform for ra…

esp32在编译是报错在idf中有该文件,但是说没有

报错没有头文件esp_efuse_table.h D:/Espressif/frameworks/esp-idf-v5.3.1/components/driver/deprecated/driver/i2s.h:27:2: warning: #warning "This set of I2S APIs has been deprecated, please include driver/i2s_std.h, driver/i2s_pdm.h or driver/i2s_tdm.h …

git - 用SSH方式迁出远端git库

文章目录 git - 用SSH方式迁出远端git库概述笔记以gitee为例产生RSA密钥对 备注githubEND git - 用SSH方式迁出远端git库 概述 最近一段时间&#xff0c;在网络没问题的情况下&#xff0c;用git方式直接迁出git库总是会失败。 失败都是在远端, 显示RPC错误。 但是git服务器端…

http和https有哪些不同

http和https有哪些不同 1.数据传输的安全性&#xff1a;http非加密&#xff0c;https加密 2.端口号&#xff1a;http默认80端口&#xff0c;https默认443端口 3.性能&#xff1a;http基于tcp三次握手建立连接&#xff0c;https在tcp三次握手后还有TLS协议的四次握手确认加密…

超详细-java-uniapp小程序-引导关注公众号、判断用户是否关注公众号

目录 1、前期准备 公众号和小程序相互关联 准备公众号文章 注册公众号测试号 微信静默授权的独立html 文件 2&#xff1a; 小程序代码 webview页面代码 小程序首页代码 3&#xff1a;后端代码 1&#xff1a;增加公众号配置项 2&#xff1a;读取公众号配置项 3&…

【Python进阶——分布式计算框架pyspark】

Apache Spark是用于大规模数据处理的统一分析引擎 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、PB乃至EB级别的海量数据&#xff0c;Spark作为全球顶级的分布式计算框架&#xff0c;支持众多的编程语言进行开…

基于 FastExcel 与消息队列高效生成及导入机构用户数据

&#x1f3af; 本文档详细介绍了开发机构用户数据导入功能的必要性及实现方法&#xff0c;如针对教育机构如学校场景下提高用户体验和管理效率的需求。文中首先分析了直接对接学生管理系统与平台对接的优势&#xff0c;包括减少人工审核成本、提高身份验证准确性等。接着介绍了…

校园跑腿小程序---轮播图,导航栏开发

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

前端练习题

图片&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>用户信息页面</title><style>body {font-family: Arial, sans-serif;margin: 20px;}.user-info {display: flex;align-it…

AllData是怎么样的一款数据中台产品?

&#x1f525;&#x1f525; AllData大数据产品是可定义数据中台&#xff0c;以数据平台为底座&#xff0c;以数据中台为桥梁&#xff0c;以机器学习平台为中层框架&#xff0c;以大模型应用为上游产品&#xff0c;提供全链路数字化解决方案。 ✨奥零数据科技官网&#xff1a;…

一学就废|Python基础碎片,OS模块

Python 中的操作系统模块提供了与操作系统交互的功能。操作系统属于 Python 的标准实用程序模块。该模块提供了一种使用依赖于操作系统的功能的可移植方式。os和os. path模块包括许多与文件系统交互的函数。 Python-OS 模块函数 我们将讨论 Python os 模块的一些重要功能&…

2.Numpy练习(1)

一.练习一&#xff1a; 1.打印当前numpy版本&#xff1a; 2.构造一个全零的矩阵&#xff0c;并打印其占用内存大小&#xff1a; 3.打印一个函数的帮助文档&#xff0c;比如numpy.add&#xff1a; 4.创建一个10~49数组&#xff0c;并将其倒序排列: 5.找到一个数组中不为0的索引…

Ubuntu Server挂载AWS S3成一个本地文件夹

2023年&#xff0c;AWS出了个mountpoint的工具&#xff1a; https://github.com/awslabs/mountpoint-s3 如下是另外一种方式&#xff0c;通过s3fs-fuse 这个工具 sudo apt-get install automake autotools-dev \fuse g git libcurl4-gnutls-dev libfuse-dev \libssl-dev libx…

CSS3的aria-hidden学习

前言 aria-hidden 属性可用于隐藏非交互内容&#xff0c;使其在无障碍 API 中不可见。即当aria-hidden"true" 添加到一个元素会将该元素及其所有子元素从无障碍树中移除&#xff0c;这可以通过隐藏来改善辅助技术用户的体验&#xff1a; 纯装饰性内容&#xff0c;如…