三种常用相关系数

Pearson 相关系数

定量数据采用Pearson相关系数求解,该相关系数其实就是大家学概率论时第一此接触到的相关系数:

ρX,Y=cov(X,Y)σXσY\rho_{X,Y}=\frac{cov(X,Y)}{\sigma_X\sigma_Y}

在计算时采用样本协方差和标准差[1]

r=i=1n(XiX)(YiY)i=1n(XiX)2i=1n(YiY)2r = \frac{\sum_{i=1}^n(X_i-\overline X) (Y_i-\overline Y)} {\sqrt{\sum_{i=1}^n(X_i-\overline X)^2} \sqrt{\sum_{i=1}^n(Y_i-\overline Y)^2}}

在数据标准化后,Pearson相关性系数,Cosine相似度,欧式距离平方可认为是等价的[2]

Spearman 相关系数

Spearman相关系数是两个变量XX,YY对应的等级变量xx,yy的pearson相关系数。

如何求解等级变量[3]

XX,YY数据如下:

XXYY
1067
860
10027
10150

等级变量计算如下:

  1. 排序XX,创建新列xx并赋等级值
  2. 先不考虑XXYY的对应性,独立排序YY,并附等级值
  3. 重新考虑XXYY的对应性,创建新列yy并将得到的等级值放到对应位置
XXYYxxyy
86011
1002723
1015034
106742

附录中提供了求解spearman相关系数的matlab函数,里面详细描绘了等级变量的求解过程

Pearson和Spearman的区别

广义的相关性是描述一个变量跟随另一个变量单调变化的程度。
Pearson相关系数只描述线性关系,而Spearman只描述单调关系。
下图[4]可以很好地反映这两种相关系数的区别
pearson vs spearman

例如,设变量XXYY是多项式关系,即令Y=XnY=X^n,下图[5]反映当n从1增加到50时,两种相关系数的变化曲线:
pearson vs spearman
可以发现,当n>1n>1时,XX,YY脱离线性关系,Pearson相关系数迅速减小;但是此时YYXX仍然保持良好的单调关系,所以Spearman相关系数保持不变。
另外当两个变量的相关性越小,其Pearson和Spearman相关系数就越接近

XX为一总体,将一容量为nn的样本观察值按自小到大的次序编号排列成

x(1)<x(2)<...<x(n)x_{(1)} < x_{(2)} < ... < x_{(n)}

x(i)x_{(i)}的足标iix(i)x_{(i)}的秩,i=1,2,...,ni=1,2,...,n[6]

所以spearman相关性本质上是数据秩排列的Pearson相关性

Pearson和Spearman相关系数的应用场景[7]

(1)连续数据,正态分布,线性关系,用pearson相关系数是最恰当,当然用spearman相关系数也可以,但效率没有pearson相关系数高。
(2)上述任一条件不满足,就用spearman相关系数,不能用pearson相关系数。
(3)两个定序测量数据之间也用spearman相关系数,不能用pearson相关系数。

Kendall Rank 相关系数

设两个随机变量XXYY,这两个随机变量构成的某个样本对表示为:(xi,yi)(x_i,y_i),定义:

  1. 一致:xi>xjx_i > x_jyi>yjy_i > y_j 或者 :xi<xjx_i < x_jyi<yjy_i < y_j
  2. 不一致:xi>xjx_i > x_jyi<yjy_i < y_j 或者 :xi<xjx_i < x_jyi>yjy_i > y_j
  3. 既一致又不一致:xi=xjx_i = x_jyi=yjy_i = y_j

CC为一致样本的对数,DD表示不一致样本的对数(注意是对的数目,不是log运算)
则Kendall Rank相关系数可计算为:

τ=CD12N(N1)\tau = \frac{C-D}{\frac{1}{2}N(N-1)}

主要用于分类变量的相关性分析

附录

Spearman相关系数matlab函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function r = spearman(x,y)
% spearman - 求解spearman相关系数
% 输入参数:
% x, y - 待求相关系数的数据
% spearman相关系数是对等级变量求解的pearson相关系数

% 等级排序
[xSort,xIndex] = sort(x);
xRank = 1:length(xSort);
[ySort,yIndex] = sort(y);

yReverseIndex = zeros(1,length(ySort));
yReverseIndex(yIndex) = 1:length(ySort);

yRank = yReverseIndex(xIndex);

% 计算两等级的Pearson相关性
xRankAvr = mean(xRank);
yRankAvr = mean(yRank);

numerator = sum(...
(xRank - xRankAvr) .* ...
(yRank - yRankAvr));

denominator = sqrt(...
sum((xRank - xRankAvr).^2) .* ...
sum((yRank - yRankAvr).^2) );

r = numerator / denominator;
end

  1. https://zh.wikipedia.org/wiki/皮尔逊积矩相关系数 ↩︎

  2. https://www.zhihu.com/question/19734616/answer/174098489 ↩︎

  3. https://en.wikipedia.org/wiki/Spearman's_rank_correlation_coefficient ↩︎

  4. https://en.wikipedia.org/wiki/File:Spearman_fig1.svg ↩︎

  5. https://www.jianshu.com/p/d0085a1e0f26 ↩︎

  6. 盛骤, 谢式千. 概率论与数理统计(第四版). 高等教育出版社. pp.208 ↩︎

  7. https://www.zhihu.com/question/52038512/answer/128984393 ↩︎

0%