前言

    我们在分析两组变量之间的相关性时,比如


,最原始的方法就是直接计算X和Y的协方差矩阵,矩阵有m*n个值。有了协方差矩阵就得到了两两变量之间的相关性,比如c_ij就是变量X_i和Y_j的相关性。

    这种分析方法只考虑了c_ij变量X_i和Y_j变量单个维度之间的相关性,没有考虑X和Y内部之间的相关性。另外协方差矩阵的形式也比较繁琐。

典型相关分析

    采用类似主成分分析的思想,分别找出两组变量各自的线性组合,然后讨论线性组合之间的相关关心。

    分别在两组变量中找出第一对线性组合,使他们具有最大相关性;接着再分别在两组变量中找出第二对线性组合,使他们具有第二大的相关性,并且它们分别于本组内的第一线性组合不相关。以此类推找出其他线性组合,如下面提取两对线性组合,其中 u_1 u_2互相独立,v_1 v_2互相独立,u_1 v_1相关。


假设提取了r次,则最后提取了r组变量,


Python 计算两两变量之间的相关性 计算两个变量的相关性_Python 计算两两变量之间的相关性

则实现通过线性组合来表示原变量,并且用他们之间的相关性来表示原变量的相关性。

本质是什么

    典型相关分析的本质是从两组变量中选取若干个有代表性的变量线性组合,用这些线性组合的相关性来表示原来两组变量的相关性。


求解线性组合

    以第一组线性组合为例,这里要求解的就是包含的系数。


Python 计算两两变量之间的相关性 计算两个变量的相关性_Python 计算两两变量之间的相关性_02

矩阵形式为,


Python 计算两两变量之间的相关性 计算两个变量的相关性_相关分析_03

只考虑方差为1时的线性函数,这时其实就存在一个约束条件,

Python 计算两两变量之间的相关性 计算两个变量的相关性_相关分析_04

,我们求常向量

Python 计算两两变量之间的相关性 计算两个变量的相关性_相关分析_05

,使得相关系数

Python 计算两两变量之间的相关性 计算两个变量的相关性_方差_06

达到最大。方差分别为,

Python 计算两两变量之间的相关性 计算两个变量的相关性_协方差矩阵_07

则u_1 v_1的协方差为,


Python 计算两两变量之间的相关性 计算两个变量的相关性_方差_08

另外我们还有,


Python 计算两两变量之间的相关性 计算两个变量的相关性_协方差矩阵_09

两者的相关系数为,


Python 计算两两变量之间的相关性 计算两个变量的相关性_相关分析_10

我们要做的是寻找a_1 b_1使相关系数最大,同时要考虑前面说到的约束条件D(u_1) = D(v_1) = 1,它能防止结果重复出现,则相关系数变为,


Python 计算两两变量之间的相关性 计算两个变量的相关性_协方差矩阵_11

求条件极值一般可以引入拉格朗日乘数来求极大值,求解出a_1^T b_1^T。

对于其他组的线性组合也同样根据上述过程得到解。

线性组合数量

    根据线性组合相关性大小不断提取线性组合,最大的为第一组,次大的为第二组,以此类推直到 r<min(m,n) 组提取完。


怎么分析

    比如第一组线性组合中,可以计算两组变量与u1和v1的相关系数,如果某若干个变量与u1相关系数较大,则u1代表该若干变量的总指标,可以自己根据变量取个额外的名称。而同样如果v1和其他若干变量的相关系数较大的话则v1可代表该若干变量。

    接着如果u1和v1的相关系数较大的话则说明u1代表的若干变量与v1代表的若干变量是关系密切的。对于其他线性组合也一样,先找出u2和v2相关的若干变量,然后再看u2与v2之间的相关系数,判断其是否相关。