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

如何在R中计算不完全设计下多评分者的Weighted Kappa?

在R中计算不完全设计下的多评分者加权Kappa

当然可以实现,虽然没有直接处理这种不完全设计的现成函数,但只要先把数据整理成配对评分的格式,就能用现有工具计算加权Kappa。

步骤1:数据预处理

你的数据是宽格式,每个受试者对应2个非NA的评分,我们需要把这些评分提取成两两配对的格式:

# 加载所需包
library(dplyr)
library(tidyr)
library(irr)

# 导入你的数据(直接使用你提供的结构)
df <- structure(list(subject_id = 1001:1010, `1` = c(4L, 5L, 2L, 3L, 
NA, NA, NA, NA, NA, NA), `2` = c(5L, NA, NA, NA, 1L, 8L, 10L, 
NA, NA, NA), `3` = c(NA, 4L, NA, NA, 10L, NA, NA, 4L, 6L, NA), 
    `4` = c(NA, NA, 8L, NA, NA, 6L, NA, 4L, NA, 5L), `5` = c(NA, 
    NA, NA, 10L, NA, NA, 8L, NA, 2L, 4L)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -10L))

# 转换为配对评分格式
paired_ratings <- df %>%
  # 转长格式,每个评分者的评分单独一行
  pivot_longer(cols = -subject_id, names_to = "rater", values_to = "score") %>%
  # 去掉缺失值
  filter(!is.na(score)) %>%
  # 按受试者分组,给每个评分标记顺序
  group_by(subject_id) %>%
  mutate(pair_idx = row_number()) %>%
  # 转回宽格式,每个受试者的两个评分放在同一行
  pivot_wider(names_from = pair_idx, values_from = score, names_prefix = "score_") %>%
  ungroup() %>%
  # 只保留两个评分列
  select(score_1, score_2)

步骤2:计算加权Kappa

用irr包的kappa2()函数处理配对数据,支持线性或二次权重(根据需求选择):

# 计算线性加权Kappa
linear_kappa <- kappa2(paired_ratings, weight = "linear")
print(linear_kappa)

# 如果需要二次加权Kappa,替换参数即可
quadratic_kappa <- kappa2(paired_ratings, weight = "quadratic")
print(quadratic_kappa)

逻辑说明

这种方法的合理性在于:你的设计中每个受试者仅由2名评分者评估,我们把所有这些评分对汇总后,本质上就是一组配对的评分数据——而加权Kappa原本就是用来衡量配对评分者的一致性。汇总所有配对后计算的Kappa,能反映所有评分者之间的整体一致性水平。

如果实际数据中存在非2个评分的受试者,记得先过滤掉这些样本(比如在分组后用filter(n() == 2)处理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 11:34:57