Pearson相关系数, Spearman相关系数,Kendall相关系数

article/2025/9/20 12:26:55

三个相关性系数(pearson, spearman, kendall)反应的都是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1,0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大表示相关性越强。

1. person correlation coefficient(皮尔森相关性系数)

公式如下:
这里写图片描述
统计学之三大相关性系数(pearson、spearman、kendall)
重点关注第一个等号后面的公式,最后面的是推导计算,暂时不用管它们。看到没有,两个变量(X, Y)的皮尔森相关性系数(ρX,Y)等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX, σY)。

公式的分母是变量的标准差,这就意味着计算皮尔森相关性系数时,变量的标准差不能为0(分母不能为0),也就是说你的两个变量中任何一个的值不能都是相同的。如果没有变化,用皮尔森相关系数是没办法算出这个变量与另一个变量之间是不是有相关性的。

就好比我们想研究人跑步的速度与心脏跳动的相关性,如果你无论跑多快,心跳都不变(即心跳这个变量的标准差为0),或者你心跳忽快忽慢的,却一直保持一个速度在跑(即跑步速度这个变量的标准差为0),那我们都无法通过皮尔森相关性系数的计算来判断心跳与跑步速度到底相不相关。

我们再拔高一点,来看个更具普遍性的例子吧,其中的计算我们使用广受欢迎的R语言来运行,如果你手边也装了R语言,可以一起来做做看:

假设你现在做了个生物学实验,喜得以下两个变量:
X1=c(1, 2, 3, 4, 5, 6)
Y1=c(0.3, 0.9, 2.7, 2, 3.5, 5)

X1<-c(1, 2, 3, 4, 5, 6)
Y1<-c(0.3, 0.9, 2.7, 2, 3.5, 5)
mean(X1) #平均值
[1] 3.5
mean(Y1)
[1] 2.4
var(X1) #方差
[1] 3.5
var(Y1)
[1] 2.976
sd(X1) #标准差
[1] 1.870829
sd(Y1)
[1] 1.725109
cov(X1,Y1) #协方差
[1] 3.06
cor(X1,Y1,method=”pearson”) #皮尔森相关性系数
[1] 0.9481367

其值在0.9以上,说明二者非常相关,比如验证了蛋白A表达量的变化,与蛋白B表达量的变化关系很大!拿到这种有统计学论证的结果你可能很开心。

然而,由于实验操作不慎或者处理数据不小心,得到了这样一个变量X2(1,1,1,1,1,1),那么计算X2与Y1之间的皮尔森相关性系数会发生什么呢?

X2<-c(1,1,1,1,1,1)
cor(X2,Y1,method=”pearson”)
[1] NA
Warning message:
In cor(X2, Y1, method = “pearson”) : the standard deviation is zero

R运行会得到一个缺失值(NA),并且代码给你提醒:标准差为零(自己试着计算下X2的标准差是多少),这时候明白上面说的意思了吧!也就是说,X2里面的取值根本没有任何波动,那它与Y1的相关性也就没法用这种方法来计算了。

此外,从上面的公式我们知道,皮尔森相关性系数是协方差与标准差的比值,所以它对数据是有比较高的要求的:

第一, 实验数据通常假设是成对的来自于正态分布的总体。为啥通常会假设为正态分布呢?因为我们在求皮尔森相关性系数以后,通常还会用t检验之类的方法来进行皮尔森相关性系数检验,而 t检验是基于数据呈正态分布的假设的。
这里写图片描述

统计学之三大相关性系数(pearson、spearman、kendall)
第二, 实验数据之间的差距不能太大,或者说皮尔森相关性系数受异常值的影响比较大。比如刚才心跳与跑步的例子,万一这个人的心脏不太好,跑到一定速度后承受不了,突发心脏病,那这时候我们会测到一个偏离正常值的心跳(过快或者过慢,甚至为0),如果我们把这个值也放进去进行相关性分析,它的存在会大大干扰计算的结果的。

2. spearman correlation coefficient(斯皮尔曼相关性系数)

斯皮尔曼相关性系数,通常也叫斯皮尔曼秩相关系数。“秩”,可以理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解,这种表征形式就没有了求皮尔森相关性系数时那些限制。下面来看一下它的计算公式:
这里写图片描述

统计学之三大相关性系数(pearson、spearman、kendall)
计算过程就是:首先对两个变量(X, Y)的数据进行排序,然后记下排序以后的位置(X’, Y’),(X’, Y’)的值就称为秩次,秩次的差值就是上面公式中的di,n就是变量中数据的个数,最后带入公式就可求解结果。举个例子吧,假设我们实验的数据如下:
这里写图片描述

统计学之三大相关性系数(pearson、spearman、kendall)
带入公式,求得斯皮尔曼相关性系数:ρs= 1-6*(1+1+1+9)/6*35=0.657

