R loop/automation 重复使用特定对组合比较两个特定方法(类别中的组)的计算统计

R loop/automation calculating statistic comparing two specific means (groups within categories) repeatedly with specific pair combinations

我有一个包含三个变量的数据框:Var1(具有 A、B 和 C 的值)、Var2(具有 X 和 Y 的值)和 Metric(各种数值)。对于 Var1 中的每个组,每个 Var2 都存在多个(其他变量是唯一的,但我在这里折叠它们并且不相关)。

对于每个 Var1 组,我想使用统计检验来比较 Var2 组之间的 Metric 均值(X 均值与 Y 均值)以确定它们之间是否有显着差异(确切的检验并不重要)但理想情况下,解决方案是不可知的)。单独执行此操作很容易,我已经使用过滤和 TukeyHSD 完成了此操作,并选择了我感兴趣的对。在下面的示例中,我在 Var1 中过滤了 'A' 并获得了 X 与 Y 的 p 值:

#Generating dataframe
set.seed(3)
df = data.frame(Var1 = sample(c("A","B","C"), 15, replace=TRUE), 
      Var2 = sample(c("X","Y"),15, replace=TRUE),
      Metric = 1:15)
df

#Calculating significance between X and Y for A in Var1
stat = aov(Metric ~ Var2, data = subset(df, Var1 %in% c("A")))
summary(stat)
TukeyHSD(stat)

理想情况下,我想要一种自动化的方法,以便最终结果采用易于访问的格式或 R 中的输出列表,这样我就有了 X 与 A、B 和 C 的 Y 的 p 值使用某种形式的循环进行分组,我只需要输入所需的感兴趣的 Var1 组(因为我的实际数据集有超过 3 个组)。

如果我没理解错的话

#Generating dataframe
set.seed(3)
df = data.frame(Var1 = sample(c("A","B","C"), 100, replace=TRUE), 
                Var2 = sample(c("X","Y"),100, replace=TRUE),
                Metric = 1:100)
library(tidyverse)
df %>% 
  group_nest(Var1) %>% 
  mutate(AOV = map(data, ~aov(Metric ~ Var2, data = .x))) %>% 
  transmute(Tukey_HSD = map(AOV, TukeyHSD) %>% map(broom::tidy)) %>% 
  unnest(Tukey_HSD)
#> # A tibble: 3 x 7
#>   term  contrast null.value estimate conf.low conf.high adj.p.value
#>   <chr> <chr>         <dbl>    <dbl>    <dbl>     <dbl>       <dbl>
#> 1 Var2  Y-X               0    0.931    -20.6      22.4       0.930
#> 2 Var2  Y-X               0   -8.06     -27.3      11.2       0.400
#> 3 Var2  Y-X               0    8.90     -14.1      31.9       0.435

reprex package (v2.0.1)

于 2021-11-04 创建

带变量过滤

filter_vars <- c("B", "C")

  df %>% 
  filter(Var1 %in% filter_vars) %>% 
  group_nest(Var1) %>% 
  mutate(AOV = map(data, ~aov(Metric ~ Var2, data = .x))) %>% 
  transmute(Tukey_HSD = map(AOV, TukeyHSD) %>% map(broom::tidy)) %>% 
  unnest(Tukey_HSD)