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

article/2025/9/20 13:17:57

文章目录

  • 引述
  • 一、斯皮尔曼相关系数(spearman)
    • 1.定义1
    • 2.定义2
    • 3.使用MATLAB计算spearman相关系数
    • 4. 斯皮尔曼相关系数的假设检验
  • 二、斯皮尔曼相关系数与皮尔逊相关系数的比较

引述

经过之前几节的学习,我们了解并掌握了皮尔逊相关系数。在学习中我们发现,皮尔逊相关系数的使用条件相当苛刻:两组变量必须是连续数据、呈现正态分布,且两者间必须成线性关系。如果我们在数学建模中拿到一组数据无法满足以上条件,那么有没有其他的方法去判断两组变量之间的相关性呢?答案是肯定的,它就是斯皮尔曼相关系数(spearman).

一、斯皮尔曼相关系数(spearman)

1.定义1

  • 定义:X和Y为两组数据,其斯皮尔曼(等级)相关系数:
    spearman相关系数
    其中,di为Xi和Yi之间的等级差。可以证明:rs位于-1和1之间。
  • 等级差
    一个数的等级,就是将它所在的一列按照从小到大排序后,这个数所在的位置。
    等级差
    根据公式计算可得:
    X和Y的斯皮尔曼相关系数 rs = 0.875

2.定义2

另一种斯皮尔曼相关系数被定义成等级之间的皮尔逊相关系数。值得注意的是,MATLAB使用的是该定义下的计算方式
对于上图,使用MATLAB求解皮尔逊相关系数

%% 使用MATLAB求解皮尔逊相关系数
RX = [2 5 3 4 1]
RY = [1 4.5 3 4.5 2]
R = corrcoef(RX,RY)

计算结果如下:
计算结果

3.使用MATLAB计算spearman相关系数

1. 两种用法

  • 用法1:
corr(X, Y, 'type', 'Spearman') % X和Y必须是列向量!
  • 用法2:
corr(X, 'type', 'Spearman') % 这时计算X矩阵各列之间的斯皮尔曼相关系数

2. 使用MATLAB计算斯皮尔曼相关系数
注:我们所使用的测试数据即为上图。

%% 斯皮尔曼相关系数
X = [3 8 4 7 2]' % 一定要变成列向量," ' "表示求转置。X = [3 8 4 7 2] 此时为行向量,转置后成为列向量。
Y = [5 10 9 10 6]'
% 第一种计算方法1-6*(1+0.25+0.25+1)/5/24% 第二种计算方法
coeff = corr(X , Y , 'type' , 'Spearman')
% 等价于:
RX = [2 5 3 4 1]
RY = [1 4.5 3 4.5 2]
R = corrcoef(RX,RY)

当使用第二种计算方法计算时,所得结果如下:
计算结果2
由此,说明MATLAB使用的是基于第二种定义的计算方法!

3. 皮尔逊相关系数与斯皮尔曼相关系数计算结果的对比

% 计算矩阵各列的斯皮尔曼相关系数
R = corr(Test, 'type' , 'Spearman')

斯皮尔曼相关系数表

% 计算矩阵各列的皮尔逊相关系数
R = corrcoef(Test)

皮尔逊相关系数表

4. 斯皮尔曼相关系数的假设检验

分为两种情况:小样本和大样本

  1. 小样本情况(n ≤ 30),直接查临界值表
    H0:rs = 0; H1:rs ≠ 0
    使用得出的斯皮尔曼相关系数 r 与对应的临界值进行比较。
    斯皮尔曼等级相关的临界值
  2. 大样本情况下,统计量
    在这里插入图片描述
    H0:rs = 0; H1:rs ≠ 0,计算检验值z*,并求出对应的p值与0.05比较即可。
% 大样本下的假设检验
% 计算检验值 z*
disp(sqrt(591-1)*0.0301) % 计算p值
disp((1-normcdf(0.7311))*2) % normcdf用来计算标准正态分布的累积概率密度函数% 直接给出相关系数和p值
[R,P]=corr(Test, 'type' , 'Spearman')

在这里插入图片描述
p > 0.05,因此无法拒绝原假设,即该相关系数和0没有显著的差异。

二、斯皮尔曼相关系数与皮尔逊相关系数的比较

  1. 连续数据,正态分布,线性关系,用皮尔逊相关系数是最巧当的,当然用斯皮尔曼相关系数也可以,只是效率没有皮尔逊相关系数高;

  2. 上述任一条件不满足,就使用斯皮尔曼相关系数,不能使用皮尔逊相关系数。

  3. 两个定序数据之间使用斯皮尔曼相关系数

    定序数据:指仅仅反映观测对象等级、顺序关系的数据,是由尺度计量形成的,表现为类别,可以进行排序,属于品质数据。
    例如:优、良、差,我们可以用1表示差,2表示良、3表示优,但是,用 2 / 1 = 2 得出的 2 不具有任何含义。定序数据最重要的意义是代表了一组数据中的某种逻辑顺序。


http://chatgpt.dhexx.cn/article/BNpIag9v.shtml

相关文章

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嵌入到高级语言中混…

数据库应用(mysql)数据库编程

第1关&#xff1a;创建存储过程1 任务描述 本关任务&#xff1a; 1.新建一个没有参数的存储过程p1&#xff0c;显示product表中所有数据。 2.调用p1。 USE petstore; create procedure p1() #新建一个没有参数的存储过程 select * from product; call p1(); …

java数据库编程

java数据库编程 刚入门学习java数据库的编程&#xff0c;看了一部分的java核心技术卷2的内容&#xff0c;结合在blibli上看了javaweb的视频&#xff0c;先写一个入门级的数据库文章。 jdbc是由java定制的一套操作数据库的API&#xff08;应用程序编程接口&#xff09;。通过…

MySQL数据库编程(C++)介绍

本文主要介绍基于 C 编程语言&#xff0c;实现 MySQL 数据库编程的相关知识。 1 概述 本文利用 MySQL 接口实现基于 C 编程语言的 MySQL 数据库编程。 官网中对于 MySQL 的介绍如下&#xff1a; MySQL is a C wrapper for MySQL’s C API. It is built around the same prin…

数据库编程——简单教程

一、实验目的 1、掌握存储过程的概念、优点、特点及用途&#xff1b; 2、掌握创建、执行、修改和删除存储过程的方法。 二、实验内容 &#xff08;一&#xff09;附加上次实验所创建的数据库“db_Library”&#xff0c;并回顾该库的数据表信息。 &#xff08;二&#xff09;练习…