如何计算7个评分者所有组合的加权Kappa并整理结果?
计算所有评分者配对的加权Kappa并整理结果
要实现你想要的效果,我们可以分几步来完成,核心是先生成所有唯一的列配对,再批量计算加权Kappa,最后整理成清晰的结构:
步骤1:准备工作
首先加载需要的irr包,确保你的数据已经加载好:
library(irr) # 你的样本数据 ex <- structure(list(`1` = c(1, 1, 2, 1, 2, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2), `2` = c(1, 1, 1, 1, 2, 1, 1, 1, 2, 3, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2), `3` = c(1, 1, 2, 1, 2, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2), `4` = c(1, 1, 2, 2, 2, 1, 2, 2, 2, 3, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2), pa = c(1, 2, 1, 2, 3, 1, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 1, 3, 2), ta = c(2, 2, 2, 1, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 3), ka = c(1, 1, 2, 1, 2, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2)), row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"))
步骤2:生成所有唯一的列配对
用combn函数生成所有两两不重复的列组合(避免像1_2和2_1这样的重复计算),同时给每个配对命名成你想要的列名1_列名2格式:
# 生成所有两两列组合 col_pairs <- combn(colnames(ex), 2, simplify = FALSE) # 给每个组合命名 names(col_pairs) <- sapply(col_pairs, function(x) paste(x, collapse = "_"))
步骤3:批量计算加权Kappa
用lapply循环每个列配对,调用kappa2计算加权Kappa:
# 计算所有配对的加权Kappa kappa_results <- lapply(col_pairs, function(pair) { kappa2(ex[, pair], weight = "weighted") # 指定weight参数为weighted计算加权Kappa })
步骤4:整理成你需要的结构
选项1:每个配对作为列(存储完整的kappa2对象)
如果你想完全按照你示例里的格式,把每个配对的kappa2结果作为数据框的一列,可以直接转换:
out <- as.data.frame(kappa_results)
这样你可以通过out$1_2来查看对应配对的完整Kappa分析结果。
选项2:提取关键统计量成可视化友好的表格
如果是为了后续可视化分析,更推荐把关键统计量(比如Kappa值、标准误、P值)整理成长格式数据框,方便绘图:
out_df <- data.frame( Pair = names(kappa_results), Weighted_Kappa = sapply(kappa_results, function(x) x$value), Standard_Error = sapply(kappa_results, function(x) x$se), Z_Statistic = sapply(kappa_results, function(x) x$statistic), P_Value = sapply(kappa_results, function(x) x$p.value) )
这个表格会清晰展示每个配对的核心结果,直接拿来做柱状图或热力图都很方便。
内容的提问来源于stack exchange,提问作者Fredrik Nylén
相关产品推荐
相关产品推荐

