#r #ggplot2 #bar-chart #significance #lsmeans
#r #ggplot2 #гистограмма #значимость #lsmeans
Вопрос:
У меня есть набор данных с несколькими переменными, который выглядит следующим образом:
Competitor Disturbance Group MT CVt
1 M P A 17.416667 63.39274
2 M P A 11.055556 91.32450
3 M C N 13.928571 78.11438
4 B C N 13.500000 61.20542
5 B T E 12.700000 48.11819
6 B T E 27.250000 63.44356
Я составил GLMM (mMT1) с 3 предикторами (конкурент, нарушение и группа), один ответ (MT) и один случайный фактор (вид, не показан в примере набора данных).
После подгонки и проверки модели я вычислил средние значения ls с помощью пакета emmeans:
ls_MT <- emmeans(mMT1, pairwise~Disturbance*Competitor*Group, type="response")
И выполнил post-hoc тест:
post_MT <- emmeans(mMT1, transform="response", component="cond",list(~Disturbance|Competitor|Group,~Competitor|Group|Disturbance,~Group|Disturbance|Competitor))
pairs(post_MT)
Наконец, я создал гистограмму с помощью ggplot2, основанную на средних значениях ls и se
ggplot(ls_MT, aes(x=Disturbance, fill=Competitor, y=response))
geom_bar(stat="identity",position=position_dodge())
facet_grid(cols=vars(Group)) labs(y = "log10(MT)")
scale_color_manual(values=c("#2ca02c","#d62728"))
geom_errorbar(aes(ymin=ls_MT$lower, ymax=ls_MT$upper), width=.2,
position=position_dodge(.9))
theme_light()
На данный момент я борюсь с 2 вещами:
-
Есть ли способ, чтобы гистограммы располагались рядом друг с другом без огранки по группам? Выглядит нормально, но я бы предпочел, чтобы они были одним графиком, а не 3 рядом
-
Как я могу аннотировать на графике сравнения из пост-специального теста? Я видел, что несколько функций позволяют выполнять отдельные тесты (например
stat_compare_means
) и отображать эти результаты, но я не могу найти решение для пост-специального теста Tukey. Другим решением может быть добавлениеgeom_signif(map_signif_level = c(" * * * "=0.001, " * * "=0.01, "*"=0.05), comparisons = list(c("P","C"),c("P","T"),c("C","T"))
но это объединяет значения B и M (конкурента) для каждого нарушения (P, T, C). В этом случае я бы действительно хотел сравнить B и M в пределах каждого из P, T и C. Или, что еще лучше, как я могу указать, между какими столбцами я хотел бы показать результаты post-hoc? Например, я хотел бы сравнить A-T-B с E-T-B и т. Д.
Комментарии:
1. На ваш первый вопрос, почему бы вам просто не удалить вызов фасетирования из вашего ggplot? Также ваш ylab говорит, что это журнал, но, похоже, он не преобразован в журнал.
2. Спасибо за ответ. Если я удалю вызов фасетирования, то мои группы будут объединены вместе, и в итоге я получу 6 баров (каждый с 3 барами ошибок) вместо 18, как на графике, который я показал. Метка оси y неверна, спасибо, что указали на это