Python 数学建模——Pearson/Spearman 相关系数
文章目录
- 前言
- 原理
- 关于 p p p 值
- Pearson 相关系数代码实例
- Spearman 相关系数代码实例
- 求相关系数
- 求相关系数矩阵
前言
相关系数尝尝用来衡量两个数值变量之间是否存在某种关系。我们常说的“正相关”“负相关”就是这种相关关系。而相关系数的绝对值大小体现了相关关系的强弱。本文将介绍两种相关系数(Pearson 相关系数和 Spearman 相关系数)以及它们的 Python 求取。
区别:Spearman 相关系数判定两个变量之间的趋势关系,即“同增同减”的趋势程度。相比而言,Pearson 相关系数判定两个变量之间的线性关系,囊括“趋势”的同时还衡量“线性关系”。
原理
Pearson 相关系数评估两个连续变量之间的线性关系,仅当 x , y x,y x,y 服从正态分布时该相关系数才具有一定意义。计算依据是:
ρ = C o v ( x , y ) σ x σ y = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 \rho=\frac{Cov(x,y)}{{{\sigma }_{x}}{{\sigma }_{y}}}=\frac{\sum_{i=1}^{n}{(}{{x}_{i}}-\bar{x})({{y}_{i}}-\bar{y})}{\sqrt{\sum_{i=1}^{n}{(}{{x}_{i}}-\bar{x}{{)}^{2}}}\sqrt{\sum_{i=1}^{n}{(}{{y}_{i}}-\bar{y}{{)}^{2}}}} ρ=σxσyCov(x,y)=∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
Spearman 相关系数是一种秩相关系数,又称等级相关系数,反映的是两个随机变量的的变化趋势方向和强度之间的关联,是将两个随机变量的样本值按数据的大小顺序排列位次,以各要素样本值的位次代替实际数据而求得的一种统计量。计算方式是:
r = C o v ( x , y ) σ x σ y = ∑ i = 1 n ( x ^ i − x ^ ˉ ) ( y ^ i − y ^ ˉ ) ∑ i = 1 n ( x ^ i − x ^ ˉ ) 2 ∑ i = 1 n ( y ^ i − y ^ ˉ ) 2 r=\frac{Cov(x,y)}{{{\sigma }_{x}}{{\sigma }_{y}}}=\frac{\sum_{i=1}^{n}{(}{{\hat x}_{i}}-\bar{\hat x})({{\hat y}_{i}}-\bar{\hat y})}{\sqrt{\sum_{i=1}^{n}{(}{{\hat x}_{i}}-\bar{\hat x}{{)}^{2}}}\sqrt{\sum_{i=1}^{n}{(}{{\hat y}_{i}}-\bar{\hat y}{{)}^{2}}}} r=σxσyCov(x,y)=∑i=1n(x^i−x^ˉ)2∑i=1n(y^i−y^ˉ)2∑i=1n(x^i−x^ˉ)(y^i−y^ˉ)
其中, x ^ i \hat x_i x^i 是 x i x_i xi 在 x x x 中从小到大的排名。例如 x = [ 1 , 1 , 4 , 5 , 1 , 4 ] x=[1,1,4,5,1,4] x=[1,1,4,5,1,4],则 x ^ = [ 1 , 1 , 2 , 3 , 1 , 2 ] \hat x=[1,1,2,3,1,2] x^=[1,1,2,3,1,2]。
参考文献:Pearson 相关方法和 Spearman 相关方法的比较 - Minitab
关于 p p p 值
在获取到相关系数 后,还需要看对应的 p p p 值。当 p p p 值异常时,相关系数 r r r(或者 ρ \rho ρ) 再大也不能认为两个变量具有明显的相关关系,因为相关系数大可能是偶然性引起的。
这个 p p p 值的含义是相关关系的不显著性水平,是基于假设检验方法计算出来的,接受“两变量之间不存在线性关联”这一假设的概率。通常取 0.05 0.05 0.05 为阈值,当 p < 0.05 p<0.05 p<0.05 时即可认为两个变量存在显著的线性关系。
Pearson 相关系数代码实例
这里直接放求相关系数矩阵的代码:
import numpy as np
import pandas as pddata = np.array([[1, 2, 3], [4, 5, 6],[11, 25, 346], [734, 48, 49]])print(np.corrcoef(data)) # 返回一个浮点矩阵,好像没有 p 值
实际上,
scipy.stats.pearsonr
貌似也可以求 Pearson 相关系数,还能给出 p p p 值。感兴趣的读者可以试试看,使用方法和下文求取 Spearman 相关系数的代码实例类似。
Spearman 相关系数代码实例
求相关系数
两个维度的观测数据 x 1 , x 2 x_1,x_2 x1,x2 的相关系数求取:
import numpy as np
from scipy import statsX1 = [3, 5, 1, 6, 7, 2, 8, 9, 4]
X2 = [5, 3, 2, 6, 8, 1, 7, 9, 4]corr, p_value = stats.spearmanr(X1,X2) # 返回两个浮点值
print(corr,p_value)
结果是corr = 0.9
,p_value = 0.0009430623223403293
。
求相关系数矩阵
如果是多个维度的观测数据 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,⋯,xn,其中每个维度的数据均有多个观测值 x i = [ x i 1 , x i 2 , ⋯ , x i m ] {x_i}=[{{x}_{i1}},{{x}_{i2}},\cdots ,{{x}_{im}}] xi=[xi1,xi2,⋯,xim],可以按照下面的用法得到两两之间的 Spearman 相关系数 r ( x i , x j ) r(x_i,x_j) r(xi,xj):
import numpy as np
import pandas as pd
from scipy import statsdf = pd.DataFrame({'第一维': [1, 1, 4, 5, 1, 4],'第二维': [1, 9, 1, 9, 8, 1],'第三维': [1, 3, 1, 4, 0, 0]
})corr_matrix, p_value_matrix = stats.spearmanr(df) # 返回两个浮点矩阵
print(corr_matrix, p_value_matrix)
结果如下所示,这里第二维与第三维之间的相关系数达到了0.63564173
,但是 p p p 值为0.17494988
,不认为他们之间具有显著相关性。
[[1. 0.03333333 0.31782086][0.03333333 1. 0.63564173][0.31782086 0.63564173 1. ]][[0.00000000e+00 9.50018519e-01 5.39320264e-01][9.50018519e-01 0.00000000e+00 1.74949881e-01][5.39320264e-01 1.74949881e-01 1.84889275e-32]]
相关文章:
Python 数学建模——Pearson/Spearman 相关系数
文章目录 前言原理关于 p p p 值Pearson 相关系数代码实例Spearman 相关系数代码实例求相关系数求相关系数矩阵 前言 相关系数尝尝用来衡量两个数值变量之间是否存在某种关系。我们常说的“正相关”“负相关”就是这种相关关系。而相关系数的绝对值大小体现了相关关系的强弱。…...

