Как добавить размеры эффекта в гистограммы ggplot t-тестов? (например, d Коэна или g Хеджеса)

#r #ggplot2 #statistics #data-visualization #t-test

#r #ggplot2 #Статистика #визуализация данных #t-тест

Вопрос:

У меня есть набор данных, подобный следующему.

 Group <- c("A", "B", "A", "A", "A", "B", "A", "A", "B", "B","A", "A", "B", "B")
Score <- c(26, 22, 15, 5, 19, 3, 4, 5, 23, 3, 5, 2, 20, 4)
Order <- c("First", "First", "First", "Second", "First", "Second", "Second", "Second", "First", "Second", "Second", "Second", "First", "Second")
Data <- data.frame(Group, Score, Order)

Data

   Group Score  Order
1      A    26  First
2      B    22  First
3      A    15  First
4      A     5 Second
5      A    19  First
6      B     3 Second
7      A     4 Second
8      A     5 Second
9      B    23  First
10     B     3 Second
11     A     5 Second
12     A     2 Second
13     B    20  First
14     B     4 Second
 

Мне нужно отобразить различия в оценках между каждой группой с размерами эффектов для каждого сравнения (подойдет либо d Коэна, либо g Хеджеса).

Приведенный ниже код дает мне все, что я хочу на графике, кроме размера эффекта.

 OrderComparison <- list(c("First", "Second"))

ggplot(Data, aes(Order, Score, fill=Order))  
  stat_summary(geom = "bar", fun = mean, position = "dodge", color="black") 
  stat_summary(geom = "errorbar", fun.data = mean_se, position = "dodge", width=.2) 
  stat_compare_means(method = "t.test", comparisons = OrderComparison, label = "p.signif", position = "identity") 
  facet_wrap(~Group, scales="fixed", strip.position = "bottom") 
  theme_classic() 
  theme(legend.position = "none") 
  scale_fill_grey(start = .6, end = 1)
 

изображение гистограммы

Вопрос

Какой код (и / или пакет) мне нужен, чтобы автоматически указывать размер эффекта при каждом сравнении?

Приветствуются любые советы или рекомендации.

Ответ №1:

 library(effsize)
library(dplyr)

cohen=numeric()
for (i in LETTERS[1:2]) {
  Group=filter(Data, Group==i)
  treatment = filter(Group, Order=="First")%>%select(Score)%>%unlist()
  control = filter(Group, Order=="Second")%>%select(Score)%>%unlist()
  d = (c(treatment,control))
  f = c(rep("Treatment", length(treatment)), rep("Control", length(control)))
  c=cohen.d(treatment,control)
  cohen[i]=c$estimate
}

effsize=data.frame(sz=c(rep(paste("Cohen's d:", cohen[1]),8), rep(paste("Cohen's d:", cohen[2]),6)), Group=c(rep("A", 8), rep("B", 6)))

ggplot(Data, aes(Order, Score, fill=Order))  
  stat_summary(geom = "bar", fun = mean, position = "dodge", color="black") 
  stat_summary(geom = "errorbar", fun.data = mean_se, position = "dodge", width=.2) 
  stat_compare_means(method = "t.test", comparisons = OrderComparison, label = "p.signif", position = "identity") 
  facet_wrap(~Group, scales="fixed", strip.position = "bottom") 
  theme_classic() 
  theme(legend.position = "none") 
  scale_fill_grey(start = .6, end = 1) 
  geom_text(aes(x=1.5,y=25, label=sz), data=effsize)
 

Он вручную вычисляет d Коэна для двух групп и помещает его в график.

введите описание изображения здесь

Комментарии:

1. Спасибо! Это работает с образцами данных, которые я предоставил. Увы, я не могу заставить его работать с фактическими данными, в которых намного больше строк (в зависимости от исследования) и разные имена переменных (например, группы не помечены «A» и «B»). Нужно будет выяснить, как сделать это обобщаемым для наборов данных разных размеров и имен.

2. @NickByrd Вы должны иметь возможность изменять код, чтобы заставить его работать. Удачи!

3. @ Stacker было бы хорошо, если бы вы могли обновить свой код, если это вообще возможно