本文的诞生是由于一个朋友在做科研时遇到的一个场景所引出的,场景是这样的: 已知有两组变量X和Y,每组变量都是已知其边缘分布概率密度函数的(比如一组满足正态分布,一组满足对数正态分布),且这两组变量是一定存在相关性的,如何求它们的联合分布函数或联合概率密度函数呢?
在思考这个问题时,不难想到如果这两个变量如果一定互相独立互不相关的话(独立一定不相关,不相关却不一定独立),那联合概率密度则可以由所学概率论的知识进行求解,这里的新变量Z就等于XY了,然后分布函数就为F(z) = P(z<=Z=XY)了,在计算过程中一定可以知道和用到P(XY)=P(x)P(Y),所以这即就是可以求解的,但是这个场景是这两个变量存在相关性,即P(X|Y)不为0,所以找不到条件概率密度函数
,常规方法就无法求解了,那怎么办呢?
经过查阅资料,在概率统计领域存在Copula(外文翻译是连接)这样的一种理论,它诞生的初衷就是用来在一定程度上解决这种场景问题的,后来经过推荐给朋友后,正是这种方法解决了他的燃眉之急,所以有必要深入研究下这个理论,以便后续应用
数学家Sklar提出了一个观点:一个N维的联合分布函数是可以分解成N个不同维度的边缘分布函数和一个Copula函数的,其中这个Copula函数是描述各个变量间的相关性的。在后续数学家的研究下,Copula函数有如下定义:
假设N维随机向量{
,
,...,
}的联合分布函数为
,每一个维度各自的边缘分布函数为
,
,...,
,则Copula函数
为N维,且满足
取维数N=2,很明显,因为Copula函数是自变量为分布函数的函数,故其定义域为
,且满足
(如果某一维度的边缘分布是1的话说明是确定性事件)
独立Copula的散点图
还有两个重要的性质,Copula函数是存在值等于0的零基面的,且是二维递增的,即
和
满足定义域情况下使得
自变量的取值分布函数一定是增函数
满足这些性质条件的才被称为是Copula函数,这样的Copula函数有几个优良的性质:
,
,则一定有
,且称
为函数上下界(Frechet上下界)
所以Copula函数C(u,v)是联合概率分布的表达形式,只是自变量是各个边缘分布函数而已
以上的二元性质可以推广到多元
其分布函数表达式为
这里的
为各个维度计算出的相关系数矩阵,对角线为1,
是标准正态分布的逆函数,
为N元标准正态分布的分布函数(和
有关)
一般来说多个有相关性的正态分布的联合分布函数不为标准正态联合分布,所以和N元标准正态分布不一样,但N元标准正态分布可以很好地刻画相关性,所以选用作为Copula的函数体,如此一来则自变量就需要用到对应分布函数的逆函数来平衡,以下的原理亦然
其概率密度为
其中
为向量
和上一个函数一样,这里是选用学生t分布作为变量构成的函数,其分布函数表达式为
这里的
为自由度为k的一元学生t分布的分布函数的逆函数,t_{\rho,k}表示相关系数为
,自由度为k的标准N元学生t分布
其概率密度函数和伽玛函数相关,因为本身t分布的概率密度就和伽玛函数相关,比较复杂
前面两种Copula函数都是根据某些著名的分布函数确定的,含义特定的超参数,比如
,k等,而阿基米德Copula函数则更加灵活,它引入了一个为生成元的概念,这里的生成元是一个凸的减函数,其反函数在定义域内连续并且单调非增,用
表示,则这里的Copula函数为
所以可以看出阿基米德Copula函数是更一般的情况,上面两种只是其中的两种生成元生成的Copula函数而已
一般来说较为常用的生成元
有
具体用哪个函数可以根据实际的数据分布和效果来确定,
为待估计的参数
以上就是常用的Copula函数,但是不难发现每种函数都是会有待估计的参数的,说明Copula本身不是非参数估计的方法,需要用到一些参数估计的方法来确定其参数以使得吻合效果更好
众所周知,一般来说参数估计会有矩估计法和极大似然估计法两种,针对Copula函数的参数估计由于其求矩估计量比较复杂不易求出参数估计值,所以一般选用最大似然估计,分布估计和半参数估计等
假设X,Y的边缘分布函数为
,
,选用的Copula函数为
,所以其(X,Y)的联合分布函数为
其联合概率密度为
分布是X,Y的概率密度函数
则对数似然函数为
故这里的估计量为
以上和概率论所学方法一致
和极大似然不同,先求
的估计值,即
则此时再估计\hat{\alpha},为
这种策略相对来说计算量较小,但却不一定是全局最优
我们知道,样本经验分布函数是由样本容量在一定程度上确定的,它是没有任何参数的,所以半参数估计也即将所涉及的分布函数更改为大样本确定的样本经验分布函数,则此时只用估计Copula的参数
即可,而不用去估计
,这样做在样本量很大或者分布函数较为难以精确求出时可以选用
得到具体的参数估计值后,就可以用该参数进行对应Copula函数的计算,以此算出的联合概率分布就视作两相关变量的联合概率分布,然后进行模型最终检验即可
Copula函数的出现对于无法量化条件概率密度的场景非常有用,且概率统计中一般也是需要严格的进行假设检验并且通过过后才能实现下一步应用,而Copula函数是将函数的表达形式求解转化成经验函数的具体超参数的估计,这样一来其实就已经克服了假设检验去真这一步,并且这个函数在matlab,python等科学计算库里面都有实现,所以不失为一个很好的思路,加油!此外,Copula 函数在经济与金融领域,信号处理领域有广泛的应用。