如何用irr包kappa2()批量计算各item的Cohen's Kappa并汇总至DataFrame
批量计算多个项目的Cohen's Kappa值
可以通过分组处理每个项目的两次测量列,结合irr包的kappa2()函数实现批量计算,最终汇总成指定结构的DataFrame。以下是具体实现步骤:
1. 加载必要的包
首先确保安装并加载irr包:
install.packages("irr") # 若未安装则执行此步 library(irr)
2. 批量计算并汇总结果
使用lapply遍历每个项目,提取对应的两次测量列计算Kappa值,再将所有结果合并为目标结构的DataFrame:
# 生成示例数据(可替换为你的实际数据) items <- data.frame(matrix(0, nrow = 51, ncol = 41)) colnames(items) <- c("ID", paste(rep(paste0("item", 1:20), each = 2), c("_1", "_2"), sep = "")) items$ID <- 1:51 set.seed(123) items[, 2:41] <- matrix(sample(c(0, 1), size = 20 * 2 * 51, replace = TRUE), ncol = 40) # 获取所有唯一的项目名称 item_names <- unique(sub("_.*", "", colnames(items)[-1])) # 批量计算每个项目的Kappa值并整理结果 result_list <- lapply(seq_along(item_names), function(i) { # 获取当前项目的两次测量列 current_cols <- paste0(item_names[i], c("_1", "_2")) # 计算Cohen's Kappa kappa_result <- kappa2(items[, current_cols]) # 整理成目标结构的单行DataFrame data.frame( item = i, method = kappa_result$method, subjects = kappa_result$subjects, raters = kappa_result$raters, irr.name = "Kappa", value = kappa_result$value, stat.name = "Z", statistic = kappa_result$statistic, p.value = kappa_result$p.value, stringsAsFactors = FALSE ) }) # 合并所有结果为一个DataFrame final_results <- do.call(rbind, result_list) # 查看结果 print(final_results)
代码说明
sub("_.*", "", colnames(items)[-1]):从列名中提取项目前缀(去除_1/_2后缀),得到唯一的项目列表。lapply:遍历每个项目,对对应的两列调用kappa2()计算Kappa值。do.call(rbind, result_list):将每个项目的结果行合并成最终的汇总DataFrame。
运行后,final_results将完全符合你期望的结构,包含每个项目的Kappa值、统计量Z值和p值等信息。
内容的提问来源于stack exchange,提问作者user21538383
相关产品推荐
相关产品推荐

