斯皮尔曼相关(Spearman correlation)系数概述及其计算例

目录

1. 什么是秩相关系数?

2. 单调性,monotonicity

3. 斯皮尔曼秩相关系数

4. 什么时候使用斯皮尔曼秩相关系数呢?

5. 斯皮尔曼秩相关系数计算公式

6. 斯皮尔曼秩相关系数计算例

6.1 手动计算

6.2 scipy函数

6.3 pandas corr()

6.4 简易计算公式能够体现负相关系数?

  1. 什么是秩相关系数?

秩相关系数(Coefficient of Rank Correlation ),又称等级相关系数,反映的是两个随机变量的的变化趋势方向和强度之间的关联,是将两个随机变量的样本值按数据的大小顺序排列位次,以各要素样本值的位次代替实际数据而求得的一种统计量。它是反映等级相关程度的统计分析指标,常用的等级相关分析方法有Spearman相关系数Kendall秩相关系数等。主要用于数据分析。斯皮尔曼相关系数被定义成等级变量之间的皮尔逊相关系数。关于皮尔逊相关系数介绍和计算示例请参考:皮尔逊相关(Pearson correlation)系数概述及其计算例斯皮尔曼相关(Spearman correlation)系数概述及其计算例https://chenxiaoyuan.blog.csdn.net/article/details/121576303 ;

另一种秩相关系数是肯德尔相关系数,可以参考:

斯皮尔曼相关(Spearman correlation)系数概述及其计算例

这里的秩是啥意思呢?我第一次看到这个词的时候第一感是它跟矩阵的秩(Rank)有啥关系,没有关系。这里是秩序的秩,或者说排名、顺序、等级的意思(写成ranked或者ranking的话就不容易误解了)。

考虑两个随机变量X 和Y ,如果秩相关系数为正,则Y 随着X 的增加而增加;如果秩相关系数为负,则Y 随着X 的增加而减小;如果秩相关系数为0 ,则表示随着Y 的增减变化跟X 的增减变化没啥关系。当Y 和X 越来越接近严格单调的函数关系时,秩相关系数在数值上就越来越大。当秩相关系数为1 或者-1 时,就表明Y 随着X 的增加而严格单调增加或单调减小。

在实际应用中,有时获得的原始资料没有具体的数据表现,只能用等级来描述某种现象,要分析现象之间的相关关系,就只能用秩相关系数。

  1. 单调性,monotonicity

为了理解斯皮尔曼相关系数,首先需要了解什么是单调性和单调函数。一个单调函数是指随着它的自变量(independent variable)增大,函数值(因变量)要么总是增大(单调递增)要么总是变小(单调递减),而不会有时变大、有时变小(不是单调函数)。

斯皮尔曼相关(Spearman correlation)系数概述及其计算例

如上图所示,左图代表的是一个单调递增函数,中间图代表的是一个单调递减函数,而右边的图所代表的函数则不是单调函数。

  1. 斯皮尔曼秩相关系数

斯皮尔曼秩相关系数(The Spearman’s rank coefficient of correlation),简称斯皮尔曼相关系数,是秩相关(rank correlation)的一种非参数度量(nonparametric measure)。得名于英国统计学家Charles Spearman ,通常记为希腊字母’ρ’ (rho)( often called Spearman’s rho)或者

斯皮尔曼相关(Spearman correlation)系数概述及其计算例

在讨论斯皮尔曼相关系数之前,首先要理解皮尔逊相关(Pearson’s correlation),斯皮尔曼相关可以看作是皮尔逊相关的非参数版本(nonparametric version )。皮尔逊相关是关于两个随机变量之间的线性关系强度的统计度量(statistical measure),而斯皮尔曼相关考察的是两者单调关系( monotonicrelationship )的强度,通俗地说就是两者在变大或变小的趋势上多大程度上保持步调一致,哪怕没有保持比例关系。计算皮尔逊相关系数时使用的是数据样本值本身,而计算斯皮尔曼相关系数使用的是数据样本排位位次值(有时候数据本身就是位次值,有时候数据本身不是位次值,则在计算斯皮尔曼相关系数之前要先计算位次值)。

这里”非参数”有两层含义。首先,当X和Y的关系是由任意单调函数描述的,则它们是完全皮尔逊相关的。与此相应的,皮尔逊相关系数只能给出由线性方程描述的X和Y的相关性。其次,斯皮尔曼不需要先验知识(也就是说,除了数据本身不需要知道其它参数,比如说关于数据的分布的先验信息)便可以准确获取X和Y的采样概率分布之间的相关性。

  1. 什么时候使用斯皮尔曼秩相关系数呢?

