功能性模块:(10)Spearman‘s rank correlation coefficient的简单理解(含与PCC之间的区别)

本文主要是介绍功能性模块:(10)Spearman‘s rank correlation coefficient的简单理解(含与PCC之间的区别),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Spearman’s rank correlation coefficient的简单理解

1. 背景

在统计学中,斯皮尔曼等级相关系数(Spearman’s rank correlation coefficient, 或者Spearman’s ρ \rho ρ, 通常使用 ρ \rho ρ或者 r s r_s rs来表示),是一个等级相关性的非参数度量(两个变量等级之间的统计相关性)。这个相关系数使用单调函数来描述两个变量之间的关系程度。

如果两个变量的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个原始数据 X i X_i Xi, Y i Y_i Yi转换成等级数据 r g X i rg_{X_i} rgXi, r g Y i rg_{Y_i} rgYi,并且 r s r_s rs可以按照如下的公式进行计算

r s = ρ r g X i , r g Y i = c o v ( r g X , r g Y ) σ r g X σ r g Y r_s =\rho_{rg_{X_i},rg_{Y_i}}=\frac{cov(rg_X, rg_Y)}{\sigma_{rg_X}\sigma_{rg_Y}} rs=ρrgXi,rgYi=σrgXσrgYcov(rgX,rgY)

其中 ρ \rho ρ表示的是Pearson correlation coefficient(PCC),但是使用的变量是转换成等级后的变量。
c o v ( r g X , r g Y ) cov(rg_X, rg_Y) cov(rgX,rgY)是转换成等级变量之间的协方差

σ r g X \sigma_{rg_X} σrgX, σ r g Y \sigma_{rg_Y} σrgY是转换成等级变量后的标准差

只有当所有n个等级都是不同的整数是,才可以使用下面的公式进行计算
r s = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) r_s=1-\frac {6\sum{d_i^2}}{n(n^2-1)} rs=1n(n21)6di2

其中 d j = r g ( X i ) − r g ( Y i ) d_j=rg(X_i)-rg(Y_i) dj=rg(Xi)rg(Yi)是两个变量值等级之间的差异

3.代码实现

很简单的代码实现

def ComputeRs(a, b):aa = np.column_stack((a, b))# rank的方式有很多种,这里使用的average的方式aa_ranked = np.apply_along_axis(stats.rankdata, 0, aa)rs = np.corrcoef(aa_ranked, rowvar=0)return rs[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还是相关性几乎为+1

4.4 非线性函数(二次函数)

在这里插入图片描述

4.5 随机数

在这里插入图片描述

4.6 异常值

在这里插入图片描述
总结,从4.6上可以看出,一旦数据存在异常值,那么Spearman‘s rank correlation coefficient的鲁棒性会更好一些。

这篇关于功能性模块:(10)Spearman‘s rank correlation coefficient的简单理解(含与PCC之间的区别)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390984

相关文章

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav