肯德尔协调系数(Kendall's coefficient of concordance,通常记作 W)是一种用于衡量多个评分者之间一致性程度的统计量。它特别适用于多个评分者对一组项目进行排序或评分的情况,用于评估这些评分者之间的一致性水平。
肯德尔协调系数 W 的取值范围在 0 到 1 之间:
公式如下:
W=m2(N3−N)12∑i=1N(Ri−Rˉ)2
其中:
可以使用 scipy.stats
模块中的 kendalltau
来计算单个评分者对之间的肯德尔相关系数,但对于多个评分者的一致性,需要手动实现 W 的计算。以下是一个示例代码:
import numpy as np
from scipy.stats import rankdata
def kendall_w(scores):
"""
计算肯德尔协调系数 W
参数:
scores : 二维数组,形状为 (m, N),其中 m 是评分者数量,N 是项目数量
每一行代表一个评分者的评分或排名
返回:
W : 肯德尔协调系数
"""
m, N = scores.shape
# 如果是评分而非排名,先转换为排名
if np.issubdtype(scores.dtype, np.number):
# 对每一列(每个项目)进行排名
ranks = np.array([rankdata(score, method='average') for score in scores])
else:
# 假设输入已经是排名
ranks = scores.astype(int)
# 计算每个项目的总排名
R_i = ranks.sum(axis=0)
# 计算平均总排名
R_bar = m * (N + 1) / 2
# 计算 sum (R_i - R_bar)^2
sum_sq_diff = np.sum((R_i - R_bar) ** 2)
# 计算 W
numerator = 12 * sum_sq_diff
denominator = m**2 * (N**3 - N)
W = numerator / denominator
return W
# 示例数据
# 假设有 4 个评分者对 5 个项目进行评分(评分越高越好)
scores = np.array([
[9, 6, 8, 7, 5], # 评分者 1
[7, 5, 6, 8, 6], # 评分者 2
[8, 7, 7, 6, 5], # 评分者 3
[6, 5, 8, 7, 6] # 评分者 4
])
W = kendall_w(scores)
print(f"肯德尔协调系数 W: {W:.4f}")
假设有 4 个评分者(行)对 5 个项目(列)进行评分,分数越高表示评价越好。运行上述代码将输出肯德尔协调系数 W,值越接近 1 表示评分者之间的一致性越高。
scipy
进行相关分析(补充)虽然 scipy
没有直接计算肯德尔协调系数 W 的函数,但可以使用 scipy.stats.kendalltau
来计算两个评分者之间的肯德尔相关系数。如果需要评估多个评分者之间的一致性,仍需手动计算 W。
from scipy.stats import kendalltau
# 计算两个评分者之间的肯德尔相关系数
tau, p_value = kendalltau(scores[0], scores[1])
print(f"评分者1与评分者2的肯德尔相关系数: {tau:.4f}")
领取专属 10元无门槛券
手把手带您无忧上云