当前位置: 首页 > news >正文

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(xixˉ)2 i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)

  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^ix^ˉ)2 i=1n(y^iy^ˉ)2 i=1n(x^ix^ˉ)(y^iy^ˉ)

  其中, 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.9p_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&#xff08;Quick UDP Internet Connections&#xff09;协议中的一种机制&#xff0c;用于处理探测超时&#xff08;Probe Timeout, PTO&#xff09;重传策略 它逐步增加探测超时的等待时间&#xff0c;以避免网络拥塞…...

【QT】使用QOpenGLWidget后,窗口全屏之后右键菜单出不来的问题

问题 QMainWindow全屏之后&#xff0c;发现右键菜单出不来了&#xff0c;后来排查到问题是和窗口中使用了QOpenGLWidget控件有关系。 解决方案 在QMainWindow构造函数末尾&#xff0c;添加这句话&#xff08;作用是给窗口周围增加1像素线&#xff0c;实现伪全屏&#xff09;…...

MySQL 8.0授权语法变更及解决方案‌

MySQL 8.0授权语法变更及解决方案‌ 授权语法变更‌&#xff1a;‌MySQL 8.0更改了授权语法&#xff0c;‌无法直接在授权语句中使用IDENTIFIED BY来创建用户并设置密码。‌需要先创建用户&#xff0c;‌再单独授权。‌ 创建用户并授权‌&#xff1a;‌ 使用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扩散模型的概念、架构设计与算法实现&#xff0c;详细解析了模型的前向与逆向过程、编码器与解码器的设计、网络结构与训练过程&#xff0c;结合PyTorch代码示例&#xff0c;提供全面的技术指导。 关注TechLead&#xff0c;复旦AI博士&#xff0c;分享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、标记&#xff08;Tag&#xff09;镜像3、推送&#xff08;Push&#xff09;镜像4、查看镜像5、下载镜像6、设置镜像为公开或者私有 1、登录Docker Hub 需要科学上网 https://hub.docker.com/ 如果没有账户&#xff0c;需要先注册一个。登录命令如…...

【云岚到家-即刻体检】-day07-2-项目介绍及准备

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

SpringCloud Alibaba之Nacos服务注册和配置中心

&#xff08;学习笔记&#xff09;nacos-server版本&#xff1a;2.2.3 总体介绍&#xff1a; 1、Nacos介绍 官网&#xff1a;Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字…...

面试官:讲一讲Spring MVC源码解析

好看的皮囊千篇一律、有趣的灵魂万里挑一 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】获取福利&#xff0c;回复【项目】获取项目源码&#xff0c;回复【简历模板】获取简历模板&#xff0c;回复【学习路线图】获取学习路线图。…...

815. 公交路线(24.9.17)

题目 给你一个数组 routes&#xff0c;表示一系列公交线路。其中每个 routes[i] 表示一条公交线路&#xff0c;第 i 辆公交车将会在上面循环行驶。例如&#xff0c;路线 routes[0][1,5,7] 表示第 0 辆公交车会一直按序列 1->5->7->1->5->7->1->... 这样的…...

Rust: Warp RESTful API 如何得到客户端IP?

在使用 Rust 的 Warp 框架来创建 RESTful API 时&#xff0c;如果你想要获取客户端的 IP 地址&#xff0c;通常需要在处理 HTTP 请求的函数中查看请求的头部或者底层连接的信息。不过&#xff0c;Warp 本身并不直接提供一个简便的 API 来直接获取客户端的 IP 地址&#xff0c;因…...

添加选择登录ssh终端

吼吼,这次成了一个小的瑞士军刀了 … … 一次性功能齐全,虽然只支持win10及以上...

【基于 Delphi 的人才管理系统】

基于 Delphi 的人才管理系统可以帮助企业或组织管理员工的信息&#xff0c;包括招聘、培训、绩效评估等方面。这种系统通常包括员工档案管理、职位发布、应聘者跟踪、培训计划安排等功能。下面是一个简化的人才管理系统设计方案及其代码示例。 系统设计概览 员工档案管理&…...

GetMaterialApp组件的用法

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容&#xff0c;本章回中将介绍GetMaterialApp组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…...

ubuntu安装mysql 8.0忘记root初始密码,如何重新修改密码

1、停止mysql服务 $ service mysql stop 2、修改my.cnf文件 # 修改my.cnf文件&#xff0c;在文件新增 skip-grant-tables&#xff0c;在启动mysql时不启动grant-tables&#xff0c;授权表 $ 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); 注意&#xff1a;设置角度和设置位置一样 不能单独设置xyz 要一起设置 如果我们希望改变的 角度 是面板上显示的内容 那是改…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...