斯皮尔曼相关性系数的代码
时间: 2025-05-08 21:19:34 浏览: 29
### 斯皮尔曼相关性系数的代码实现
斯皮尔曼相关性系数是一种衡量两个变量之间单调关系的方法,它基于秩次而非原始数据值来计算。以下是 Python 中使用 `scipy` 库实现斯皮尔曼相关性系数的代码:
```python
from scipy.stats import spearmanr
def calculate_spearman_correlation(x, y):
"""
计算两组数据之间的斯皮尔曼相关性系数。
参数:
x (list or array-like): 第一组数据。
y (list or array-like): 第二组数据。
返回:
tuple: 包含斯皮尔曼相关性系数和 p 值的结果元组。
"""
coef, p_value = spearmanr(x, y)
return coef, p_value
# 示例数据
data_x = [1, 2, 3, 4, 5]
data_y = [5, 6, 7, 8, 7]
coef, p_value = calculate_spearman_correlation(data_x, data_y)
print(f"Spearman Correlation Coefficient: {coef}")
print(f"P-value: {p_value}")
```
上述代码通过调用 `scipy.stats.spearmanr` 函数实现了斯皮尔曼相关性系数的计算[^1]。该函数返回两个值:一个是相关性系数本身,另一个是对应的显著性水平(p 值)。如果需要手动实现而不依赖外部库,则可以按照以下方法完成:
#### 手动实现斯皮尔曼相关性系数
斯皮尔曼相关性系数可以通过以下公式定义:
\[
\rho = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)}
\]
其中 \(d_i\) 是每一对观测值的秩差,\(n\) 是样本数量。
下面是不借助任何统计库的手动实现版本:
```python
import numpy as np
def rank_data(data):
"""对数据进行排名"""
sorted_indices = np.argsort(data)
ranks = np.empty_like(sorted_indices)
ranks[sorted_indices] = np.arange(1, len(data) + 1)
return ranks
def manual_spearman_correlation(x, y):
"""
手动计算两组数据之间的斯皮尔曼相关性系数。
参数:
x (list or array-like): 第一组数据。
y (list or array-like): 第二组数据。
返回:
float: 斯皮尔曼相关性系数。
"""
n = len(x)
rank_x = rank_data(x)
rank_y = rank_data(y)
d_squared = sum((rank_x[i] - rank_y[i]) ** 2 for i in range(n))
rho = 1 - (6 * d_squared) / (n * (n**2 - 1))
return rho
# 示例数据
data_x = [1, 2, 3, 4, 5]
data_y = [5, 6, 7, 8, 7]
rho_manual = manual_spearman_correlation(data_x, data_y)
print(f"Manual Spearman Correlation Coefficient: {rho_manual}")
```
此代码首先对输入的数据进行了排序并赋予其相应的秩次,随后利用公式计算了斯皮尔曼相关性系数。
---
阅读全文
相关推荐


















