相关性分析--copula

相关性分析–copula


前言

在项目需求运用了线性分析、皮尔逊相关系数、马氏距离等多种分析方法之后,无法得到精确度较高的预测结果,遂学习一下copula模型

一、copula是什么?

形象的说,我们可以把copula函数叫做“连接函数”或“相依函数”,它是把多个随机变量的联合分布与它们各自的边缘分布相连接起来的函数。

在这里插入图片描述
Sklar定理
令F(·,·)为具有边缘分布F(·)的联合分布函数,那么存在一个Copula函数C(·,·),满足
在这里插入图片描述

边缘分布:假设有一个和两个变量相关的概率分布:p(x,y),关于其中一个特定变量的边缘分布则为给定其他变量的条件概率分布:P(x) = ∑ y \sum_{y} yP(x,y) = ∑ y \sum_{y} yP(x|y)P(y)
联合分布可以唯一决定边缘分布,但边缘分布不一定能决定联合分布
边缘密度的乘积等于联合密度

二、相关系数

1.提出问题

对于两个变量之间的相关性关系,我们可以利用相关系数ρ来度量,但是,我们看下面的问题:

若x~N(0,1),y= x² ,显然x,y关系密切
则cov(x,y) = E(xy)-E(x)E(y)=E( x 3 x^3 x3)-E(x)E( x 2 x^2 x2)=0

当变量间的关系是非线性时,用相关系数来度量其关系是不可靠的,而Copula函数在一定范围内就可以避免这个问题。

2.基于Copula函数的相关性测度

2.1.定理

对随机变量 x 1 x_{1} x1, x 2 x_{2} x2,…, x n x_{n} xn做严格的单调增变换,相应的Copula函数不变。

  1. Kendall秩相关系数 τ \tau τ
  2. Spearman秩相关系数 ρ \rho ρ
  3. Gini关联系数 γ \gamma γ

1.Kendall秩相关系数 τ \tau τ:(描述变化趋势)指设有n个统计对象,每个对象有两个属性的系数。将所有统计对象按属性1取值排列,不失一般性,设此时属性2取值的排列是乱序的。设P为两个属性值排列大小关系一致的统计对象对数。则:
R=(P-(n*(n-1)/2-P))/(n*(n-1)/2)=(4P/(n*(n-1)))-1

( x 1 x_1 x1, y 1 y_1 y1)和( x 2 x_2 x2, y 2 y_2 y2)为独立同分布的随机向量
Kendall秩相关系数可以有Copula函数给出:
τ \tau τ = 4 ∫ 1 0 \int_1^0 10 ∫ 1 0 \int_1^0 10C(u,v)dC(u,v)-1

2. Spearman秩相关系数 ρ \rho ρ:用来度量两个变量之间联系的强弱,是一种非参数的统计相关性测度,一般用 ρ \rho ρ表示,它所衡量的是两个变量有多大程度可以用单调函数描绘。如果没有重复点,且两个变量单调相关时,Spearman相关系数为+1或者−1

( x 1 x_1 x1, y 1 y_1 y1)和( x 2 x_2 x2, y 2 y_2 y2), ( x 3 x_3 x3, y 3 y_3 y3)为独立同分的随机向量,由相应的Copula函数来表示如下:
ρ \rho ρ = 12 ∫ 1 0 \int_1^0 10 ∫ 1 0 \int_1^0 10uvdC(u,v)-3 = 12 ∫ 1 0 \int_1^0 10 ∫ 1 0 \int_1^0 10C(u,v)dC(u,v)-3

3.Gini关联系数 γ \gamma γ τ \tau τ ρ \rho ρ只考虑了随机变量变化方向的一致性和不一致性,而Gini关联系数则更细致地考虑了随机变量变化顺序的一致性和不一致性。

公式太复杂,暂放

3.模型构建

两阶段法:
1、确定边缘分布
2、选取一个适当的Copula函数,以便能很好地描述出随机变量之间的相关结构。
在这里插入图片描述

………………没看完,不写了,别骂了别骂了

  • 6
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SJC-Copula模型是一种用于估计多维随机变量的联合分布的统计模型。它基于Copula函数的概念,通过将子模型中的多个边缘分布通过Copula函数结合起来,得到了更复杂的联合分布模型。 以下是一个简单的SJC-Copula模型的程序代码示例: ```python # 导入所需的库 import numpy as np from scipy import stats # 定义子模型的边缘分布函数 def marginal_model(x): # 这里以正态分布为例,可以根据具体情况选择其他分布 return stats.norm.pdf(x, 0, 1) # 定义Copula函数 def copula_model(u): # 这里以Clayton Copula为例,可以根据具体情况选择其他Copula函数 theta = 2 # Clayton Copula的参数 return (u ** (-theta) - 1) ** (-1 / theta) # 定义SJC-Copula模型 def sjc_copula_model(x): # 计算每个子模型的边缘分布 marginal_distributions = [marginal_model(xi) for xi in x] # 计算每个子模型的累积分布函数 marginal_cdfs = [np.cumsum(marginal_distribution) for marginal_distribution in marginal_distributions] # 将子模型的累积分布函数转换为[0, 1]区间的概率值 u = [marginal_cdf(xi) for xi, marginal_cdf in zip(x, marginal_cdfs)] # 计算Copula函数的值 copula_value = copula_model(u) # 根据Copula函数的值计算联合分布的概率密度函数 joint_pdf = np.prod(marginal_distributions) * copula_value return joint_pdf # 示例用法 x = np.array([1, 2, 3]) # 输入随机变量的取值 joint_pdf = sjc_copula_model(x) print(joint_pdf) ``` 这段代码实现了一个简单的SJC-Copula模型,其中包含了子模型的边缘分布函数、Copula函数和SJC-Copula模型的计算步骤。通过输入随机变量的取值,即可求得这些随机变量的联合分布的概率密度函数。请注意,这只是一个简化的示例代码,实际应用中可能需要更复杂的模型和计算过程。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值