斯⽪尔曼相关(Spearmancorrelation)系数概述及其计算例⽬录
1. 什么是秩相关系数?
外贸业务员英文简历秩相关系数(Coefficient of Rank Correlation),⼜称,反映的是两个随机变量的的变化趋势⽅向和强度之间的关联,是将两个随机变量的样本值按数据的⼤⼩顺序排列位次,以各样本值的位次代替实际数据⽽求得的⼀种。它是反映等级相关程度的统计分析指标,常⽤的等级相关分析⽅法有和等。主要⽤于数据分析。
这⾥的秩是啥意思呢?我第⼀次看到这个词的时候第⼀感是它跟矩阵的秩(Rank)有啥关系,没有关系。这⾥是秩序的秩,或者说排名、顺序、等级的意思(写成ranked或者ranking的话就不容易误解了)。
考虑两个随机变量X和Y,如果秩相关系数为正,则Y 随着X的增加⽽增加;如果秩相关系数为负,则Y随着X的增加⽽减⼩;如果秩相关系数为0,则表⽰随着Y的增减变化跟X的增减变化没啥关系。当Y和X越来越接近严格单调的函数关系时,秩相关系数在数值上就越来越⼤。当秩相关系数为1或者-1时,就表明Y随着X的增加⽽严格单调增加或单调减⼩。
在实际应⽤中,有时获得的原始资料没有具体的数据表现,只能⽤等级来描述某种现象,要分析现象之间的相关关系,就只能⽤秩相关系数。
2. 单调性,monotonicity
为了理解斯⽪尔曼相关系数,⾸先需要了解什么是单调性和单调函数。⼀个单调函数是指随着它的⾃变量(independent variable)增⼤,函数值(因变量)要么总是增⼤(单调递增)要么总是变⼩(单调递减),⽽不会有时变⼤、有时变⼩(不是单调函数)。
如上图所⽰,左图代表的是⼀个单调递增函数,中间图代表的是⼀个单调递减函数,⽽右边的图所代表的函数则不是单调函数。
3. 斯⽪尔曼秩相关系数
斯⽪尔曼秩相关系数(The Spearman’s rank coefficient of correlation),简称斯⽪尔曼相关系数,是秩相关(rank专业英语在线翻译
correlation)的⼀种⾮参数度量(nonparametric measure)。得名于英国统计学家Charles Spearman,
通常记为希腊字母‘ρ’ (rho)( often called Spearman's rho)或者。
在讨论斯⽪尔曼相关系数之前,⾸先要理解⽪尔逊相关(Pearson’s correlation),斯⽪尔曼相关可以看作是⽪尔逊相关的⾮参数版本(nonparametric version)。⽪尔逊相关是关于两个随机变量之间的线性关系强度的统计度量(statistical measure),⽽斯⽪尔曼相关考察的是两者单调关系(monotonic relationship)的强度,通俗地说就是两者在变⼤或变⼩的趋势上多⼤程度上保持步调⼀致,哪怕没有保持⽐例关系。计算⽪尔逊相关系数时使⽤的是数据样本值本⾝,⽽计算斯⽪尔曼相关系数使⽤的是数据样本排位位次值(有时候数据本⾝就是位次值,有时候数据本⾝不是位次值,则在计算斯⽪尔曼相关系数之前要先计算位次值)。
4. 什么时候使⽤斯⽪尔曼秩相关系数呢?
能够适⽤⽪尔逊相关的场合当然是优先使⽤⽪尔逊相关,但是在有些场合,⽪尔逊相关所需要的前提假设不能得到满⾜,这是就可以考虑使⽤斯⽪尔曼相关,⽐如说以下⼀些情况下:
1. 如果你的数据展现的是⾮线性关系,或者不是正态分布的。
2. 如果⾄少有⼀⽅数据是序数类型(ordinal)⽽⾮数值类型。⽐如说,如果数据的赋值为"第⼀、第⼆、第三、... "你就是在处理序数类
型数据。更具具体⼀点的例⼦就是,⽐如说你考察两个球队在历年联赛中的战绩之间的关系,那么你得到的数据可能是这样的:A队在2010~2020年间的联赛排名为{1,2,4,5,...,2}, B队在2010~2020年间的联赛排名为{2,1,3,6,...,4}。这两个数据就是序数类型的数据,考察它们的相关性你使⽤⽪尔逊相关系数就不妥当
3. 如果数据中有明显的异常值(outliers)。与⽪尔逊相关不同,斯⽪尔曼相关对于异常值不太敏感,因为它基于排序位次进⾏计算,实
际数值之间的差异⼤⼩对于计算结果没有直接影响
⽐如说,你可以利⽤斯⽪尔曼相关来寻找针对以下⼀些问题的答案:
1. 受教育⽔平更⾼的⼈更关⼼环境吗?
2. 患者的症状数与他们服药的意愿有关系吗?
3. 球队的联赛成绩(名次)与他们所在城市的经济发展⽔平有关系吗?
英文报纸
5. 斯⽪尔曼秩相关系数计算公式
取决于观测数据中有没有位次相同的数据(the same rank assigned to two or more obrvations),斯⽪尔曼相关系数可以以以下两种⽅法之⼀进⾏计算。
当没有位次相同的数据时,可以⽤⼀个更简单的公式,如下所⽰:
cnn是什么意思其中:
di 表⽰第i个数据对的位次值之差
n 总的观测样本数
如果观测样本中存在位次相同的数据,则需要使⽤如下所⽰的全版本的计算公式:
其中:
R(x) 和 R(y) 分别是x和y的位次
和 分别表⽰平均位次
6. 斯⽪尔曼秩相关系数计算例
在很多软件⼯具或者⼯具库⾥都有各种相关系数的计算。在以下Ref1中介绍了在Excel中如何计算斯⽪尔曼相关系数,有兴趣的⼩伙伴可以参考。
6.1 ⼿动计算
在Ref2中给出了⼀个⼿动计算例(最低限度的⼿动计算对于掌握⼀个新的概念是绝对必要的,⼿动计算能帮助更加深刻地理解本质),如下表所⽰:
英语培训班这是9个学⽣的历史和地理的成绩和排名,每⼀⾏从左到右分别历史科⽬的分数、历史成绩中的排名、地理科⽬的分数、地理成绩中的排名,排名位次之差、排名位次的平⽅。由于数据中没有位次相同的数据,所以可以⽤简单版本的公式进⾏计算,如下所⽰:
这个结果意味着这9个学⽣历史成绩排名和地理成绩呈现出很强的单调关系,即历史成绩好⾮常⼤概率地理成绩也⾮常好,反之依然。其实⽬测上表也基本上可以得出这个印象。只不过斯⽪尔曼相关系数把这种印象进⾏精确的量化。
6.2 scipy函数
以下介绍scipy中计算斯⽪尔曼相关系数的函数scipy.stats.spearmanr的使⽤例。
scipy.stats.spearmanr(a, b=None, axis=0, nan_policy='propagate', alternative='two-sided')
函数调⽤接⼝请参阅scipy⽂档,这⾥只介绍⼀些要点。
该函数返回的结果除了相关系数外,还包含⼀个p值,⼤致来说就是表⽰由完全不相关系统所⽣成的数据能够计算得出跟当前待测数据对所计算结果相当的斯⽪尔曼相关系数的概率有多⼤。P值不是完全可靠的,但是对于⼤于500的数据集其估计结果基本还是合理的。
计算例1:调⽤scipy函数计算以上数据的斯⽪尔曼相关系数。
不言而喻英文import numpy as np
新西兰留学注意事项
from scipy import stats
stats.spearmanr([3,5,1,6,7,2,8,9,4], [5,3,2,6,8,1,7,9,4])
结果:SpearmanrResult(correlation=0.9, pvalue=0.0009430623223403293)
ratherthan得到了跟⼿动计算相同的结果,安⼼ing^-^。
另外p-value仅为0.0009,这说明历史成绩和地理成绩⼏乎不可能是不相关,反过来说就是它们是⾮常相关的。
计算例2:两个随机数序列的斯⽪尔曼相关系数
rng = np.random.default_rng()
x2n = rng.standard_normal((100, 2))
stats.spearmanr(x2n)
结果:SpearmanrResult(correlation=-0.00876087608760876, pvalue=0.931061841564777)
嗯,相关度极低。。。诚不欺我^-^
6.3 pandas corr()
Pandas也提供了计算斯⽪尔曼相关系数的函数,事实上是提供了⼀个通⽤的相关系数计算函数接⼝,通过method参数可以指定是需要计算那种相关系数。如下例所⽰:
import pandas as pd
import numpy as np
X=pd.Series([3,5,1,6,7,2,8,9,4])evp
hca2Y=pd.Series([5,3,2,6,8,1,7,9,4])
rho = X.corr(Y,method='spearman')
print(rho)
同样得到结果为0.9,只不过没有像scipy函数那样提供⼀个p-value。
[Reference]
[2]