Advertisement

Matlab Copula函数实现

阅读量:

一、Copula函数定义:

它是一种通过连接变量的联合概率分布与相应的边缘概率分布来描述变量间相关性的工具,在无法确定传统线性相关系数是否能够充分反映变量间的关联程度时(即当无法确定传统线性相关系数是否能够充分反映变量间的关联程度时),由于其几乎涵盖了随机变量所有相关的依存信息而被广泛应用。该方法对于深入分析随机变量之间相互关系的作用尤为显著。

Sklar主张,在涉及N个随机变量的情况下(其中N≥2),我们可以将它们的联合概率分布分解为每个变量的边缘概率分布以及一个 Copula 函数。这种分解方法使得我们可以分别研究各变量的独立性和相互依赖关系的变化规律。具体而言,在考虑相关性时,则完全取决于其对应的 Copula 函数的表现形式及其参数设置情况。换句话说,在考虑相关性时,则完全取决于其对应的 Copula 函数的表现形式及其参数设置情况。

该平台发布的一系列文章中第一期的内容概述了Copula函数的概念与应用现状

1.概率分布定义:

即称为分布函数F(x)。如图所示为一元随机变量的分布函数图形,在图表中横轴代表随机点的位置,在纵轴上则显示样本值落入各区间的情况

中的概率。

2.联合概率分布(简称联合分布)定义:

具体说明二维随机变量X和Y的概率分布情况。它所代表的意义在于:对于任意给定的x和y值,在坐标平面上位于该点右上方的所有点(X,Y)的概率。

3.边缘分布定义:

边缘分布在获得两个随机变量的联合概率分布之后,在不考虑第三个变量的情况下单独研究其中一个随机变量的概率分布。边缘分布函数与联合分布函数的关系为:

其中

F

为联合分布函数,

F_{X}

定义为边缘分布函数。将相同x值与不同y值对应的联合概率相加,进而得出该x变量的总概率(即所谓的边缘概率)。

根据图中所展示的信息,X与Y遵循绿圈内定义的二元正态联合分布。红线条和蓝线条分别代表了Y变量与X变量各自的边缘分布。其Matlab代码已存在。

4.概率密度函数定义:

概率密度函数(PDF) 仅适用于continuous random variablecumulative distribution function (CDF) 则通常是通过PDF进行积分计算得出的结果。continuous random variable 被定义为在特定区间(a, b)内的任意一点都可能取值的随机现象;而random variable 则代表了一个或多个数值的结果。

x

概率密度函数代表一段区间(变量取值范围)的概率除以该段区间的长度,在数学领域中其导数就是这个分布函数,在数学上我们可以通过以下方式理解二者之间的关系:

联合概率密度与边缘概率密度的关系为:

二、抽样方法

科学的抽样方法有助于优化模型及其样本点分布的合理性。Copula函数最优选择是基于多元正态分布在生成相互关联的随机变量,并且这些随机变量遵循二元对数正态分布。

科学的抽样方法有助于优化模型及其样本点分布的合理性。Copula函数最优选择是基于多元正态分布在生成相互关联的随机变量,并且这些随机变量遵循二元对数正态分布。

1.蒙特卡罗方法**(Monte Carlo)**

即通过抛硬币和掷骰子等简单手段,在大量重复试验中获得事件发生的概率分布。这种方法特别适用于那些具有不确定性的现象或较为复杂的系统。由于整个过程完全是随机的,在统计足够多的数据后会发现样本主要集中在概率较高的区域附近。

2.拉丁超立方体抽样Latin hypercube sampling(LHS)

拉丁超立方体抽样被认为是当前最优的抽样技术之一。与传统方法相比,在概率分布非均匀的情况下表现出显著优势。具体而言,在处理正态分布等复杂概率模型时,该方法能有效提升计算效率和精度。基于此,在可靠性分析等工程领域中展现出卓越的应用价值。通过均匀划分区间独立选取样本点的方式进行数据采样,在保证统计精度的同时显著降低了计算成本和时间消耗。

第一个基于MATLAB的程序(威布尔分布):

