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

如何基于重复测量问卷数据按项计算ICC并生成结果数据框

按问卷题目计算重复测量的组内相关系数(ICC)

数据背景

现有一份R语言数据框,包含65名参与者的两次问卷重复测量数据:

  • 20行对应20个问卷题目(行名:item1至item20)
  • 130列对应每名参与者的两次测量(列名:ID1_1、ID1_2…ID65_2)
  • 单元格值为0或1

数据构造代码:

df <- data.frame(matrix(NA, nrow = 20, ncol = 130))
# 添加列名
colnames(df) <- c(paste0("ID", rep(1:65, each = 2), "_", rep(1:2)))
# 填充随机0/1值
df[] <- sample(0:1, size = nrow(df) * ncol(df), replace = TRUE)
# 设置行名
row.names(df) <- paste0("item", 1:20)

原代码问题

原代码存在两处核心错误:

  1. 混淆行/列含义:用grep("^item", names(df), value = TRUE)查找列名中的item,但实际item是行名,列名以ID开头,导致无法获取有效数据分组。
  2. ICC函数输入格式错误:ICC()(来自psych包)需要结构化的重复测量数据,原代码直接传入单行数据,不符合函数要求。

正确实现代码

步骤说明

  1. 加载psych包(需提前安装:install.packages("psych"))
  2. 遍历每个题目(行),提取该题目下所有参与者的两次测量数据,整理为每行对应一个参与者的宽格式(2列:第一次、第二次测量)
  3. 对每个题目的结构化数据计算ICC,提取关键结果
  4. 合并所有题目的结果为一个数据框

完整代码

# 加载所需包
library(psych)

# 定义计算单个题目ICC的函数
calc_item_icc <- function(item_row, df) {
  # 提取当前题目的所有测量数据,转置后按参与者分组(每2列对应一个参与者的两次测量)
  item_data <- t(df[item_row, ])
  item_data_split <- split(item_data, factor(gsub("_\\d$", "", rownames(item_data))))
  # 整理为宽格式:每行一个参与者,两列是两次测量
  item_df <- do.call(rbind, item_data_split)
  colnames(item_df) <- c("time1", "time2")
  
  # 计算ICC(采用双因素随机效应模型,一致性类型)
  icc_result <- ICC(item_df, model = "twoway", type = "agreement")
  
  # 提取所需结果,返回数据框
  data.frame(
    item = row.names(df)[item_row],
    model = icc_result$Model,
    type = icc_result$Type,
    icc = icc_result$ICC,
    lower_bound = icc_result$`lower bound`,
    upper_bound = icc_result$`upper bound`,
    f_value = icc_result$F.value,
    p_value = icc_result$p.value,
    stringsAsFactors = FALSE
  )
}

# 遍历所有题目,计算ICC
icc_results_list <- lapply(1:nrow(df), calc_item_icc, df = df)

# 合并为最终结果数据框
final_icc_df <- do.call(rbind, icc_results_list)

# 查看结果
print(final_icc_df)

结果说明

最终的final_icc_df包含每个题目的ICC值、置信区间、F值、p值等关键统计量,每行对应一个问卷题目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:58:24