数学建模学习-相关系数分析(Correlation Analysis)教程(39) Pearson相关系数和Spearman相关系数

数学建模学习-相关系数分析(Correlation Analysis)教程(39)

写在最前

注意本文的相关代码及例子为同学们提供参考,借鉴相关结构,在这里举一些通俗易懂的例子,方便同学们根据实际情况修改代码,很多同学私信反映能否添加一些可视化,这里每篇教程都尽可能增加一些可视化方便同学理解,但具体使用时,同学们要根据实际情况选择是否在论文中添加可视化图片。

系列教程计划持续更新,同学们可以免费订阅专栏,内容充足后专栏可能付费,提前订阅的同学可以免费阅读,同时相关代码获取可以关注博主评论或私信。

一、相关系数简介

相关系数是统计学中用于衡量两个变量之间线性相关程度的指标。在数学建模中,相关系数分析是一个非常重要的工具,它可以帮助我们:

  1. 发现变量之间的关系
  2. 量化变量之间的相关程度
  3. 为后续建模提供依据
  4. 验证模型的有效性

本教程将介绍两种最常用的相关系数:Pearson相关系数和Spearman相关系数。

二、Pearson相关系数

2.1 理论基础

Pearson相关系数(皮尔逊相关系数)是最常用的一种相关系数,用于衡量两个变量之间的线性相关程度。其计算公式为:

r = ∑ 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{\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}} r=i=1n(xixˉ)2 i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)

其中:

  • r r r 是Pearson相关系数
  • x i x_i xi, y i y_i yi 是两个变量的观测值
  • x ˉ \bar{x} xˉ, y ˉ \bar{y} yˉ 是两个变量的平均值
  • n n n 是样本数量

2.2 特点

  1. 取值范围:[-1, 1]

    • r = 1 表示完全正相关
    • r = -1 表示完全负相关
    • r = 0 表示无线性相关
  2. 优点:

    • 计算简单,易于理解
    • 能够很好地描述线性关系
    • 广泛应用于各个领域
  3. 局限性:

    • 只能衡量线性相关关系
    • 对异常值敏感
    • 要求数据符合正态分布

三、Spearman相关系数

3.1 理论基础

Spearman相关系数(斯皮尔曼相关系数)是一种秩相关系数,它通过计算两个变量的秩次之间的Pearson相关系数来衡量两个变量之间的相关性。计算公式为:

ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \rho = 1 - \frac{6\sum d_i^2}{n(n^2-1)} ρ=1n(n21)6di2

其中:

  • ρ \rho ρ 是Spearman相关系数
  • d i d_i di 是第i个观测值的两个变量的秩次差
  • n n n 是样本数量

3.2 特点

  1. 取值范围:[-1, 1],与Pearson相关系数相同

  2. 优点:

    • 不要求数据符合正态分布
    • 对异常值不敏感
    • 可以衡量非线性的单调关系
  3. 局限性:

    • 信息利用不如Pearson充分
    • 计算相对复杂
    • 只能衡量单调关系

四、环境准备

4.1 所需库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

4.2 依赖安装

pip install numpy pandas matplotlib seaborn scipy

五、代码实现

5.1 数据准备

# 生成示例数据
np.random.seed(42)
n = 100

# 生成正相关数据
x1 = np.random.normal(0, 1, n)
y1 = x1 * 0.8 + np.random.normal(0, 0.2, n)

# 生成负相关数据
x2 = np.random.normal(0, 1, n)
y2 = -x2 * 0.8 + np.random.normal(0, 0.2, n)

# 生成非线性相关数据
x3 = np.random.uniform(-3, 3, n)
y3 = x3**2 + np.random.normal(0, 1, n)

5.2 相关系数计算和可视化

def plot_correlation(x, y, title, filename):
    """绘制散点图并计算相关系数"""
    pearson_corr, _ = stats.pearsonr(x, y)
    spearman_corr, _ = stats.spearmanr(x, y)
    
    plt.figure(figsize=(10, 6))
    plt.scatter(x, y, alpha=0.5)
    plt.title(f'{title}\nPearson相关系数: {pearson_corr:.3f}\nSpearman相关系数: {spearman_corr:.3f}')
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.grid(True)
    plt.savefig(f'images/{filename}.png')
    plt.close()

5.3 实际应用示例

# 创建示例数据的数据框
df = pd.DataFrame({
    '身高': np.random.normal(170, 10, 100),  # 身高数据
    '体重': np.random.normal(65, 8, 100),    # 体重数据
    '年龄': np.random.normal(30, 5, 100),    # 年龄数据
    '收入': np.random.normal(10000, 2000, 100)  # 收入数据
})

