Попарное сравнение


Пост-хок парные сравнения - очень распространенная часть повседневной работы исследователя данных. Всякий раз, когда мы проводим ANOVA или непараметрическое тестирование с более чем двумя группами, это неизбежно.

В какой-то момент вы захотите получить красивую визуализацию того, что является значимым, а что нет. Возможно, с p-значениями, написанными на графике. Тогда вы можете придумать какую-нибудь собственную функцию, которая будет выполнять эту работу. Или вы можете найти ggpubr пакет как простое решение. И здесь возникает ловушка. Обычный код, приведенный в качестве примера, не дает p-значений с поправкой на множественное сравнение! Допустим, у вас есть некоторый ответ y и 4 группы A, B, C, D, и вы хотите сравнить y в других группах с y в контрольной группе A. Тогда в итоге вы получите код следующего вида:


библиотека(tidyverse)
библиотека(rstatix)
библиотека(ggpubr)
библиотека(ggplot2)

my_comparisons <- list( c("A", "B"), c("A", "C"), c("A", "D"))

ggboxplot(data, x = "grouping.variable", y = "your.response",
          palette = "jco",fill="grouping.variable",order=c("A", "B", "C", "D"),
          legend="right")+
  stat_compare_means(comparisons = my_comparisons, label.y = c(0.4, 0.5, 0.6),method="wilcox.test",p.adjust.method = "bonferroni")+
  labs(y="Y-ответ",x="Некоторая группирующая переменная здесь",fill="Группы")

И график, который НЕ имеет скорректированных p-значений!

Правильный код следующий:

stat.test %
  wilcox_test(your.response ~ grouping.variable,ref.group = "A") %>%
  adjust_pvalue() %>%
  add_significance("p.adj")
stat.test

stat.test % add_y_position()

ggboxplot(data, x = "grouping.variable", y = "your.response",
          palette = "jco",fill="grouping.variable",order=c("A", "B", "C", "D"),
          legend="right")+stat_pvalue_manual(stat.test, label = "p.adj", tip.length = 0.01)+
  labs(y="Ответ Y",x="Здесь какая-то группирующая переменная",fill="Группы")

Конечно, выше приведен пример с непараметрическим тестом Вилкоксона, но пакет предлагает также t-тест. Если вы хотите сравнить "все со всем", а не только с группой A, то просто удалите ref.group = "A" из кода:

stat.test %
  wilcox_test(your.response ~ grouping.variable) %>%
  adjust_pvalue() %>%
  add_significance("p.adj")
stat.test

stat.test % add_y_position()

ggboxplot(data, x = "grouping.variable", y = "your.response",
          palette = "jco",fill="grouping.variable",order=c("A", "B", "C", "D"),
          legend="right")+stat_pvalue_manual(stat.test, label = "p.adj", tip.length = 0.01)+
  labs(y="Ответ Y",x="Здесь какая-то группирующая переменная",fill="Группы")

И вы получите:

Обратите внимание, что приведенный выше метод корректировки больше не является методом Бонферрони. Это Holm, метод по умолчанию, реализованный в R. Веселитесь!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


ru_RURussian