斯皮尔曼相关系数代码
时间: 2025-01-04 10:20:56 浏览: 11
### 斯皮尔曼相关系数 Python 实现代码示例
为了计算斯皮尔曼相关系数,可以利用 `scipy` 库中的 `spearmanr` 函数来简化操作。下面是一个具体的例子:
```python
import numpy as np
from scipy import stats
# 定义两组数据
data_x = [3, 5, 1, 6, 7, 2, 8, 9, 4]
data_y = [5, 3, 2, 6, 8, 1, 7, 9, 4]
# 使用 scipy.stats.spearmanr 计算斯皮尔曼相关系数
correlation_coefficient, p_value = stats.spearmanr(data_x, data_y)
print(f"Spearman Correlation Coefficient: {correlation_coefficient}")
print(f"P-value: {p_value}")
```
这段代码展示了如何通过导入必要的库并准备待分析的数据集之后,调用 `stats.spearmanr()` 方法获取斯皮尔曼相关系数以及对应的 P 值[^1]。
除了使用现有的科学计算库外,还可以手动编写函数来进行排名转换和最终的相关性评估。这里给出一个不依赖额外库的手动实现版本:
```python
def spearman_rank_correlation(x, y):
n = len(x)
# 对原始数值进行排序得到秩次
rank_x = [sorted(x).index(value) + 1 for value in x]
rank_y = [sorted(y).index(value) + 1 for value in y]
# 计算差平方之和
d_squared_sum = sum((rx - ry)**2 for rx, ry in zip(rank_x, rank_y))
# 根据公式计算斯皮尔曼相关系数
coefficient = 1 - (6 * d_squared_sum / (n*(n**2-1)))
return coefficient
# 测试自定义的斯皮尔曼相关系数函数
custom_corr = spearman_rank_correlation(data_x, data_y)
print(f"Custom Spearman Correlation Coefficient: {custom_corr}")
```
此部分实现了基于定义公式的直接计算方式,即先确定各观测值在其样本内的相对位置(秩),再依据这些秩之间的差异程度得出最终的结果[^2]。
阅读全文