Сначала некоторые данные:
df <-
data_frame(
Group = rep(LETTERS[1:8], each = 10)
, Value = rnorm(80)
)
Из этого я извлекаю уникальные групповые уровни:
my_groups <-
sort(unique(df$Group))
Затем мне нравится использовать lapply
для циклического прохождения метрик.представляет интерес.По сути, для каждой пары групп я выполняю t-тест и записываю интересующие метрики (среднее по группам, разность, значение p) как data_frame
, затем связываю строки вместе.Обратите внимание, что я использую оператор %$%
из magrittr
в качестве ярлыка для получения метрики из результата t.test
.
t_tests_out <-
lapply(my_groups, function(group_a){
lapply(my_groups, function(group_b){
# Skip case where a and b are the same
if(group_a == group_b){
return(NULL)
}
df %>%
filter(Group %in% c(group_a, group_b)) %>%
mutate(temp_group = ifelse(Group == group_a, "A", "B")) %>%
t.test(Value ~ temp_group, data = .) %$%
data_frame(
group_a = group_a
, group_b = group_b
, mean_a = estimate[1]
, mean_b = estimate[2]
, diff = mean_a - mean_b
, pval = p.value
)
}) %>%
bind_rows()
}) %>%
bind_rows()
Это выглядит так:
# A tibble: 56 x 6
group_a group_b mean_a mean_b diff pval
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 A B -0.275 0.0851 -0.360 0.384
2 A C -0.275 -0.651 0.376 0.406
3 A D -0.275 -0.440 0.165 0.737
4 A E -0.275 0.336 -0.611 0.245
5 A F -0.275 -0.277 0.00233 0.996
6 A G -0.275 -0.115 -0.160 0.754
7 A H -0.275 -0.406 0.131 0.821
8 B A 0.0851 -0.275 0.360 0.384
9 B C 0.0851 -0.651 0.736 0.0748
10 B D 0.0851 -0.440 0.525 0.245
# ... with 46 more rows
Хотя длинный формат может быть действительно полезен для чего-то, например, для построения результатов:
t_tests_out %>%
ggplot(aes(x = group_a
, y = group_b
, fill = pval)) +
geom_tile(col = "white") +
scale_fill_distiller(palette = "YlOrRd"
, limits = c(0,1)) +
theme_minimal()
![enter image description here](https://i.stack.imgur.com/Mmdb9.png)
Вы также можете распространятьрезультаты для создания таблицы, которую вы искали:
t_tests_out %>%
select(group_a, group_b, pval) %>%
spread(group_b, pval)
возвращает
# A tibble: 8 x 9
group_a A B C D E F G H
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A NA 0.384 0.406 0.737 0.245 0.996 0.754 0.821
2 B 0.384 NA 0.0748 0.245 0.595 0.439 0.668 0.371
3 C 0.406 0.0748 NA 0.659 0.0632 0.456 0.291 0.668
4 D 0.737 0.245 0.659 NA 0.163 0.762 0.547 0.955
5 E 0.245 0.595 0.0632 0.163 NA 0.280 0.425 0.243
6 F 0.996 0.439 0.456 0.762 0.280 NA 0.770 0.835
7 G 0.754 0.668 0.291 0.547 0.425 0.770 NA 0.640
8 H 0.821 0.371 0.668 0.955 0.243 0.835 0.640 NA