数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

数学建模:相关性分析学习——皮尔逊(Pearson)相关系数与斯皮尔曼(Spearman)相关系数

在数据分析中,相关性分析是理解变量之间关系的一个重要步骤。相关性分析通过计算相关系数来衡量两个变量之间的线性或非线性关系。本篇文章将详细介绍 皮尔逊相关系数(Pearson Correlation)和 斯皮尔曼相关系数(Spearman Correlation),并展示如何通过 Python 进行相关性分析。我们将通过实际的代码示例、图解和详细说明,帮助你掌握这两种常用的相关性分析方法。

目录

  1. 相关性分析概述
  2. 皮尔逊相关系数(Pearson Correlation)

    • 2.1 皮尔逊相关系数的定义
    • 2.2 皮尔逊相关系数的计算公式
    • 2.3 Python 实现与示例
    • 2.4 皮尔逊相关系数的图解与应用
  3. 斯皮尔曼相关系数(Spearman Correlation)

    • 3.1 斯皮尔曼相关系数的定义
    • 3.2 斯皮尔曼相关系数的计算公式
    • 3.3 Python 实现与示例
    • 3.4 斯皮尔曼相关系数的图解与应用
  4. 皮尔逊与斯皮尔曼相关系数的比较
  5. 总结

1. 相关性分析概述

在数据科学中,相关性分析是用来衡量和描述两个变量之间关系强度的一个常用统计方法。它可以帮助我们判断变量之间的关联性,例如:

  • 正相关:一个变量增加时,另一个变量也增加。
  • 负相关:一个变量增加时,另一个变量减少。
  • 无相关:两个变量之间没有明显的线性或非线性关系。

常见的相关性度量方法有 皮尔逊相关系数斯皮尔曼相关系数。这两种方法分别用于衡量线性关系和非线性关系。接下来,我们将逐一介绍这两种方法的定义、计算方法、应用场景及 Python 实现。


2. 皮尔逊相关系数(Pearson Correlation)

2.1 皮尔逊相关系数的定义

皮尔逊相关系数(Pearson Correlation Coefficient)是衡量两个变量之间 线性关系 强度的度量。它的值介于 -1 和 1 之间:

  • r = 1:完全正相关,两个变量完全同步变化。
  • r = -1:完全负相关,一个变量增加时另一个变量减少。
  • r = 0:无相关,两个变量之间没有任何线性关系。

2.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 \sum_{i=1}^{n} (Y_i - \bar{Y})^2}} \]

其中:

  • ( X_i )( Y_i ) 分别是两个变量的每个数据点。
  • ( \bar{X} )( \bar{Y} ) 是两个变量的均值。
  • ( n ) 是数据点的数量。

2.3 Python 实现与示例

我们可以使用 Python 中的 NumPySciPy 库来计算皮尔逊相关系数。以下是使用 NumPySciPy 计算皮尔逊相关系数的示例:

import numpy as np
from scipy.stats import pearsonr
import matplotlib.pyplot as plt

# 生成示例数据
X = np.array([1, 2, 3, 4, 5])
Y = np.array([2, 4, 6, 8, 10])

# 计算皮尔逊相关系数
pearson_corr, _ = pearsonr(X, Y)
print(f"皮尔逊相关系数: {pearson_corr}")

# 绘制散点图
plt.scatter(X, Y, color='b')
plt.title("Scatter plot of X vs Y")
plt.xlabel("X")
plt.ylabel("Y")
plt.grid(True)
plt.show()

输出:

皮尔逊相关系数: 1.0

在这个例子中,皮尔逊相关系数为 1.0,表示变量 X 和 Y 之间存在完全的正相关关系。

2.4 皮尔逊相关系数的图解与应用

  • 正相关:当皮尔逊相关系数接近 1 时,表示两个变量之间有很强的正线性关系。例如,X 和 Y 的散点图可能呈现一条上升的直线。
  • 负相关:当皮尔逊相关系数接近 -1 时,表示两个变量之间有很强的负线性关系。例如,X 和 Y 的散点图可能呈现一条下降的直线。
  • 无相关:当皮尔逊相关系数接近 0 时,表示两个变量之间没有线性关系,散点图呈现无规律的散布。