能够适用皮尔逊相关的场合当然是优先使用皮尔逊相关,但是在有些场合,皮尔逊相关所需要的前提假设不能得到满足,这是就可以考虑使用斯皮尔曼相关,比如说以下一些情况下:

  1. 如果你的数据展现的是非线性关系,或者不是正态分布的。
  2. 如果至少有一方数据是序数类型(ordinal )而非数值类型。比如说,如果数据的赋值为”第一、第二、第三、… “你就是在处理序数类型数据。更具具体一点的例子就是,比如说你考察两个球队在历年联赛中的战绩之间的关系,那么你得到的数据可能是这样的:A 队在2010~2020 年间的联赛排名为{1,2,4,5,…,2}, B 队在2010~2020 年间的联赛排名为{2,1,3,6,…,4}。这两个数据就是序数类型的数据,考察它们的相关性你使用皮尔逊相关系数就不妥当
  3. 如果数据中有明显的异常值(outliers)。与皮尔逊相关不同,斯皮尔曼相关对于异常值不太敏感,因为它基于排序位次进行计算,实际数值之间的差异大小对于计算结果没有直接影响

比如说,你可以利用斯皮尔曼相关来寻找针对以下一些问题的答案:

  1. 受教育水平更高的人更关心环境吗?
  2. 患者的症状数与他们服药的意愿有关系吗?
  3. 球队的联赛成绩(名次)与他们所在城市的经济发展水平有关系吗?

  4. 斯皮尔曼秩相关系数计算公式

全版本的计算公式:

斯皮尔曼相关(Spearman correlation)系数概述及其计算例

其中:

  • R(x) 和 R(y) 分别是x和y的位次
    斯皮尔曼相关(Spearman correlation)系数概述及其计算例

更简单易行的计算公式如下所示:

斯皮尔曼相关(Spearman correlation)系数概述及其计算例

其中:

  • 斯皮尔曼相关(Spearman correlation)系数概述及其计算例表示第i个数据对的位次值之差
  • n 总的观测样本数

  • 斯皮尔曼秩相关系数计算例

在很多软件工具或者工具库里都有各种相关系数的计算。在以下Ref1中介绍了在Excel中如何计算斯皮尔曼相关系数,有兴趣的小伙伴可以参考。

6.1 手动计算

在Ref2中给出了一个手动计算例(最低限度的手动计算对于掌握一个新的概念是绝对必要的,手动计算能帮助更加深刻地理解本质),如下表所示:

斯皮尔曼相关(Spearman correlation)系数概述及其计算例

这是9个学生的历史和地理的成绩和排名,每一行从左到右分别历史科目的分数、历史成绩中的排名、地理科目的分数、地理成绩中的排名,排名位次之差、排名位次的平方。由于数据中没有位次相同的数据,所以可以用简单版本的公式进行计算,如下所示:

斯皮尔曼相关(Spearman correlation)系数概述及其计算例

这个结果意味着这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)

得到了跟手动计算相同的结果,安心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])
Y=pd.Series([5,3,2,6,8,1,7,9,4])
rho = X.corr(Y,method='spearman')
print(rho)

同样得到结果为0.9,只不过没有像scipy函数那样提供一个p-value。

6.4 简易计算公式能够体现负相关系数?

根据一个读者的提问,追加了本节计算例。

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))

运行以上代码可以发现,将x中的排序值颠倒以后,计算所得的相关系数也变成的负的了。也就是说,简易计算公式中虽然取得是每对秩的差值的平方,但是并不妨碍它能反映相关的方向(相关系数的正负) 。

关于皮尔逊相关系数介绍和计算示例有兴趣的话可以参考:

皮尔逊相关(Pearson correlation)系数概述及其计算例斯皮尔曼相关(Spearman correlation)系数概述及其计算例https://chenxiaoyuan.blog.csdn.net/article/details/121576303 ;

[Reference]

[1] https://www.ablebits.com/office-addins-blog/2019/01/30/spearman-rank-correlation-excel/

[2] Spearman correlation coefficient: Definition, Formula and Calculation with Example | QuestionPro

[3] https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.spearmanr.html