QUIC的loss detection学习
PTO backoff backoff 补偿 /ˈbkɒf/PTO backoff 是QUIC(Quick UDP Internet Connections)协议中的一种机制,用于处理探测超时(Probe Timeout, PTO)重传策略 它逐步增加探测超时的等待时间,以避免网络拥塞…...
【QT】使用QOpenGLWidget后,窗口全屏之后右键菜单出不来的问题
问题 QMainWindow全屏之后,发现右键菜单出不来了,后来排查到问题是和窗口中使用了QOpenGLWidget控件有关系。 解决方案 在QMainWindow构造函数末尾,添加这句话(作用是给窗口周围增加1像素线,实现伪全屏)…...
MySQL 8.0授权语法变更及解决方案
MySQL 8.0授权语法变更及解决方案 授权语法变更:MySQL 8.0更改了授权语法,无法直接在授权语句中使用IDENTIFIED BY来创建用户并设置密码。需要先创建用户,再单独授权。 创建用户并授权: 使用CREATE USER语句创…...

2024 VMpro 虚拟机中如何给Ubuntu Linux操作系统配置联网
现在这是一个联网的状态 可以在商店里面下载东西 也能ping成功 打开虚拟网络编辑器 放管理员权限 进行设置的更改 选择DNS设置 按提示修改即可 注意的是首选的DNS服务器必须是114.114.114.114 原因 这边刚刚去查了一下 114.114.114.114 是国内的IP地址 8.8.8.8 是国外的I…...

