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 stats
 
x = [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 - y
    n = 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博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值