复制代码
 % 基于拉丁超立方抽样的采样程序,对象是服从威布尔分布的变量

    
 clear;clc;close all;
    
 lambda = 1;
    
 k = 4;
    
  
    
 % 概率密度函数PDF
    
 y1 = @(x) k / lambda * (x/lambda)^(k-1) * exp(-(x/lambda)^k);
    
 fplot(y1, [0.1 10]);
    
  
    
 % 累积分布函数CDF
    
 CDF = @(x) 1 - exp(-(x/lambda).^k);
    
 figure
    
 fplot(CDF, [0.1 10]);
    
 x = 0 : 0.1 : 8;
    
 y2 = CDF(x);
    
  
    
 % 累积分布函数的反函数,用于计算最终样本值Value
    
 ICDF = @(x) lambda * (-log(1 - x)).^ (1/k);
    
 figure
    
 fplot(ICDF, [0.1 2]);
    
  
    
 %% 1.拉丁超立方抽取原始样本
    
 iterations = 20;                        % 抽样次数
    
 segmentSize = 1 / iterations;           % 每层大小
    
 for i = 0 : iterations-1                % 逐层随机抽样
    
     segmentMin = i * segmentSize;
    
     segmentMax = (i+1) * segmentSize;
    
     samplePoint(i+1) = segmentMin + rand() * segmentSize;
    
 end
    
 samplePoint = samplePoint(randperm(iterations));        % 乱序得到原始样本
    
  
    
 %% 2.映射得到最终样本
    
 Value = ICDF(samplePoint);
    
 figure
    
 axisY = zeros(size(Value));
    
 scatter(Value, axisY);
    
    
    
    
    代码解读

拉丁超立方采样的实例:生成服从威布尔/韦伯Weibull分布的拉丁超立方样本。其基本思想在于将均匀分布在[0,1]区间内划分为若干个等概率子区间,并将每个子区间对应到目标变量的空间中。例如,在生成Latin hypercube samples for Weibull distribution时,我们可以按照以下步骤操作:

https://zhuanlan.zhihu.com/p/387706079](https://zhuanlan.zhihu.com/p/387706079 "基于拉丁超立方采样的实例分析——对于遵循威布尔/韦伯Weibull分布的数据样本实施拉丁超立方采样方法 - 知乎 (zhihu.com)")

第二个基于MATLAB的程序(正态分布):

复制代码
 x = norminv(linspace(0+eps, 1, 10000), 5, 3);   %先生成10000个等间距点,间距为eps,是从 1.0 到下一个较大双精度数的距离,即 2-52。的行向量,然后取正态(高斯)分布的累加分布函数(cdf)逆函数norminv

    
 idx = randperm(length(x));     %对整个序列进行打乱
    
 y = x(idx);    %将打乱的序列编码赋值
    
  
    
 figure
    
 plot(y, '.')
    
  
    
 figure
    
 histogram(y, 'binwidth', 0.1)  
    
    
    
    
    代码解读

如果需要从相应的概率分布中获取样本,则可以通过计算该CDF的反函数来实现;然而,在matlab中,默认提供了多种概率分布的逆CDF(累积分布函数),因此无需按照数学定义进行计算。

