#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 было бы хорошо, если бы вы могли обновить свой код, если это вообще возможно