也就是说,我们不用管X和Y这两个变量具体的值到底差了多少,只需要算一下它们每个值所处的排列位置的差值,就可以求出相关性系数了。这下理解起来是不是容易多了!还是用上面的数据,下面写下代码实现:

X<-c(11,490,14,43,30,3)
Y<-c(2,75,3,44,7,42)
cor(X,Y,method=”spearman”)
[1] 0.6571429

而且,即便在变量值没有变化的情况下,也不会出现像皮尔森系数那样分母为0而无法计算的情况。另外,即使出现异常值,由于异常值的秩次通常不会有明显的变化(比如过大或者过小,那要么排第一,要么排最后),所以对斯皮尔曼相关性系数的影响也非常小!

由于斯皮尔曼相关性系数没有那些数据条件要求,适用的范围就广多了。在我们生物实验数据分析中,尤其是在分析多组学交叉的数据中说明不同组学数据之间的相关性时,使用的频率很高。

3. kendall correlation coefficient(肯德尔相关性系数)

肯德尔相关性系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。
分类变量可以理解成有类别的变量,可以分为
无序的,比如性别(男、女)、血型(A、B、O、AB);
有序的,比如肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)。
通常需要求相关性系数的都是有序分类变量。

举个例子。比如评委对选手的评分(优、中、差等),我们想看两个(或者多个)评委对几位选手的评价标准是否一致;或者医院的尿糖化验报告,想检验各个医院对尿糖的化验结果是否一致,这时候就可以使用肯德尔相关性系数进行衡量。

由于数据情况不同,求得肯德尔相关性系数的计算公式不一样,一般有3种计算公式,在这里就不繁琐地列出计算公式了,直接给出R语言的计算函数:

还是用cor函数求,这时候把method这个参数设成“kendall”,这时我们假设老师对选手的评价等级—3表示优,2表示中,1表示差:

X<-c(3,1,2,2,1,3)
Y<-c(1,2,3,2,1,1)
cor(X,Y,method=”kendall”)
[1] -0.2611165

这时候就可以理解为两位老师对选手们的看法是呈相反趋势的,不过这种相反的程度不很大。


http://chatgpt.dhexx.cn/article/8vhnQtBh.shtml

相关文章

数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

目录 前言 一、基本概念及二者适用范围比较 1、什么是相关性分析 2、什么是相关系数 3、适用范围比较 二、相关系数 1.皮尔逊相关系数&#xff08;Pearson correlation&#xff09; 1、线性检验 2、正态检验 3、求相关系数 2、斯皮尔曼相关系数&#xff08;Spearman…

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

目录 1. 什么是秩相关系数&#xff1f; 2. 单调性&#xff0c;monotonicity 3. 斯皮尔曼秩相关系数 4. 什么时候使用斯皮尔曼秩相关系数呢&#xff1f; 5. 斯皮尔曼秩相关系数计算公式 6. 斯皮尔曼秩相关系数计算例 6.1 手动计算 6.2 scipy函数 6.3 pandas corr() 6…

一文数学数模-相关性分析(二)斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

前言 相关性分析算是很多算法以及建模的基础知识之一了,十分经典。关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达。其中常见的相关性系数就有三种:person相关系数,spearman相关系数,Kendalls tau-b等级相关系数。各有各自的用法和使用场景。当然关于这以…

斯皮尔曼(spearman)相关系数python代码实现

简介 斯皮尔曼等级相关系数&#xff08;简称等级相关系数&#xff0c;或称秩相关系数&#xff0c;英语&#xff1a;Spearmans rank correlation coefficient或Spearmans ρ&#xff09;。一般用或者表示。它是衡量两个变量的相关性的无母数指标。它利用单调函数评价两个统计变量…

数学建模——相关系数(4)——斯皮尔曼相关系数(spearman)

文章目录 引述一、斯皮尔曼相关系数&#xff08;spearman&#xff09;1.定义12.定义23.使用MATLAB计算spearman相关系数4. 斯皮尔曼相关系数的假设检验 二、斯皮尔曼相关系数与皮尔逊相关系数的比较 引述 经过之前几节的学习&#xff0c;我们了解并掌握了皮尔逊相关系数。在学…

Spearman相关系数的含义及适用场景

斯皮尔曼相关系数计算工具: https://geographyfieldwork.com/SpearmansRankCalculator.html斯皮尔曼相关系数的解释&#xff1a;https://statisticsbyjim.com/basics/spearmans-correlation/ 统计中&#xff0c;斯皮尔曼相关系数是皮尔逊相关系数的非参数替代方法。对遵循曲线、…

SPSS——相关分析——Spearman秩相关系数

简介 斯皮尔曼等级相关&#xff08;Spearman’s correlation coefficient for ranked data&#xff09;主要用于解决称名数据和顺序数据相关的问题。适用于两列变量&#xff0c;而且具有等级变量性质具有线性关系的资料。由英国心理学家、统计学家斯皮尔曼根据积差相关的概念推…

