斯皮尔曼相关系(Spearman‘s rank correlation coefficient)数理论及python代码

本文主要是介绍斯皮尔曼相关系(Spearman‘s rank correlation coefficient)数理论及python代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

contents

  • 1. 引言
  • 2. 什么是斯皮尔曼相关系数
      • 基本原理
      • 计算方法
      • 值的范围和解释
      • 应用场景
  • 3. python应用案例
      • 案例:阅读习惯与写作技能评分的相关性分析
        • 数据构造
        • Python代码
      • 结果解释

1. 引言

让我用一个简单的方式来解释斯皮尔曼相关系数的计算方法。

想象你和你的朋友们在玩一个游戏,比如赛跑。在比赛结束后,每个人都根据跑得快慢得到一个排名,跑得最快的得第一名,其次是第二名,以此类推。

现在,假设我们还知道每个人在学校的成绩排名。我们想知道,跑步的快慢和学校成绩好坏是否有关系。也就是说,跑得快的人是不是在学校也学得好,或者跑得慢的人是不是学习也不那么好。

斯皮尔曼相关系数就是帮助我们找出这种关系的一个工具。它的计算方法有点像数学游戏:

  1. 排名差异:首先,我们看每个人在赛跑和学习上的排名有多少不同。比如,如果你在赛跑中是第一名,但在学习中是第三名,那么你的排名差异就是2。

  2. 计算差异的平方:然后,我们把每个人的排名差异乘以自己(也就是平方),比如刚才的2变成4。

  3. 加总和计算:我们把所有人的这些平方加起来,然后用一个特别的公式来计算最终的数字。这个公式考虑到了有多少人参加游戏,并且会根据我们加起来的总数做一些计算。

  4. 得到相关系数:最后,这个特别的公式会给我们一个介于-1到1之间的数字。如果这个数字接近1,就意味着跑得快的人通常学习也好;如果接近-1,就意味着跑得快的人学习可能不太好;如果是0,就说明赛跑速度和学习好坏之间没有什么关系。

就这样,通过一个有趣的数学游戏,我们可以知道两件事情之间是否有某种关联!

2. 什么是斯皮尔曼相关系数

斯皮尔曼相关系数(Spearman’s rank correlation coefficient)是用于衡量两个变量之间关系的统计指标,特别适用于非线性关系或非正态分布的数据。与皮尔逊相关系数不同,斯皮尔曼相关系数不是基于原始数据,而是基于数据的排名(rank)。

基本原理

  • 斯皮尔曼相关系数实际上是评估两个变量的排名之间关系的强度和方向。
  • 它不需要数据在数学上是连续或正态分布的,适用于定序尺度的数据。

计算方法

斯皮尔曼相关系数的计算涉及以下步骤:

  1. 对每个变量的每个值进行排名。
  2. 计算两个变量的排名之间的差异。
  3. 使用以下公式计算斯皮尔曼相关系数:

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 i d_i di 是两个变量的排名差异。
  • n n n 是数据点的数量。

值的范围和解释

  • 斯皮尔曼相关系数的值介于 -1 和 1 之间。
  • +1 表示完全正相关,排名完全匹配。
  • -1 表示完全负相关,一个排名升高时另一个排名降低。
  • 0 表示没有相关性。

应用场景

斯皮尔曼相关系数适用于以下情况:

  • 变量是非参数的或不符合正态分布。
  • 数据是等级(rank)或顺序的,例如调查问卷的等级响应。
  • 当你怀疑两个变量之间的关系可能是非线性的时。

例如,如果你想分析人们对电影的喜爱程度(通过等级排名)与其票房收入之间的关系,斯皮尔曼相关系数可能是一个合适的选择。

3. python应用案例

当然可以!我将提供一个简单的Python应用案例,其中使用斯皮尔曼相关系数来分析两个变量之间的关系。在这个例子中,我将构造一组数据来模拟学生的阅读习惯(每周阅读的小时数)与他们的写作技能评分之间的关系。

案例:阅读习惯与写作技能评分的相关性分析

假设我们有一组学生,我们记录了他们每周的阅读时间(小时)以及他们在写作技能评估中的得分。我们想要分析阅读时间和写作技能评分之间是否存在关系。

数据构造

我们构造10名学生的数据如下:

  • 每周阅读时间(小时): [2, 5, 3, 8, 6, 1, 4, 7, 9, 10]
  • 写作技能评分(分数): [60, 80, 65, 88, 85, 55, 70, 90, 95, 100]
Python代码

下面是使用Python计算斯皮尔曼相关系数的代码:

import pandas as pd
import scipy.stats as stats# 构造数据
data = {'Reading Hours': [2, 5, 3, 8, 6, 1, 4, 7, 9, 10],'Writing Scores': [60, 80, 65, 88, 85, 55, 70, 90, 95, 100]
}
df = pd.DataFrame(data)# 计算斯皮尔曼相关系数
spearman_corr = df.corr(method='spearman')
print("斯皮尔曼相关系数:\n", spearman_corr)# 另一种方法直接使用scipy
spearman_corr_value, _ = stats.spearmanr(df['Reading Hours'], df['Writing Scores'])
print("斯皮尔曼相关系数值:", spearman_corr_value)

这段代码首先构造了包含每周阅读时间和写作技能评分的数据集,然后使用Pandas的 corr 方法和SciPy的 spearmanr 函数来计算这两个变量之间的斯皮尔曼相关系数。

结果解释

运行这段代码后,你会得到一个介于-1到1之间的相关系数值。如果这个值接近1,那就表示每周的阅读时间和写作技能评分之间存在强正相关,即阅读时间越长,写作评分越高。如果这个值接近0,则表示两者之间没有明显的单调关系。

这篇关于斯皮尔曼相关系(Spearman‘s rank correlation coefficient)数理论及python代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该