# 添加一些相关性
df['体重'] = df['身高'] * 0.5 + df['体重'] * 0.5
df['收入'] = df['年龄'] * 0.3 + df['收入'] * 0.7

# 计算相关系数矩阵
pearson_matrix = df.corr(method='pearson')
spearman_matrix = df.corr(method='spearman')

六、结果分析

6.1 正相关示例

[外链图片转存中…(img-ts84cVQ4-1737432346264)]在这里插入图片描述

在正相关示例中,我们可以看到:

  1. 数据点呈现明显的正相关趋势
  2. Pearson相关系数和Spearman相关系数都接近0.8
  3. 两种相关系数的值非常接近,说明这种线性关系被很好地捕捉到了

6.2 负相关示例

[外链图片转存中…(img-z6eflNBl-1737432356443)]在这里插入图片描述

在负相关示例中,我们可以观察到:

  1. 数据点呈现明显的负相关趋势
  2. 两个相关系数都接近-0.8
  3. 负相关关系被准确地量化了

6.3 非线性相关示例

[外链图片转存中…(img-AGxrWUFW-1737432366380)]在这里插入图片描述

在非线性相关示例中:

  1. 数据点呈现明显的二次函数关系
  2. Pearson相关系数接近0,因为它只能捕捉线性关系
  3. Spearman相关系数的绝对值较大,因为它能够捕捉非线性的单调关系

6.4 相关系数矩阵分析

Pearson相关系数矩阵

[外链图片转存中…(img-3T0Xatd5-1737432376923)]在这里插入图片描述

Spearman相关系数矩阵

在这里插入图片描述

从相关系数矩阵中,我们可以观察到:

  1. 身高和体重呈现较强的正相关关系(约0.75-0.79)
  2. 年龄和收入之间存在弱负相关关系
  3. 其他变量之间的相关性较弱

七、应用建议

  1. 选择合适的相关系数:

    • 如果确信变量之间是线性关系,优先使用Pearson相关系数
    • 如果数据不符合正态分布或存在异常值,考虑使用Spearman相关系数
    • 在探索性分析中,建议同时使用两种相关系数进行对比
  2. 结果解释:

    • |r| < 0.3:弱相关
    • 0.3 ≤ |r| < 0.5:中等相关
    • 0.5 ≤ |r| < 0.8:强相关
    • |r| ≥ 0.8:极强相关
  3. 注意事项:

    • 相关不等于因果
    • 要结合实际背景解释相关性
    • 注意样本量的影响
    • 警惕虚假相关

八、总结

相关系数分析是数学建模中的基础工具,它能帮助我们:

  1. 发现数据中的关联关系
  2. 为建模提供依据
  3. 验证模型的合理性

在实际应用中,建议:
4. 结合多种相关系数
5. 配合可视化分析
6. 注意数据的特点
7. 考虑实际背景

同学们如果有疑问可以私信答疑,如果有讲的不好的地方或可以改善的地方可以一起交流,谢谢大家。

对于改良 person 相关系数的方法,以下是一些常见的方法: 1. 斯皮尔曼相关系数Spearman&#39;s rank correlation coefficient):这是一种非参数方法,它将原始数据转换为排名数据,然后计算排名数据的 Pearson 相关系数。该方法对于处理非线性关系异常值具有鲁棒性。 2. 肯德尔相关系数(Kendall&#39;s rank correlation coefficient):与斯皮尔曼相关系数类似,肯德尔相关系数也是基于排名数据的非参数方法。它衡量了两个变量之间的等级一致性,而不仅仅是排名的相对大小。 3. 部分相关系数(Partial correlation coefficient):部分相关系数可以用来控制其他变量的影响,从而消除了多个变量之间的干扰。通过计算每对变量之间在其他变量条件下的相关性,可以得到它们之间的部分相关系数。 4. 异常值处理:异常值可能会对相关系数的计算结果产生较大的影响。通过检测处理异常值,可以减少其对相关系数的影响。 5. 数据转换:有时候,对原始数据进行一些变换可以改善相关系数的表现。例如,对数据进行对数转换、平方根转换或指数转换等。 6. 非线性相关性分析:如果变量之间存在非线性关系,则 Pearson 相关系数可能无法很好地捕捉到相关性。在这种情况下,可以尝试使用非线性相关性分析方法,例如局部线性嵌入(Locally Linear Embedding)或核相关分析(Kernel Correlation Analysis)等。 以上方法可以根据具体问题的要求选择适合的方法来改良 person 相关系数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值