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

简介: R语言实现 Copula 算法建模相依性案例分析报告

copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。Copula是建模和模拟相关随机变量的绝佳工具。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

1. 
2. 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 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。

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


相关文章
|
4月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
295 3
|
4月前
|
存储 边缘计算 算法
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)
101 0
|
6月前
|
编解码 算法 5G
MIMO雷达空间谱估计中Capon算法与MUSIC算法的对比分析及实现
MIMO雷达空间谱估计中Capon算法与MUSIC算法的对比分析及实现
528 2
|
5月前
|
机器学习/深度学习 算法 5G
【MUSIC、最大似然与克拉美-罗下界】MUSIC与ESPRIT 算法来估计到达角(AoA),并尝试推导克拉美-罗下界(CRLB)以分析其性能研究(Matlab代码实现)
【MUSIC、最大似然与克拉美-罗下界】MUSIC与ESPRIT 算法来估计到达角(AoA),并尝试推导克拉美-罗下界(CRLB)以分析其性能研究(Matlab代码实现)
245 0
|
3月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
382 0
|
3月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
255 2
|
4月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
264 3
|
4月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
195 6
|
3月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
207 8
|
3月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
221 8