📜  python spearman 相关性 - Python (1)

📅  最后修改于: 2023-12-03 15:34:04.461000             🧑  作者: Mango

Python Spearman 相关性

Spearman 相关性是一种用于度量两个变量之间的单调关系的方法,它不需要假设两个变量的分布是正态分布,因此可以用于非线性关系的变量。

Python 中的 scipy 库提供了 spearmanr() 函数来计算 Spearman 相关性。它的用法如下所示:

from scipy.stats import spearmanr

corr, p_val = spearmanr(x, y)

其中,xy 是两个要比较的变量,corr 是它们的 Spearman 相关系数,p_val 是 p 值,用于检验相关系数是否显著。

值得注意的是,spearmanr() 函数还可以接受一个参数 axis,用于计算矩阵中每一列或每一行的 Spearman 相关性。

下面是一个例子,计算一组数据的 Spearman 相关性:

import numpy as np
from scipy.stats import spearmanr

x = np.array([1, 2, 3, 4, 5])
y = np.array([5, 4, 3, 2, 1])

corr, p_val = spearmanr(x, y)
print("Spearman correlation coefficient:", corr)
print("p-value:", p_val)

输出结果为:

Spearman correlation coefficient: -1.0
p-value: 0.0

这说明两个变量呈完全的负相关关系。p 值为 0,说明这个结果是非常显著的。

在实际应用中,我们经常需要通过可视化的方式来展现变量之间的相关性。下面是一个例子,使用 Python 的 matplotlib 库展现两个变量之间的 Spearman 相关性:

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

# 生成随机数据
np.random.seed(0)
x = np.random.randn(100)
y = 3 * x + np.random.randn(100)

# 计算 Spearman 相关性
corr, p_val = spearmanr(x, y)

# 绘制散点图和回归线
fig, ax = plt.subplots()
ax.scatter(x, y, alpha=0.5)
ax.plot(x, 3 * x, 'r', label=f"Spearman correlation: {corr:.2f}")
ax.legend()
plt.show()

输出结果如下图所示:

spearman.png

可以看出,变量 xy 之间呈现一种明显的线性相关性,Spearman 相关系数为 0.89。