当前位置:   article > 正文

数学建模:数据相关性分析(Pearson和 Spearman相关系数)含python实现

数学建模:数据相关性分析(Pearson和 Spearman相关系数)含python实现

  相关性分析是一种用于衡量两个或多个变量之间关系密切程度的方法。相关性分析通常用于探索变量之间的关系,以及预测一个变量如何随着另一个变量的变化而变化。在数学建模中,这是常用的数据分析手段。
  相关性分析的结果通常用相关系数来表示,相关系数的取值范围为-1到1,其中1表示完全正相关,-1表示完全负相关,0表示没有相关性。
我们常用的相关系数包括:

  1. Pearson相关系数:用于衡量两个连续变量之间的线性关系。取值范围在 -1 到 1 之间,其中 -1 表示完全负相关,1 表示完全正相关,0 表示无线性关系。
  2. Spearman等级相关系数:用于衡量两个变量之间的单调关系,不要求变量呈线性关系。对于等级或顺序数据更为适用。

  在使用相关系数时,我们需要注意:样本越大,相关系数估计越稳定;有些相关系数对数据分布的假设比较敏感,确保你的数据满足相关方法的前提条件;相关性不代表因果关系,即使两个变量相关,也不能得出一个是因为另一个的结论。那么,对于这两种相关系数,我们如何选择呢?

Pearson相关系数

  Pearson相关系数是一种用于度量两个连续变量之间线性关系强度和方向的统计量。它通常用字母 τ \tau τ 表示,取值范围在 -1 到 1 之间。
  计算皮尔逊相关性时,要了解它要符合5个假设:连续变量;两个变量之间存在一定线性关系;两个变量应该大致符合正态分布;数据集中每个观测数据包括成对数据;数据集中不应包括极端异常值数据。
公式为: τ = ∑ ( x i − x ‾ ) ( y i − y ‾ ) ∑ ( x i − x ‾ ) 2 ⋅ ∑ ( y i − y ‾ ) 2 \tau=\frac {\sum(x_i-\overline x)(y_i-\overline y)}{\sqrt{\sum(x_i-\overline x)^2\cdot\sum(y_i-\overline y)^2}} τ=(xix)2(yiy)2 (xix)(yiy)  其中, x i x_i xi y i y_i yi分别是两个变量的观察值, x ‾ \overline x x y ‾ \overline y y分别是两个变量的均值。
  Pearson相关系数假设两个变量之间的关系是线性的,因此它可能不适用于非线性关系的情况。在数据中存在异常值或数据不符合正态分布的情况下,Pearson相关系数的解释力也可能受到影响。在这些情况下,Spearman等级相关系数可能更为适用,因为它们对于非线性关系和异常值更具有鲁棒性。

Spearman等级相关系数

  Spearman等级相关系数(Spearman’s rank correlation coefficient),通常用符号 ρ \rho ρ表示,是一种用于度量两个变量之间的单调关系(不一定是线性关系)的统计量。Spearman相关系数基于变量的等级或秩次而不是具体的数值。这使得它对于数据的分布形状和是否满足正态分布的要求都相对较为鲁棒。
  计算Spearman等级相关系数的步骤:对于每个变量,将其观察值按照大小进行排名,即从最小到最大依次排列,并用秩次表示;对于每一对观察值,计算其等级差(即秩次差);计算等级差的平方和;使用公式将等级差的平方和转换为Spearman相关系数。
  设 D i D_i Di为变量X和Y对应的秩次差,n为样本大小,Spearman相关系数的计算公式为: ρ = 1 − 6 ∑ D i 2 n ( n 2 − 1 ) \rho=1-\frac{6\sum D_i^2}{n(n^2-1)} ρ=1n(n21)6Di2  Spearman相关系数的取值范围在 -1 到 1 之间:当 ρ=1 时,表示存在完全的正单调关系,即一个变量的增加伴随着另一个变量的增加;当 ρ=−1 时,表示存在完全的负单调关系,即一个变量的增加伴随着另一个变量的减少;当 ρ=0 时,表示两个变量之间没有单调关系。
  Spearman相关系数对于非线性关系和异常值的敏感性相对较低,因此在数据不满足正态分布、存在异常值或者存在非线性关系的情况。

python代码实现

计算相关系数:


import pandas as pd

# 示例数据
df = pd.DataFrame({'data1': [1, 2, 3, 4, 5], 'data2': [5, 4, 3, 2, 1]})

# 计算 Pearson 相关系数
pearson_corr = df['data1'].corr(df['data2'])

# 计算 Spearman 等级相关系数
spearman_corr = df['data1'].corr(df['data2'], method='spearman')

print("Pearson 相关系数:", pearson_corr)
print("Spearman 等级相关系数:", spearman_corr)

# Pearson 相关系数: -0.9999999999999999
# Spearman 等级相关系数: -0.9999999999999999
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

给出我去年做华为杯的一个例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

画出相关系数热力图:
在这里插入图片描述

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/79871
推荐阅读
相关标签
  

闽ICP备14008679号