📅  最后修改于: 2023-12-03 15:34:04.461000             🧑  作者: Mango
Spearman 相关性是一种用于度量两个变量之间的单调关系的方法,它不需要假设两个变量的分布是正态分布,因此可以用于非线性关系的变量。
Python 中的 scipy
库提供了 spearmanr()
函数来计算 Spearman 相关性。它的用法如下所示:
from scipy.stats import spearmanr
corr, p_val = spearmanr(x, y)
其中,x
和 y
是两个要比较的变量,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()
输出结果如下图所示:
可以看出,变量 x
和 y
之间呈现一种明显的线性相关性,Spearman 相关系数为 0.89。