R中计算两名评分者逐行百分比一致性并新增列的实现方法
解决方案
1. 核心逻辑说明
*你提到单受试者无法计算ICC,因此对连续型评分计算逐行相对百分比一致性是合理方案,核心逻辑如下:
- 连续值逐行一致性采用相对偏差倒数转换法:
一致性百分比 = (1 - |rater1评分 - rater2评分| / 两者评分均值) * 100% - 为避免差值过大出现负百分比,可限制最低为0%
- 注意:irr包的
agree()函数默认适配分类变量,仅判断评分是否完全相等,不适合你的连续时长数据场景
2. 代码实现
首先加载需要的依赖包:
library(dplyr) library(irr) # 计算整体ICC用
2.1 逐行计算一致性百分比
直接用向量化运算即可,无需逐行遍历,执行效率更高:
# 构造你的示例数据集 df <- tibble( behavior = c("run", "stand", "sit", "sleep"), rater1 = c(48, 23, 389, 288), rater2 = c(59, 91, 401, 290) ) # 新增逐行一致性列 df <- df %>% mutate( # 计算相对一致性百分比,保留1位小数,最低为0% agreement = pmax(0, 1 - abs(rater1 - rater2)/((rater1 + rater2)/2)) * 100, agreement = round(agreement, 1) )
运行后得到的结果如下:
| behavior | rater1 | rater2 | agreement |
|---|---|---|---|
| run | 48 | 59 | 79.4 |
| stand | 23 | 91 | 0.0 |
| sit | 389 | 401 | 97.0 |
| sleep | 288 | 290 | 99.3 |
2.2 计算整体ICC
你可以同时输出整体ICC结果,和逐行结果对照定位影响整体一致性的异常条目:
# 提取两位评分者的评分列计算ICC icc_result <- icc(df[, c("rater1", "rater2")], model = "twoway", type = "agreement", unit = "single") print(icc_result)
3. 可选:逐行调用agree()的实现(仅适合分类变量)
如果你后续处理分类数据需要逐行调用agree(),可以用rowwise()实现需求:
library(irr) df %>% rowwise() %>% mutate( # 把当前行的两个评分转成矩阵输入agree函数 agreement = agree(rbind(c(rater1, rater2)))$value ) %>% ungroup()
内容的提问来源于stack exchange,提问作者mryannugent
相关产品推荐
相关产品推荐