ML之Spearman:Spearman相关系数(斯皮尔曼等级相关系数)的简介、案例应用之详细攻略

ML之Spearman&#xff1a;Spearman相关系数(斯皮尔曼等级相关系数)的简介、案例应用之详细攻略 目录 Spearman相关系数(斯皮尔曼等级相关系数)的简介 (1)、Spearman相关系数(斯皮尔曼等级相关系数)的计算逻辑 Spearman相关系数(斯皮尔曼等级相关系数)的的案例应用 Spearman相…

斯皮尔曼spearman相关系数

斯皮尔曼spearman相关系数 斯皮尔曼相关系数定义&#xff1a; X和Y为两组数据&#xff0c;其斯皮尔曼&#xff08;等级&#xff09;相关系数: r s 1 − 6 ∑ i 1 n d i 2 n ( n 2 − 1 ) r_s1-\frac{6\sum\limits_{i1}^nd_i^2}{n(n^2-1)} rs​1−n(n2−1)6i1∑n​di2​​ …

数据库知识及数据库编程

数据库的概念 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库是存放数据的仓库。它的存储空间很大&#xff0c;可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数…

数据库编程与设计—SQL语言

一、SQL语言基础 1 什么是SQL 结构化查询语言结构化查询语言(Structured Query Language)简称 SQL(发音&#xff1a;sequal[si:kwəl])&#xff0c;是一种数据库查询和程序设计语言&#xff0c;用于存取数据以及查询、更新和管理关系数据库系统&#xff1b;同时也是数据库脚本…

JDBC --- Java的数据库编程

目录 &#x1f348;一、数据库编程的必备条件 &#x1f349;二、什么是 JDBC JDBC 的优势 &#x1f34a;三、JDBC 使用流程 以及 常用接口和类的讲解 &#x1f361;0. 前置工作 &#x1f36d;1. 引入依赖 &#x1f36c;2. 数据库连接Connection &#x1f36c;3. 创建操…

数据库—mysql、数据库编程(API)

1. Linux平台准备 &#xff08;1&#xff09;安装SDK开发包的命令 sudo apt-get install libmysqlclient-dev &#xff08;2&#xff09;编译时需要链接的库:-lmysqlclient 2. mysql 的初始化和清理 #include <mysql/mysql.h> MYSQL mysql1; //创建句柄 mysql_init(&…

8.数据库编程

一、思维导图 二、基础梳理 1.游标的使用步骤 ① 声明游标。 用DECLARE语句为一条SELECT语句定义游标 EXEC SQL DECLARE<游标名> CURSOR FOR <SELECT语句>;使用T-SQL语句生成一个结果集&#xff0c;并且定义游标的特征&#xff0c;如游标中的记录是否可以修改。…

数据库编程----Mysql简介

数据库编程----Mysql简介 文章目录 一、什么是Mysql二、Mysq的l特点三、总结 一、什么是Mysql Mysql是一个关系型数据库管理系统二、Mysq的l特点 三、总结 Mysql是一个关系型的数据管理系统

6.数据库编程

PL-SQL编程 1.PL/SQL的特点 PL(Procedure Language)/SQL&#xff09;是Oracle在数据库中引入的一种过程化的编程语言。 PL/SQL是对SQL的扩充&#xff1a;具有为程序开发而设计的特性&#xff1b; 在PL/SQL 中可以使用变量&#xff0c;进行流程控制&#xff0c;来实现比较复杂…

编程语言与数据库

从新近的TIOBE编程语言排名可看到&#xff0c;Java、C依然稳定地在最受欢迎前列。 因具备图灵完备性&#xff0c;2018年才重新被纳入清单的SQL语言已快速出现在第9位置&#xff08;7月&#xff09;——这似乎意味着&#xff0c;传统的RDBMS(关系数据库系统)仍然是应用的主流&am…

java数据库编程入门

一、JDBC概述 1、JDBC是Java数据库连接技术的简称&#xff0c;提供连接各种常用数据库的能力。 2、JDBC模型 JAVA程序一般通过调用JDBC所定义的类和接口来处理数据库中的数据&#xff0c;也就是通过调用JDBC的驱动程序实现对数据库的操作。 3、JDBC操作数据库过程 基于JDBC…

Python之数据库编程

目录 一、MySQL数据库的使用 数据库相关操作 二、数据库增删改查 增加 修改 删除 三、数据库标准写法 一、MySQL数据库的使用 建表 CREATE TABLE py_student( id INTEGER primary key auto_increment, name INTEGER not null, gender varchar(11) default 男 , birthday d…

Java-数据库编程技术(MySQL)

初识MySQL 数据库简介 什么是数据库 数据库&#xff08;Database&#xff0c;DB&#xff09;就是存放数据的仓库&#xff0c;为了实现一定目的&#xff0c;按照某种规则组织起来的数据的集合。当然数据有多种形式&#xff0c;如文字、数码、符号、图形、声音等。从广义的角度…