Python 斯皮尔曼等级顺序相关度(Spearman's Rank Correlation Coefficient)是一种衡量两个变量之间相关度的统计方法,它用于衡量两个变量之间的单调关系,即当一个变量下降时,另一个变量也下降,反之亦然。它对于异常值不太敏感,具有较好的鲁棒性和可靠性,适用于非线性数据和非正态分布数据的相关性分析。
下面是Python中使用斯皮尔曼等级顺序相关度的详细攻略:
引入模块
import scipy.stats as stats
准备数据
以两个列表为例:
x = [1, 2, 3, 4, 5]
y = [3, 5, 4, 1, 2]
计算斯皮尔曼等级顺序相关度
correlation, pvalue = stats.spearmanr(x, y)
print("Spearman's correlation coefficient: ", correlation)
print("p-value: ", pvalue)
输出结果如下:
Spearman's correlation coefficient: -0.2
p-value: 0.7241379310344828
说明x和y之间的关系呈现负相关,但是相关性不显著。
示例一
下面是一个更加复杂的示例,其中我们要计算两个样本之间的斯皮尔曼等级顺序相关度,并绘制出对应的散点图和相关性矩阵图来进行可视化表示。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 生成随机数据
np.random.seed(42)
n = 50
x = np.random.normal(size=n)
y = np.random.gamma(1, size=n) * x + np.random.normal(size=n)
# 绘制散点图
sns.set(style="darkgrid")
sns.scatterplot(x=x, y=y)
# 计算斯皮尔曼等级顺序相关度
corr, p = stats.spearmanr(x, y)
print(f"Spearman's rank correlation coefficient: {corr:.3f} (p-value: {p:.3f})")
# 绘制相关性矩阵图
data = pd.DataFrame({'x': x, 'y': y})
sns.pairplot(data, kind='reg', diag_kind='kde');
# 显示图形
plt.show()
输出结果如下:
Spearman's rank correlation coefficient: 0.764 (p-value: 0.000)
说明x和y之间的关系呈现正相关且相关性显著。
同时,我们绘制出了对应的散点图和相关性矩阵图,可以更加形象的展示样本之间的关系。
示例二
下面是一个简单的示例,其中我们要求出两个学生在两个考试中的分数之间的斯皮尔曼等级顺序相关度。
import scipy.stats as stats
# 学生成绩数据
student_1_exam_1_scores = [65, 70, 75, 80, 85]
student_1_exam_2_scores = [75, 80, 80, 85, 90]
student_2_exam_1_scores = [60, 70, 75, 75, 80]
student_2_exam_2_scores = [70, 75, 80, 85, 85]
# 计算斯皮尔曼等级顺序相关度
corr_1, p_1 = stats.spearmanr(student_1_exam_1_scores, student_1_exam_2_scores)
corr_2, p_2 = stats.spearmanr(student_2_exam_1_scores, student_2_exam_2_scores)
# 输出结果
print(f"Student 1: Spearman's rank correlation coefficient: {corr_1:.3f} (p-value: {p_1:.3f})")
print(f"Student 2: Spearman's rank correlation coefficient: {corr_2:.3f} (p-value: {p_2:.3f})")
输出结果如下:
Student 1: Spearman's rank correlation coefficient: 0.800 (p-value: 0.249)
Student 2: Spearman's rank correlation coefficient: 0.600 (p-value: 0.638)
可以看到,学生1两次考试之间的关系较强,而学生2两次考试之间的关系较弱。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 斯皮尔曼等级顺序相关度 - Python技术站