Spearman’s rank correlation coefficient的简单理解1. 背景在统计学中斯皮尔曼等级相关系数Spearman’s rank correlation coefficient 或者Spearman’sρ\rhoρ 通常使用ρ\rhoρ或者rsr_srs​来表示是一个等级相关性的非参数度量两个变量等级之间的统计相关性。这个相关系数使用单调函数来描述两个变量之间的关系程度。如果两个变量的Spearman correlation和Pearson correlation相等Person correlation评估两组变量的线性关系Spearman correlation评估的是两组变量的单调性关系无论是否线性。如果没有重复的数据值每个变量都是另外一个变量的完美单调函数时会出现1或者-1的完美Spearman correlation。直观上来看如果两个变量之间具有相似的等级或者换句话说完全相同的等级那么相关性就为1相似的情况下相关性也会比较高如果两个变量具有不同的等级或者完全相反的情况下那么相关性就为-1相关性就会非常低。那么Spearman’s coefficient适用于连续序数变量或者离散序数变量的相关性表示2.定义Spearman’s rank correlation coefficient被定义成等级变量之间的Pearson coefficient。对于样本容量为n的样本将n个原始数据XiX_iXi​,YiY_iYi​转换成等级数据rgXirg_{X_i}rgXi​​,rgYirg_{Y_i}rgYi​​并且rsr_srs​可以按照如下的公式进行计算rsρrgXi,rgYicov(rgX,rgY)σrgXσrgYr_s \rho_{rg_{X_i},rg_{Y_i}}\frac{cov(rg_X, rg_Y)}{\sigma_{rg_X}\sigma_{rg_Y}}rs​ρrgXi​​,rgYi​​​σrgX​​σrgY​​cov(rgX​,rgY​)​其中ρ\rhoρ表示的是Pearson correlation coefficientPCC但是使用的变量是转换成等级后的变量。cov(rgX,rgY)cov(rg_X, rg_Y)cov(rgX​,rgY​)是转换成等级变量之间的协方差σrgX\sigma_{rg_X}σrgX​​,σrgY\sigma_{rg_Y}σrgY​​是转换成等级变量后的标准差只有当所有n个等级都是不同的整数是才可以使用下面的公式进行计算rs1−6∑di2n(n2−1)r_s1-\frac {6\sum{d_i^2}}{n(n^2-1)}rs​1−n(n2−1)6∑di2​​其中djrg(Xi)−rg(Yi)d_jrg(X_i)-rg(Y_i)dj​rg(Xi​)−rg(Yi​)是两个变量值等级之间的差异3.代码实现很简单的代码实现defComputeRs(a,b):aanp.column_stack((a,b))# rank的方式有很多种这里使用的average的方式aa_rankednp.apply_along_axis(stats.rankdata,0,aa)rsnp.corrcoef(aa_ranked,rowvar0)returnrs[1,0]4. Spearman‘s rank correlation coefficient 与Pearson Correlation coeffiicient的区别最主要的区别是Pearson Correlation coeffiicient是关注的两组数据的线性相关性Spearman‘s rank correlation coefficient 是关注两组数据的单调性换句话说是两组数据的趋势4.1 线性正相关4.2 线性负相关4.3 非线性函数Sigmoid可以看到Spearman还是相关性几乎为14.4 非线性函数二次函数4.5 随机数4.6 异常值总结从4.6上可以看出一旦数据存在异常值那么Spearman‘s rank correlation coefficient的鲁棒性会更好一些。