如何在R中计算Cohen's Kappa与PABAK系数?
R中同时计算Cohen's Kappa与PABAK的实现方案
你可以通过IRR包计算Cohen's Kappa+自定义函数实现PABAK的组合方案满足需求,完全适配两名评分者的场景,不会引入Fleiss' Kappa适配多评分者的偏差:
1. 用IRR包计算Cohen's Kappa
直接调用IRR::kappa2()即可得到你需要的Cohen's Kappa结果,示例代码如下:
# 加载IRR包 library(IRR) # 示例数据:两列分别对应两名评分者的分类结果 score_df <- data.frame( rater1 = c(rep("类别1",85), rep("类别2",10), rep("类别3",5)), rater2 = c(rep("类别1",80), rep("类别2",12), rep("类别3",8)) ) # 计算未加权Cohen's Kappa,如需加权修改weight参数即可 cohen_kappa_res <- kappa2(score_df, weight = "unweighted") # 查看结果 print(cohen_kappa_res)
2. 自定义函数计算PABAK
PABAK的计算逻辑固定,针对两名评分者的公式为:
PABAK = (k * Po - 1)/(k - 1)
其中k为分类变量的类别总数,Po为两名评分者的观察一致率。不需要依赖其他包即可实现:
# PABAK计算函数 calc_pabak <- function(rater_a, rater_b) { # 计算观察一致率 obs_agree <- mean(rater_a == rater_b) # 计算总类别数 class_n <- length(unique(c(rater_a, rater_b))) # 计算PABAK pabak <- (class_n * obs_agree - 1)/(class_n - 1) return(pabak) } # 调用函数得到结果 pabak_res <- calc_pabak(score_df$rater1, score_df$rater2) print(pabak_res)
你可以直接对照PABAK的官方计算公式验证结果,该方案完全符合你优先使用IRR包得到Cohen's Kappa、同时避免Fleiss' Kappa适配问题的需求。
内容的提问来源于stack exchange,提问作者max22
相关产品推荐
相关产品推荐

