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

R语言如何按分组计算r*wg(j)、ICC(1)、ICC(2)组内相关指标

R语言计算组内一致性r*wg(j)、ICC(1)、ICC(2)实现

不需要逐组手动拆分、转置数据,直接通过现有包结合分组计算函数即可快速完成所有指标计算,完整步骤如下:

前置准备

先安装并加载需要的依赖包,导入示例数据集:

# 未安装依赖时先运行下行命令
# install.packages(c("dplyr", "tidyr", "psych", "multilevel", "lme4"))
library(dplyr)
library(tidyr)
library(psych)
library(multilevel)
library(lme4)

# 导入示例数据
group <- c(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4)
var1 <- c(4, 5, 4, 2, 3, 4, 5, 3, 5, 8, 4, 3, 4, 4, 5)
var2 <- c(2, 3, 4, 2, 4, 4, 5, 6, 6, 9, 3, 3, 2, 5, 4)
var3 <- c(4, 5, 6, 2, 3, 6, 7, 6, 7, 8, 5, 6, 3, 3, 6)
df <- data.frame(group, var1, var2, var3)

计算各分组r*wg(j)

直接使用multilevel包的rwg.j()函数,结合dplyr的分组计算功能批量输出每组结果,不需要手动转置数据:

rwg_res <- df %>%
  group_by(group) %>%
  group_modify(~{
    # j为题项总数,ranvar为零分布方差,5点量表均匀分布对应值为2,需根据自身量表调整
    calc_res <- rwg.j(.x, j = 3, ranvar = 2)
    data.frame(rwg_j = calc_res$rwg)
  })

运行后rwg_res中即为每个分组对应的r*wg(j)值。

计算ICC(1)与ICC(2)

研究中通常有两种计算需求,可根据自身需要选择:

全局ICC值(最常用)

即所有样本共用的组间方差解释率、组均值信度指标,通过多水平零模型提取方差分量计算即可,不需要调整数据格式:

# 转为题项长格式
df_long <- df %>%
  pivot_longer(cols = starts_with("var"), names_to = "item", values_to = "score")

# 拟合无预测变量的零模型
null_mod <- lmer(score ~ 1 + (1|group) + (1|group:item), data = df_long)
var_comp <- as.data.frame(VarCorr(null_mod))

# 提取各层方差
var_group <- var_comp$vcov[var_comp$grp == "group"]
var_item <- var_comp$vcov[var_comp$grp == "group:item"]
var_resid <- var_comp$vcov[var_comp$grp == "Residual"]

# 计算指标
k <- mean(table(df$group)) # 每组平均人数
j <- 3 # 题项数
ICC1 <- var_group / (var_group + var_item + var_resid)
ICC2 <- var_group / (var_group + (var_item + var_resid)/(k*j))

运行后ICC1、ICC2即为全局的两类ICC指标。

逐组ICC值

如果需要单独计算每个组内的ICC,可通过分组函数批量完成格式转换与计算,不需要手动逐组处理:

group_icc_res <- df %>%
  group_by(group) %>%
  group_modify(~{
    # 自动将当前组数据转为ICC函数要求的“行是题项、列是评分者”格式
    .x <- .x %>%
      mutate(rater_id = paste0("rater_", row_number())) %>%
      pivot_longer(cols = starts_with("var"), names_to = "item") %>%
      pivot_wider(names_from = rater_id, values_from = value) %>%
      select(-item)
    # 计算ICC,提取双向随机模型下的对应结果
    icc_calc <- ICC(as.matrix(.x))
    data.frame(
      ICC1 = icc_calc$results[3, "ICC"],
      ICC2 = icc_calc$results[3, "ICC3k"]
    )
  })

运行后group_icc_res中即为每个分组单独的ICC(1)、ICC(2)值。

注意:r*wg(j)计算时的ranvar参数必须和你使用的量表匹配:5点量表均匀分布方差为2,7点量表为4,若你使用的评分分布不是均匀分布,需要替换为对应零分布的方差值,否则结果会存在偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:51:18