三大相关系数


皮尔森系数


重点关注第一个等号后面的公式,最后面的是推导计算,暂时不用管它们。看到没有,两个变量(X, Y)的皮尔森相关性系数(ρX,Y)等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX, σY)。

公式的分母是变量的标准差,这就意味着计算皮尔森相关性系数时,变量的标准差不能为0(分母不能为0),也就是说你的两个变量中任何一个的值不能都是相同的。如果没有变化,用皮尔森相关系数是没办法算出这个变量与另一个变量之间是不是有相关性的。
 皮尔森相关系数(Pearson correlation coefficient)也称皮尔森积矩相关系数(Pearson product-moment correlation coefficient) ,是一种线性相关系数。皮尔森相关系数是用来反映两个变量线性相关程度的统计量。相关系数用r表示,其中n为样本量,分别为两个变量的观测值和均值。r描述的是两个变量间线性相关强弱的程度。r的绝对值越大表明相关性越强。
简单的相关系数的分类
0.8-1.0 极强相关
0.6-0.8 强相关
0.4-0.6 中等程度相关
0.2-0.4 弱相关
0.0-0.2 极弱相关或无相关

 r描述的是两个变量间线性相关强弱的程度。r的取值在-1与+1之间,若r>0,表明两个变量是正相关,即一个变量的值越大,另一个变量的值也会越大;若r<0,表明两个变量是负相关,即一个变量的值越大另一个变量的值反而会越小。r 的绝对值越大表明相关性越强,要注意的是这里并不存在因果关系。

spearman correlation coefficient(斯皮尔曼秩相关性系数)

斯皮尔曼相关性系数,通常也叫斯皮尔曼秩相关系数。“秩”,可以理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解,这种表征形式就没有了求皮尔森相关性系数时那些限制。斯皮尔曼相关系数的计算采用的是取值的等级,而不是取值本身。例如,给定三个值:33,21,44,它们的等级就分别是2,1,3.  计算斯皮尔曼相关系数的公式与计算皮尔森相关系数的类似,但用等级代替了各自的取值。下面来看一下它的计算公式:

 

 

相对于皮尔森相关系数,斯皮尔曼相关系数对于数据错误和极端值的反应不敏感。

斯皮尔曼相关系数的另一种公式表示如下:

计算过程就是:首先对两个变量(X, Y)的数据进行排序,然后记下排序以后的位置(X’, Y’),(X’, Y’)的值就称为秩次,秩次的差值就是上面公式中的di,n就是变量中数据的个数,最后带入公式就可求解结果

带入公式,求得斯皮尔曼相关性系数:ρs= 1-6*(1+1+1+9)/6*35=0.657

而且,即便在变量值没有变化的情况下,也不会出现像皮尔森系数那样分母为0而无法计算的情况。另外,即使出现异常值,由于异常值的秩次通常不会有明显的变化(比如过大或者过小,那要么排第一,要么排最后),所以对斯皮尔曼相关性系数的影响也非常小!

由于斯皮尔曼相关性系数没有那些数据条件要求,适用的范围就广多了。

kendall(肯德尔和谐相关系数)

肯德尔相关性系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。

以下用W表示肯德尔和谐系数

(1)同一评价者无相同等级评定时,W的计算公式:

(1)式中:N—被评的对象数; K—评分者人数或评分所依据的标准数;S—每个被评对象所评等级之和Ri与所有这些和的平均数的离差平方和,即当评分者意见完全一致时,S取得最大值可见,和谐系数是实际求得的S与其最大可能取值的比值,故0≤W≤1。

(2)同一评价者有相同等级评定时,W的计算公式:

2)式中K、N、S的意义同(1)式,这里为第i个评价者的评定结果中有重复等级的个数,为第i个评价者的评定结果中第j个重复等级的相同等级数。对于评定结果无相同等级的评价者,= 0,因此只须对评定结果有相同等级的评价者计算Ti。

分类变量可以理解成有类别的变量,可以分为
无序的,比如性别(男、女)、血型(A、B、O、AB);
有序的,比如肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)。
通常需要求相关性系数的都是有序分类变量。

Nc表示主客观评价值中一致的值的个数,Nd则表示了主观评估值和客观评估值不一样的个数 

举个例子。比如评委对选手的评分(优、中、差等),我们想看两个(或者多个)评委对几位选手的评价标准是否一致;或者医院的尿糖化验报告,想检验各个医院对尿糖的化验结果是否一致,这时候就可以使用肯德尔相关性系数进行衡量。

代码实现

import pandas as pd
  
df = pd.DataFrame({'A':[5,91,3],'B':[90,15,66],'C':[93,27,3]})
  
print(df.corr())
  
print(df.corr('spearman'))
  
print(df.corr('kendall'))
  
df2 = pd.DataFrame({'A':[7,93,5],'B':[88,13,64],'C':[93,27,3]})
  
print(df2.corr())
  
print(df2.corr('spearman'))
  
print(df2.corr('kendall'))
import numpy as np
  
vc=[1,2,39,0,8]
  
vb=[1,2,38,0,8]
  
print(np.mean(np.multiply((vc-np.mean(vc)),(vb-np.mean(vb))))/(np.std(vb)*np.std(vc)))
  
#corrcoef得到相关系数矩阵(向量的相似程度)
  
print(np.corrcoef(vc,vb))
from scipy.stats import pearsonr, kendalltau, spearmanr

import numpy as np
  
vc=[1,2,39,0,8]
  
vb=[1,2,38,0,8]
print(spearmanr(vc,vb))
print()
print(kendalltau(vc,vb))
print()
print(pearsonr(vc,vb))


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM