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

article/2025/9/20 12:29:16

目录

前言

一、基本概念及二者适用范围比较

1、什么是相关性分析

2、什么是相关系数

3、适用范围比较

二、相关系数

1.皮尔逊相关系数(Pearson correlation)

1、线性检验

2、正态检验

3、求相关系数

2、斯皮尔曼相关系数(Spearman correlation)

1、秩相关系数

2、使用条件

3、求相关系数

3、结果对比

总结


前言

为参加数学建模做准备!从相关性分析学起!


一、基本概念及二者适用范围比较

1、什么是相关性分析

        相关分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个因素的的相关密切程度,相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。

2、什么是相关系数

        相关系数是反映两个变量之间线性相关程度的指标。

  •  皮尔逊相关系数(Pearson correlation): 用于衡量两个连续性随机变量间的相关系数
  •  斯皮尔曼相关系数(Spearman correlation) :秩相关系数,根据原始数据的等级排序进行求解,也称为等级变量之间的皮尔逊相关系数   

        (还有一种Kendall相关系数暂不作了解)

        以上两种系数是两个变量之间变化趋势的方向以及程度,取值范围为[-1, 1]。当接近1时,表示两者具有强烈的正相关性;当接近-1时,表示有强烈的的负相关性;而值接近0,则表示相关性很低。 

3、适用范围比较

斯皮尔曼相关系数和皮尔逊相关系数选择:
        1.连续数据正态分布线性关系,使用pearson相关系数最为恰当,用spearman相关系数也可以, 就是效率没有pearson相关系数高。
        2.上述三个条件均满足才能使用pearson相关系数,否则就用spearman相关系数。
        3.定序数据之间也只用spearman相关系数,不能用pearson相关系数。

注:(1)定序数据是指仅仅反映观测对象等级、顺序关系的数据,是由定序尺度计量形成的,表现为类别,可以进行排序,属于品质数据。
例如,对成绩进行排名后,对排名进行数学运算就没有意义了。定序数据最重要的意义代表了一组数据中的逻辑顺序。
       (2)斯皮尔曼相关系数的适用条件比皮尔逊相关系数要广,只要数据满足单调关系(例如线性函数、指数函数、对数函数等)就能够使用。
 

二、相关系数

1.皮尔逊相关系数(Pearson correlation)

当两个变量都是正态连续变量,且两者之间呈线性关系时,则可以用Pearson来计算相关系数。取值范围[-1,1]。计算公式如下:

从形式上看即为概率论中所学的相关系数。

变量相关强度

相关程度极强相关强相关中等程度相关弱相关极弱相关或无相关
相关系数绝对值0.8——10.6——0.80.4——0.60.2——0.40——0.2

1、线性检验

一般使用散点图进行线性检验:

import numpy as np
from matplotlib import pyplot as pltdef linear_test():#为显示线性关系手动输入的数据x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])y = np.array([1, 1, 3, 4, 3, 6, 5, 7, 9, 8, 9])fig = plt.figure()ax1 = fig.add_subplot(1, 1, 1)ax1.set_title('Linear Test')ax1.set_xlabel('X')ax1.set_ylabel('Y')ax1.scatter(x, y, c='k', marker='.')plt.savefig('linear_test.png')linear_test()


2、正态检验

这里运用到scipy模块的kstest方法,具体代码如下:

def normal_test():data = np.array([1, 2, 5, 4, 4, 6, 7, 3, 9, 5, 4, 7, 1, 2, 9])u = data.mean()std = data.std()result = stats.kstest(data, 'norm', (u, std))print(result)

结果:KstestResult(statistic=0.12726344134326134, pvalue=0.9427504251048978)

结果返回两个值:statistic → D值,pvalue → P值

H0:样本符合
H1:样本不符合
p值>0.05则接受H0,该数据为正态分布。

3、求相关系数

若以上验证均成功则采取皮尔逊相关系数进行相关性分析:

import pandas as pd# 读取数据
df = pd.read_excel('spearman_data.xlsx')
df = pd.DataFrame(df)
# print(df)# 生成相关性矩阵
rho = df.corr(method='pearson')
print(rho)

对生成的相关系数矩阵进行可视化操作(生成热力图):

def heatmapplot():plt.rcParams['font.family'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsesns.heatmap(rho, annot=True)plt.title('Heat Map', fontsize=18)plt.savefig('heatmap1.png', dpi=300)

2、斯皮尔曼相关系数(Spearman correlation)

1、秩相关系数

        秩相关系数(Coefficient of Rank Correlation),又称等级相关系数,反映的是两个随机变量的变化趋势方向和强度之间的关联,是将两个随机变量的样本值按数据的大小顺序排列位次,以各要素样本值的位次代替实际数据而求得的一种统计量。它是反映等级相关程度的统计分析指标,常用的等级相关分析方法有Spearman相关系数和Kendall秩相关系数等。主要用于数据分析。斯皮尔曼相关系数被定义成等级变量之间的皮尔逊相关系数。

2、使用条件

  • 数据为非线性或非正态
  • 至少有一组数据为等级类型,如排名,位次
  • 数据中有异常值或错误值,斯皮尔曼相关系数对于异常值不太敏感,因为它基于排序位次进行计算,实际数值之间的差异大小对于计算结果没有直接影响

3、求相关系数

较为常用简单的计算公式如下所示:

  • d_i 表示第i个数据对的位次值之差
  • n 总的观测样本数

使用python求解与上文类似(metho = ‘spearman’)

3、结果对比

两种相关系数的热力图对比:

pearson:

spearman:

可见,对于同组数据,在满足了正态和线性检验的条件下,Pearson所得结果相对于Spearman会更加的精确和严格。


总结

第一次写学习笔记若有错误希望大佬赐教!

球球各位点个赞

先行发布,之后会在补充显著性检验等内容。


http://chatgpt.dhexx.cn/article/68DfvEin.shtml

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

斯皮尔曼spearman相关系数

斯皮尔曼spearman相关系数 斯皮尔曼相关系数定义: X和Y为两组数据,其斯皮尔曼(等级)相关系数: 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​​ …

数据库知识及数据库编程

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

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

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

JDBC --- Java的数据库编程

目录 🍈一、数据库编程的必备条件 🍉二、什么是 JDBC JDBC 的优势 🍊三、JDBC 使用流程 以及 常用接口和类的讲解 🍡0. 前置工作 🍭1. 引入依赖 🍬2. 数据库连接Connection 🍬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;如文字、数码、符号、图形、声音等。从广义的角度…

【数据库系统】数据库编程

嵌入式SQL的处理过程&#xff1a; 嵌入式SQL是将SQL语句嵌入程序设计语言中&#xff0c;被嵌入的设计语言为主语言。 当主语言为C语言时&#xff0c;语法格式为&#xff1a; EXEC SQL <SQL语句> 嵌入式SQL语句与主语言之间的通信&#xff1a; 将SQL嵌入到高级语言中混…