spearman相关性 - 斯皮尔曼秩相关系数
spearman相关性,核心是斯皮尔曼相关系数,是秩相关的一种非参数度量,考察的是两个随机变量之间的单调关系的强度,也就是说两者在变大或变小的趋势上多大程度能保持步调一致。
spearman使用的是数据样本排位位次值,所以对于异常值不敏感,实际数据之间的差异对于计算结果没有直接的影响。所以,spearman更适合处理一些非线形、非正太分布、非数值类型的数据。spearman相关性可以用来寻找以下一些问题的答案。
1. 受教育水平更高的人更关心经济吗
2 球队联赛名次与它们所在城市的经济水平有关系吗
3 某新型LLM评估方法相比传统LLM评估方法的相关程度
1 spearman完全版本计算公式
其中
R(x) 和 R(y) 分别是x和y的位次
和
分别表示平均位次
2 spearman简化版计算公式
其中
di表示第i个数据对的位次值之差
n总的观测样本数
3 spearman计算api
(1)scipy中计算斯皮尔曼相关系数的函数scipy.stats.spearmanr的使用例。
scipy.stats.spearmanr(a, b=None, axis=0, nan_policy='propagate', alternative='two-sided')
该函数返回spearman相关系数、P值,P值表示由完全不相关系统生成数据计算出同样spearman相关系数的概率。P值对小数据不可靠,当数据量较大如>500其估计相对合理。
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])rng = np.random.default_rng()
x2n = rng.standard_normal((100, 2))
stats.spearmanr(x2n)
(2) pandas corr() 的spearman系数示例
pandas通过参数指定spearman系数方法
import pandas as pd
import numpy as np
X=pd.Series([3,5,1,6,7,2,8,9,4])
Y=pd.Series([5,3,2,6,8,1,7,9,4])
rho = X.corr(Y,method='spearman')
print(rho)
(3)简易计算公式体现spearman负相关系数
简易计算公式取得是每对秩的差值平方,但是它能反映相关的方向,如下例子中将x中的排序值颠倒以后,计算所得的相关系数也变成负的。
import numpy as np
from scipy import statsx = [3,5,1,6,7,2,8,9,4]
y = [5,3,2,6,8,1,7,9,4]def simpleSpearman(x,y)-> float:"""Assuming np array as input"""d = x - yn = len(x)rho = 1 - 6 * np.sum(np.square(d))/n/(n**2-1)return rho
x0 = np.array(x)
y0 = np.array(y)
print(simpleSpearman(x0,y0))
print(stats.spearmanr(x,y ))# 颠倒x中的排序
x = [3,5,1,6,7,2,8,9,4]
x = [(len(x)+1) - x[k] for k in range(len(x))] # Reverse the x ranking
y = [5,3,2,6,8,1,7,9,4]
print(stats.spearmanr(x,y ))
x0 = np.array(x)
y0 = np.array(y)
print(simpleSpearman(x0,y0))
---
斯皮尔曼相关(Spearman correlation)系数概述及其计算例_斯皮尔曼相关系数-CSDN博客