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

基于R语言计算多评分者针对多问题的评分者间信度

评分者间信度计算相关问题

背景

我有5名评分者的转录文本评分数据,每名评分者需回答每份转录文本的最多12个问题,每个问题采用不同评分体系(如是/否、1-7分、This/That/Indeterminate)。

示例数据生成代码:

data.table(Rater = c("A","B","C","D","E"),
           Content = c("I","I","I","I","I","II","II","II","II","II"),
           Question1 = c("Yes","No","Yes","No","NA"),
           Question2 = c("1","3","5","7","NA"),
           Question3 = c("This","That","Indeterminate","This","Indeterminate"))

生成的数据如下:

Rater Content Question1 Question2     Question3
 1:     A       I       Yes         1          This
 2:     B       I        No         3          That
 3:     C       I       Yes         5 Indeterminate
 4:     D       I        No         7          This
 5:     E       I        NA        NA Indeterminate
 6:     A      II       Yes         1          This
 7:     B      II        No         3          That
 8:     C      II       Yes         5 Indeterminate
 9:     D      II        No         7          This
10:     E      II        NA        NA Indeterminate

我需要计算评分者间信度(Inter-rater reliability),已知irr包的kappa2函数需要数据为长格式,示例格式如下:

Rater                   A     B  ...     E
Question1_Content_I   Yes    No  ...    NA    
Question2_Content_I     1     3  ...    NA     
Question3_Content_I  This  That  ...  Ind.
Question1_Content_II  Yes    No  ...  Ind. 
...

问题与解答

1. 如何重新格式化数据以计算IRR分数(使用kappa2或其他函数)?melt函数是否可行?

完全可以用melt(来自data.table或reshape2)处理,步骤如下:

  • 先用melt将宽格式转长格式,把Question1、Question2等列合并为Question列,对应评分放入Score列,保留Rater和Content作为标识:
    # 基于data.table的melt操作
    long_data <- melt(original_dt, id.vars = c("Rater", "Content"), 
                      measure.vars = patterns("Question"),
                      variable.name = "Question", value.name = "Score")
    
  • 再用dcast转成kappa2需要的宽格式,让每一行对应一个「问题+文本」组合,列对应不同评分者的分数:
    wide_for_irr <- dcast(long_data, Question + Content ~ Rater, value.var = "Score")
    
    最终得到的格式就和示例一致,满足irr包函数的输入要求。

2. 针对不同类型的问题/评分,应使用哪些函数计算IRR分数?(若有要求,需对应何种数据格式?)

不同评分体系对应不同的IRR计算函数,核心匹配数据类型:

  • 二分变量(是/否):2名评分者用irr包的kappa2(Cohen's Kappa);多名评分者用kripp.alpha(Krippendorff's Alpha)或fleiss.kappa(Fleiss' Kappa)。数据需为宽格式,每一行是一个评分单元,列是各评分者的二分结果。
  • 有序变量(1-7分):优先用irr包的weighted.kappa(加权Kappa,考虑等级间距离),或kripp.alpha(支持有序权重)。数据为宽格式,需确保分数是数值型。
  • 多分类变量(This/That/Indeterminate):2名评分者用kappa2;多名评分者用fleiss.kappa或kripp.alpha。数据为宽格式,每一行是一个评分单元,列是各评分者的分类结果。

3. 是否必须为每个问题/评分单独计算IRR分数,还是可以计算跨所有问题的整体IRR?

建议按问题单独计算,因为每个问题的评分体系、测量维度不同,合并计算会混淆不同维度的信度,结果无实际意义。
如果一定要计算整体信度,只能把所有「问题+文本」的组合当作独立评分单元,但这要求所有问题的评分尺度本质测量同一构念——你的问题用了不同评分体系,这种情况不适用,强行合并会导致结果失真。

4. 如何处理部分评分者未回答全部问题的情况?

不同函数对缺失值的处理方式不同,对应解决方案:

  • kappa2:默认自动删除包含NA的行(即该评分单元只要有一个评分者缺失,就不纳入计算)。也可手动筛选无缺失的行:
    filtered_data <- wide_for_irr[complete.cases(wide_for_irr), ]
    
  • kripp.alpha:支持直接处理缺失值,只需在函数中指定missing = "ignore",它会根据有效评分数量计算信度,无需提前删除行。
  • fleiss.kappa:要求每个评分单元的有效评分数量一致,否则报错。可删除缺失过多的行,不推荐随意填充缺失值,优先保留有效样本。

内容的提问来源于stack exchange,提问作者Nick Byrd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:24:27