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)
我有一个包含三个变量的数据框: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)