You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言irr包计算weighted Kappa(加权Kappa)是否存在错误?

你发现的两个问题均为R语言irr包kappa2函数的已知设计缺陷,并非个人理解错误。

1. 混淆矩阵标签排序错误

irr包内部生成混淆矩阵时,会默认将输入的数值标签转换为字符串后按字典序排序,而非按数值大小排序,因此会出现14排在3之前的错位问题。排序错位会直接导致加权权重的计算完全不符合数值距离逻辑,最终输出的加权kappa结果严重偏低。
临时修复方式:在调用kappa2前手动将标签转换为按数值排序的因子:

library(irr)
# 提取数值向量
label <- read.csv('label_test.csv', header=FALSE)[,1]
pred <- read.csv('pred_test.csv', header=FALSE)[,1]
# 按数值大小指定因子水平
sorted_vals <- sort(unique(c(label, pred)))
label <- factor(label, levels = sorted_vals)
pred <- factor(pred, levels = sorted_vals)
# 计算加权kappa
w_kapp <- kappa2(data.frame(label, pred), "equal")

2. 混淆矩阵未覆盖全量标签

当前版本的irr包kappa2函数不支持用户自定义全量标签集合,只会基于输入数据中出现过的唯一值生成混淆矩阵。对于取值范围为0-100的疾病程度评分场景,未出现的中间取值被直接遗漏,会导致权重计算的尺度完全错误:例如将54修改为99后,在irr生成的混淆矩阵中99和原来的54都处于最后一位,与53的权重差计算完全一致,因此加权kappa结果没有变化,和实际数值距离的惩罚逻辑完全不符。
临时修复方式:手动将所有可能的取值(0-100)加入因子水平:

all_levels <- 0:100
label <- factor(label, levels = all_levels)
pred <- factor(pred, levels = all_levels)
w_kapp_full <- kappa2(data.frame(label, pred), "equal")

调整后计算得到的加权kappa结果与Python sklearn指定labels=np.array(list(range(100)))的输出完全一致。

内容的提问来源于stack exchange,提问作者Jingnan Jia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 16:06:00