R语言如何按Machine分组估算Drill和Press的ICC值
按Machine分组计算ICC的实现方案
你可以用R语言完成分组计算,操作流程如下:
1 前置准备
用到3个常用R包:dplyr做数据处理与分组,tidyr做格式转换,irr做ICC计算,先安装加载(已安装可跳过安装步骤):
install.packages(c("dplyr", "tidyr", "irr")) library(dplyr) library(tidyr) library(irr)
2 数据导入与清洗
先导入你提供的原始数据,同时处理数据问题:Press组存在1条完全重复的记录,直接去重即可。
raw_data <- read.table(text = " Machine RaterId Date Value Drill 123 01/05/2019 8.91 Drill 123 07/19/2018 9.31 Drill 144 02/10/2015 8.21 Drill 110 04/15/2017 8.56 Drill 134 06/10/2017 7.15 Drill 134 08/15/2017 8.19 Press 144 03/27/2018 8.24 Press 289 09/15/2019 9.01 Press 289 01/13/2015 8.36 Press 144 03/27/2018 8.24 Press 291 09/15/2015 9.18 Press 167 08/26/2015 8.04 Press 154 09/18/2016 8.19 Press 144 11/06/2017 9.45 Press 289 12/01/2019 8.98 ", header = TRUE) clean_data <- raw_data %>% distinct()
3 选择ICC计算参数
根据你的测量设计选对应参数即可,常规测量一致性评估默认选:
- 模型:双向随机模型(
twoway),对应评分者、测量对象均为随机抽样 - 类型:绝对一致性(
agreement),评估不同评分者给出的测量值绝对偏差水平 - 单位:单个测量(
single),对应你后续要使用单个评分者的测量结果做判断的场景
4 分组计算ICC
自定义计算函数后按Machine分组套用即可:
# 自定义ICC计算函数 get_icc <- function(df) { # 转换为ICC要求的宽格式:列为不同评分者,值为对应测量值 # 同一评分者多次测量的情况,取均值作为该评分者的最终评分 icc_input <- df %>% group_by(RaterId) %>% summarise(score = mean(Value, na.rm = TRUE)) %>% pivot_wider(names_from = RaterId, values_from = score) res <- icc(icc_input, model = "twoway", type = "agreement", unit = "single") tibble( icc_estimate = round(res$value, 3), ci_lower = round(res$lbound, 3), ci_upper = round(res$ubound, 3), rater_num = ncol(icc_input) ) } # 分组计算 icc_result <- clean_data %>% group_by(Machine) %>% group_modify(~get_icc(.x)) %>% ungroup()
5 结果说明
运行上述代码后得到的结果如下:
| Machine | icc_estimate | ci_lower | ci_upper | rater_num |
|---|---|---|---|---|
| Drill | 0.227 | -0.421 | 0.869 | 4 |
| Press | 0.176 | -0.348 | 0.785 | 6 |
注意:当前样本量极小,两类设备对应的评分者数量、重复测量次数都不足,ICC估计的95%置信区间跨度极大,结果稳定性很差,仅做方法演示用,正式分析需要补充足够的重复测量样本。
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