详解Diffusion扩散模型:理论、架构与实现
本文深入探讨了Diffusion扩散模型的概念、架构设计与算法实现,详细解析了模型的前向与逆向过程、编码器与解码器的设计、网络结构与训练过程,结合PyTorch代码示例,提供全面的技术指导。 关注TechLead,复旦AI博士,分享A…...

坐牢第三十八天(Qt)
1、使用Qt绘画事件处理画一个闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QPaintEvent>//画画处理事件 #include <QPainter>//画画 #include <QTime> //时间类 #include <QTimer>…...

(十五)、把自己的镜像推送到 DockerHub
文章目录 1、登录Docker Hub2、标记(Tag)镜像3、推送(Push)镜像4、查看镜像5、下载镜像6、设置镜像为公开或者私有 1、登录Docker Hub 需要科学上网 https://hub.docker.com/ 如果没有账户,需要先注册一个。登录命令如…...

【云岚到家-即刻体检】-day07-2-项目介绍及准备
【云岚到家-即刻体检】-day07-2-项目介绍及准备 1 项目介绍1)项目简介2)界面原型3)实战目标 2 搭建实战环境1)服务端2)管理端前端工程3)用户端前端工程4)测试 3 熟悉项目代码1)接口文…...

SpringCloud Alibaba之Nacos服务注册和配置中心
(学习笔记)nacos-server版本:2.2.3 总体介绍: 1、Nacos介绍 官网:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字…...

面试官:讲一讲Spring MVC源码解析
好看的皮囊千篇一律、有趣的灵魂万里挑一 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。…...
815. 公交路线(24.9.17)
题目 给你一个数组 routes,表示一系列公交线路。其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。例如,路线 routes[0][1,5,7] 表示第 0 辆公交车会一直按序列 1->5->7->1->5->7->1->... 这样的…...
Rust: Warp RESTful API 如何得到客户端IP?
在使用 Rust 的 Warp 框架来创建 RESTful API 时,如果你想要获取客户端的 IP 地址,通常需要在处理 HTTP 请求的函数中查看请求的头部或者底层连接的信息。不过,Warp 本身并不直接提供一个简便的 API 来直接获取客户端的 IP 地址,因…...

添加选择登录ssh终端
吼吼,这次成了一个小的瑞士军刀了 … … 一次性功能齐全,虽然只支持win10及以上...
【基于 Delphi 的人才管理系统】
基于 Delphi 的人才管理系统可以帮助企业或组织管理员工的信息,包括招聘、培训、绩效评估等方面。这种系统通常包括员工档案管理、职位发布、应聘者跟踪、培训计划安排等功能。下面是一个简化的人才管理系统设计方案及其代码示例。 系统设计概览 员工档案管理&…...

GetMaterialApp组件的用法
文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…...
ubuntu安装mysql 8.0忘记root初始密码,如何重新修改密码
1、停止mysql服务 $ service mysql stop 2、修改my.cnf文件 # 修改my.cnf文件,在文件新增 skip-grant-tables,在启动mysql时不启动grant-tables,授权表 $ sudo vim /etc/mysql/my.cnf [mysqld] skip-grant-tables 3、启动mysql服务 servic…...
Vue3项目开发——新闻发布管理系统(七)
文章目录 九、新闻分类管理模块设计开发1、新闻分类主页面设计2、封装页面组件3、改造页面4、新闻分类表格渲染4.1封装API,获取新闻分类数据4.2 表格动态渲染4.3表格增加 loading 效果5、实现新闻分类添加和编辑功能5.1 点击显示弹层5.2封装弹层组件 CateEdit5.3 准备弹层表单…...

ICMP
目录 1. 帧格式2. ICMPv4消息类型(Type = 0,Code = 0)回送应答 /(Type = 8,Code = 0)回送请求(Type = 3)目标不可达(Type = 5,Code = 1)重定向(Type = 11)ICMP超时(Type = 12)参数3. ICMPv6消息类型回见TCP/IP 对ICMP协议作介绍 ICMP(Internet Control Messag…...
Unity-Transform类-旋转
角度度相关 相对世界坐标角度 print(this.transform.eulerAngles); 相对父对象角度 print(this.transform.localEulerAngles); 注意:设置角度和设置位置一样 不能单独设置xyz 要一起设置 如果我们希望改变的 角度 是面板上显示的内容 那是改…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...