3. 斯皮尔曼相关系数(Spearman Correlation)

3.1 斯皮尔曼相关系数的定义

斯皮尔曼相关系数Spearman's Rank Correlation)是一种非参数的统计方法,旨在衡量两个变量之间的 单调关系,即无论数据是否呈线性,变量间的增减关系是否一致。斯皮尔曼系数是基于排名而非原始数据计算的,因此它比皮尔逊相关系数更适合衡量非线性关系。

斯皮尔曼相关系数的值也在 -1 和 1 之间:

  • r = 1:完全正相关,两个变量之间的排名完全一致。
  • r = -1:完全负相关,两个变量之间的排名完全相反。
  • r = 0:无相关,两个变量之间没有单调关系。

3.2 斯皮尔曼相关系数的计算公式

斯皮尔曼相关系数的计算公式如下:

\[ r_s = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)} \]

其中:

  • ( d_i ) 是两个变量的每对排名之差。
  • ( n ) 是数据点的数量。

3.3 Python 实现与示例

斯皮尔曼相关系数可以通过 SciPy 库中的 spearmanr 函数计算:

from scipy.stats import spearmanr

# 生成示例数据
X = np.array([1, 2, 3, 4, 5])
Y = np.array([5, 4, 3, 2, 1])

# 计算斯皮尔曼相关系数
spearman_corr, _ = spearmanr(X, Y)
print(f"斯皮尔曼相关系数: {spearman_corr}")

# 绘制散点图
plt.scatter(X, Y, color='r')
plt.title("Scatter plot of X vs Y (Spearman)")
plt.xlabel("X")
plt.ylabel("Y")
plt.grid(True)
plt.show()

输出:

斯皮尔曼相关系数: -1.0

在这个例子中,斯皮尔曼相关系数为 -1.0,表示变量 X 和 Y 之间有完全的负单调关系,即 X 增加时,Y 减少。

3.4 斯皮尔曼相关系数的图解与应用

  • 正相关:当斯皮尔曼相关系数接近 1 时,表示两个变量之间有一致的排名顺序,散点图中的点会沿着上升的斜线分布。
  • 负相关:当斯皮尔曼相关系数接近 -1 时,表示两个变量之间有相反的排名顺序,散点图中的点会沿着下降的斜线分布。
  • 无相关:当斯皮尔曼相关系数接近 0 时,表示两个变量之间没有明显的单调关系,散点图可能显示无规律的分布。

4. 皮尔逊与斯皮尔曼相关系数的比较

特性皮尔逊相关系数斯皮尔曼相关系数
计算依据变量之间的 线性关系变量之间的 单调关系
要求

适用于连续变量,数据需要满足正态分布 | 不要求数据呈正态分布,可以用于有序类别数据 |
| 适用场景 | 用于检验两个变量之间的线性关系 | 用于检验两个变量之间的单调关系 |
| 值域 | [-1, 1] | [-1, 1] |
| 优点 | 计算简便,适合线性关系 | 适用于非线性关系,稳健性强 |


5. 总结

  • 皮尔逊相关系数:适用于衡量 线性关系,要求数据满足正态分布。
  • 斯皮尔曼相关系数:适用于衡量 单调关系,不要求数据正态分布,适用于有序类别数据。

在实际应用中,选择皮尔逊还是斯皮尔曼相关系数,取决于数据的特征和分析目标。如果数据呈现线性关系,皮尔逊相关系数可能更加合适;如果数据关系是单调的,但不一定是线性的,斯皮尔曼相关系数可能会更好。

希望通过本教程,你能够熟练掌握这两种常见的相关性分析方法,并能够在数据分析中得心应手地应用它们。

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日