Original: https://blog.csdn.net/chenxy_bwave/article/details/121427036
Author: 笨牛慢耕
Title: 斯皮尔曼相关(Spearman correlation)系数概述及其计算例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/716175/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 细粒度分类——数据集制作

    本文为打印机数据集的处理方法,以拍摄条件为25cm、顶光、0°的一组数据集为例。 目录 1.裁剪边框 2.分割数据集 3.切割(256×256) 4.筛除 5.图片重命名…

    人工智能 2023年7月23日
    054
  • 基于R语言的数据分析报告

    基于R语言的数据分析报告 (很多同学私信反馈通过kaggle没办法下载数据集,我把数据集上传到百度云供大家取用,链接:https://pan.baidu.com/s/1S48WWm…

    人工智能 2023年6月19日
    098
  • 一文搞定 Visual Studio 配置 OpenCV环境

    在 Visual Studio 上配置 OpenCV 环境是极其恼人的事情,尤其是对于初学者,经常几个小时过去了都配不好,将我们对代码的热爱扼杀在摇篮之中。本文根据本人的无数次环境…

    人工智能 2023年5月26日
    073
  • 关于Transformer、BERT的理解

    结合李宏毅老师机器学习2021——Transformer课程和网上查阅的资料,总结一下对Transformer的理解 Transformer是什么? 从宏观角度来看,Transfo…

    人工智能 2023年5月27日
    099
  • web前端-html-css-display

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

    人工智能 2023年6月26日
    079
  • 神奇的人工智能之神笔马良|Stable Diffusion使用

    1,月球上骑马的宇航员。 image generate by stable-diffusion model 2,下棋的狗 image generate by stable-diff…

    人工智能 2023年7月30日
    065
  • 【学习day1】图像分类数据集+softmax回归

    主要来源:李沐老师的pytorch 动手学习深度学习(鞠躬感谢)记录每日所学,欢迎讨论 目录 一. 图像分类数据集 * 1. 读取数据集 2. 读取小批量 3. 整合所有组件 二….

    人工智能 2023年6月17日
    0110
  • 【OpenCV 例程200篇】21. 图像的叠加

    『youcans 的 OpenCV 例程200篇 – 总目录』 【OpenCV 例程200篇】21. 图像的叠加 两张图像直接进行加法运算后图像的颜色会改变,通过加权加…

    人工智能 2023年6月19日
    085
  • Neo4j图算法库(Graph Algorithms)的安装与使用

    Neo4j提供了强大的算法库,可供我们直接调用,而不需要自己再手动编写。 要使用其自带的算法库,首先需要添加相应插件,下面详细介绍。 ; 一、支持算法 1、中心度算法(Centra…

    人工智能 2023年6月10日
    091
  • 双侧柱状图展示上下调GO富集结果

    这是一个双侧柱状图,特点是,可以理解为上下调分开展示。当然,还可以将P值等信息添加在图上。其实我们之前好几篇文章做过双侧柱状图,但不足之处是没有像这篇文章一样,坐标轴位于中间,且通…

    人工智能 2023年7月17日
    065
  • yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo

    目录 前言 环境 导出yolov5s模型 编写Maven项目 * 编写pom.xml文件 引入opencv依赖 – 下载opencv 获取opencv的jar包和动态链…

    人工智能 2023年6月19日
    095
  • DeepLabV1网络简析

    原论文名称:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs论文下…

    人工智能 2023年6月24日
    086
  • pandas数据处理

    pandas数据处理 对数据进行分类统计排序 数据的合并 分组和聚合 索引和复合索引 分组,聚合及索引的应用 对数据进行分类统计排序 算法设计逻辑 从全部数据中选取电影分类数据Ge…

    人工智能 2023年7月7日
    079
  • 9大时序异常检测方法汇总

    异常检测(Anomaly detection)是目前时序数据分析最成熟的应用之一,定义是从正常的时间序列中识别不正常的事件或行为的过程。 有效的异常检测被广泛用于现实世界的很多领域…

    人工智能 2023年6月25日
    0101
  • NLP 自然语言分析理解

    自然语言处理(NLP,Natural Language Processing) 是研究人与计算机 交互的语言问题的一门学科。按照技术实现难度的不同,这类系统可以分成简单匹配式、模糊…

    人工智能 2023年5月28日
    083
  • Opencv-霍夫圆检测-代码解析

    目录 目录 前言 一、霍夫圆检测代码 二、函数解析 1.cv2.HoughCircles函数 2.双边滤波:bilateralFilter() 函数 3.形态学操作-开运算 4.c…

    人工智能 2023年6月19日
    098
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球