R语言计算评分者间一致性报错:Fleiss' Kappa遇下标越界
解决R语言计算评分者间一致性的下标越界问题
错误原因
- 函数误用:
kappa2()是用于计算两位评分者的Cohen's Kappa,而你这里有多位评分者,需要用适用于多位评分者的Fleiss' Kappa,对应irr包的fleiss.kappa()函数。 - 数据格式错误:
ratings[, "clarity"]提取出的是一维向量,而kappa2()需要二维结构(比如两列的矩阵/数据框,对应两位评分者的评分),一维向量会导致内部索引访问时出现"下标越界"。
修正后的代码
首先安装并加载irr包:
# 安装包(仅首次运行) install.packages("irr") # 加载包 library(irr)
情况1:符合Fleiss' Kappa要求的数据格式
Fleiss' Kappa要求数据结构为每行对应一个被评对象(比如你的2本书),每列对应一位评分者,单元格为评分值。示例代码如下:
# clarity维度:行=书,列=评分者 clarity_ratings <- data.frame( rater1 = c(3, 2), rater2 = c(4, 3), rater3 = c(4, 5) ) # simplicity维度 simplicity_ratings <- data.frame( rater1 = c(5, 4), rater2 = c(5, 5), rater3 = c(4, 3) ) # accuracy维度 accuracy_ratings <- data.frame( rater1 = c(2, 3), rater2 = c(4, 4), rater3 = c(5, 2) ) # 计算每个维度的Fleiss' Kappa clarity_kappa <- fleiss.kappa(clarity_ratings) simplicity_kappa <- fleiss.kappa(simplicity_ratings) accuracy_kappa <- fleiss.kappa(accuracy_ratings) # 输出结果 cat("Clarity Fleiss' Kappa:", clarity_kappa$value, "\n") cat("Simplicity Fleiss' Kappa:", simplicity_kappa$value, "\n") cat("Accuracy Fleiss' Kappa:", accuracy_kappa$value, "\n")
情况2:从你的原始数据格式转换
如果你的原始数据是"每行对应一位评分者,每列对应一个维度",需要先转置每个维度的数据:
data <- data.frame( rater = c("rater-1", "rater-2", "rater-3"), clarity = c(3, 4,4), simplicity = c(5, 5,4), accuracy = c(2, 4,5) ) # 转置每个维度为Fleiss Kappa要求的格式(行=被评对象,列=评分者) clarity_ratings_t <- t(data[, "clarity", drop=FALSE]) simplicity_ratings_t <- t(data[, "simplicity", drop=FALSE]) accuracy_ratings_t <- t(data[, "accuracy", drop=FALSE]) # 计算Kappa clarity_kappa <- fleiss.kappa(clarity_ratings_t) simplicity_kappa <- fleiss.kappa(simplicity_ratings_t) accuracy_kappa <- fleiss.kappa(accuracy_ratings_t) # 输出结果 print(clarity_kappa) print(simplicity_kappa) print(accuracy_kappa)
补充说明
如果你的研究中实际是两位评分者,可以使用kappa2(),但需要传入两列的矩阵(每列对应一位评分者),示例:
two_rater_data <- data.frame( rater1 = c(3,5,2), rater2 = c(4,5,4) ) kappa_result <- kappa2(two_rater_data) print(kappa_result)
内容的提问来源于stack exchange,提问作者miku
相关产品推荐
相关产品推荐