[matlab中拉丁超立方抽样(逆变换法) (icode9.com)

在Matlab中采用拉丁超立方抽样的逆变换法 \(icode9.com\)

三、欧氏平方距离

标准化后的数据经过计算欧氏平方距离并进行一次简单的线性变换后所得的结果等价于皮尔逊相关系数。

欧氏距离的平方=2常数n(向量长度)(1-Pearson相关系数)

四、Pearson(皮尔逊)相关系数

1.定义

在处理标准化后的数据时,计算欧氏平方距离并进行线性变换等价于 Pearson 系数。同样地,在计算 Pearson 相关系数时也可以通过将协方差除以两个变量的标准差来实现。

如上图所示,实际上Pearson相关系数的本质就是在计算两个向量的余弦相似度之前对其进行标准化处理的结果。具体而言,在应用cos相似度公式cosθ = a·b / (|a|·|b|)时,首先要将两个向量分别减去各自的均值(即中心化),这使得该公式能够衡量两个用户的评分行为在整体水平上的相似程度。从实际应用的角度来看,在两个用户都对同一特征给出评分的维度下,他们相对于自身评分均值的偏离程度是否相近。

当随机变量X与Y呈正相关关系时(即X与Y的变化趋势一致),其相关系数值落在区间[0,1]之间。

当两个变量为负相关时(即两个变量的变化趋势相反),相关系数在-1~0;

2.适用范围

两个变量的总体是正态分布,且互相独立,都是线性相关连续数据。

3.MATLAB实现

复制代码
 % rho ρ Pearson线性相关系数

    
 % tau τ Kendall秩相关系数
    
 % rhos ρs Spearman秩相关系数
    
 % lambda λ 尾部相关系数
    
  
    
 rho = corr(X,Y ,'type','pearson');
    
 tau =  corr(X,Y , 'type' , 'kendall');
    
 rhos = corr(X,Y , 'type' , 'Spearman');  
    
    
    
    
    代码解读

深入解析皮尔逊相关系数(Pearson Correlation Coefficient):从统计学视角解读变量间关系

https://www.zhihu.com/question/19734616](https://www.zhihu.com/question/19734616 "如何理解皮尔逊相关系数(Pearson Correlation Coefficient)? - 知乎 zhihu.com")[(7条消息) MATLAB实现相关性度量:Pearson、Kendall、Spearman秩相关系数_WW、forever的博客-博客

探讨皮尔逊相关系数的意义与应用。

利用MATLAB计算相关性指标:包括皮尔逊(Pearson)、肯德尔(Kendall)和斯皮尔曼(Spearman)三种主要的相关系数。

WW、forever的博客-博客

基于MATLAB的实现框架用于评估不同消息集合之间的相关性分析结果。该系统主要包含三个关键模块:第一模块负责数据输入与初始化设置;第二模块完成数据预处理环节;第三模块则实现了三种不同的相关性计算方法——包括Pearson's r计算法、Kendall's tau排序相关系数计算法以及Spearman's rho非参数秩相关系数计算法等。系统运行时会自动调用这些模块并输出相应的统计结果表格。

五、用非参数法(核密度估计法)近似估计Copula分布类型

在统计分析中,面对一堆零散且无规律分布的数据时,在无法用已知分布准确描述这一现象的情况下,默认选择核密度估计法(Kernel Density Estimation, KDE)作为一种非参数化方法进行建模。与传统参数化方法不同的是,核密度估计法无需预先假定总体的分布形态,并能够直接有效地拟合出数据潜在的特征曲线,在实际应用中,热力图常被用来展示这种数据特征。该方法的核心在于两个关键参数的选择:首先是由用户指定的核函数形式;其次是由窗宽(window width)确定的重要参数bw(bandwidth)。其中窗宽的选择直接影响到拟合曲线的平滑程度:当窗宽h取较大的值时会使得最终生成的曲线更加平滑;但同时也可能导致我们丢失掉数据所包含的一些重要细节信息;反之则会在图像呈现上体现出更强的局部特性表现能力;但此时也会因为窗宽过小而导致整体图像不够光滑甚至出现过于波动的情况

[copula函数怎么用(copula函数教程)-天道酬勤-花开半夏 (zhangshilong.cn)

该文献指出:copula函数作为一种描述变量间依赖关系的关键工具,在金融工程学领域具有重要应用价值。
研究者进一步说明:根据变量间的依赖类型,copula函数主要分为对称类、非对称类及椭圆类三种主要类型。
其中一种常用且有效的方法即为极大似然估计法。
此外,在实际应用中发现:Copula相关系数则能够定量地衡量两个随机变量之间的相关程度。

[Copula理论与相关性分析_[全文定稿] - 道客巴巴 (doc88.com)

https://www.doc88.com/p-07239070568352.html?r=1

复制代码
 load Z.mat  %这个是功能函数输出的值

    
 Z1=Z(1:4955)  %这里的范围不对会报错,有点奇怪。
    
 Z=round(Z1); %四舍五入
    
  
    
 %% 计算并绘制在一组指定值下估算的cdf。
    
 pts = (min(Z):1:max(Z));  %从最小的重量到最大的重量,以2为分隔。
    
 figure()   %制造一个图框。
    
 ecdf(Z)  %在图框上显示经验累积分布
    
 hold on
    
 [f,xi,bw] = ksdensity(Z,pts,'Support','unbounded',...
    
 	'Function','cdf');   %xi跟pts一样是等间距点。f是分布函数估计。bw是内核平滑窗口的带宽,默认带宽是正常密度的最佳带宽。
    
 plot(xi,f,'-g','LineWidth',2)  %绿色的线是核密度估计法
    
 legend('empirical cdf','kernel-bw:default','Location','northwest')
    
 xlabel('Patient weights')
    
 ylabel('Estimated cdf')
    
    
    
    
    代码解读

全部评论 (0)

还没有任何评论哟~