首页 > 解决方案 > 使用 group_by() 计算“分组”的 ICC 值

问题描述

我正在尝试为下表中的每个主题计算 ICC 值,但group_by()没有像我认为的那样工作。

  SubID Rate1 Rate2
1     1     2     5
2     1     2     4
3     1     2     5
4     2     3     4
5     2     4     1
6     2     5     1
7     2     2     2
8     3     2     5
9     3     3     5

我正在运行的代码如下:

df %>%
  group_by(SubID) %>%
  summarise(icc = DescTools::ICC(.)$results[3, 2])

和输出:

# A tibble: 3 x 2
  SubID    icc
  <dbl>  <dbl>
1     1 -0.247
2     2 -0.247
3     3 -0.247

似乎汇总不是根据组应用,而是应用于整个数据集。我不确定发生了什么。

输入()

structure(list(SubID = c(1, 1, 1, 2, 2, 2, 2, 3, 3), Rate1 = c(2, 
2, 2, 3, 4, 5, 2, 2, 3), Rate2 = c(5, 4, 5, 4, 1, 1, 2, 5, 5)), class = "data.frame", row.names = c(NA, 
-9L))

标签: rdplyr

解决方案


不是很熟悉,library(DescTools)但这是一个利用nest()/map()组合的潜在解决方案:

library(DescTools)
library(tidyverse)

df <- structure(
  list(SubID = c(1, 1, 1, 2, 2, 2, 2, 3, 3), 
       Rate1 = c(2, 2, 2, 3, 4, 5, 2, 2, 3), 
       Rate2 = c(5, 4, 5, 4, 1, 1, 2, 5, 5)), 
  class = "data.frame", row.names = c(NA, -9L)
)

df %>%
  nest(ICC3 = -SubID) %>%
  mutate(ICC3 = map_dbl(ICC3, ~ ICC(.x)[["results"]] %>%
    filter(type == "ICC3") %>%
    pull(est)))
#> # A tibble: 3 x 2
#>   SubID      ICC3
#>   <dbl>     <dbl>
#> 1     1  2.83e-15
#> 2     2 -5.45e- 1
#> 3     3 -6.66e-16

reprex 包(v0.3.0)于 2021-03-08 创建


推荐阅读