Не удается расположить значимые значения в правильном порядке на моей гистограмме (emmeans_test переставляет коэффициенты)

Я делаю односторонний ANOVA, используя rstatix, и хочу поместить значимые попарные тестовые значения (используя emmeans_test) на свой график.

Однако вывод из emmeans_test переупорядочивает мои факторы. Таким образом, значения значимости неправильно размещены на правых столбцах.

Вот пример данных:

library(rstatix)
library(ggpubr)
library(dplyr)

#dataframe
ER <- read.table(header=TRUE, text="
  Sex  Group ER
  M    V     1046
  M    V     1290
  M    Z     1202
  M    Z     1056
  F    V     8000
  F    V     7859
  F    Z     4000
  F    Z     3409
")

ER <- ER %>%
  set_ref_level("Sex", ref = "M") #set males as my reference


ER$Sex показывает мои факторы в правильном порядке, сначала мужчины

Однако после того, как я выполню emmeans_test, вывод изменится. Может в алфавитном порядке?

res.aov <- ER %>% anova_test(ER ~ Sex * Group)
res.aov

pwc <- ER %>% 
  group_by(Sex) %>%
  emmeans_test(ER ~ Group, p.adjust.method = "bonferroni") #output now has females first. 

pwc

Я попытался указать порядок, как я хочу, чтобы он был в сюжете, сначала самцы, затем самки, последние самки + T. Это ничего не меняет.

pwc1 <- pwc[c(2,1),]
pwc1

#plot data 
e <- ggboxplot(ER, x = "Sex", y = "ER", color = "Group",
               palette = "jco")
print(e)

pwc1 <- pwc1 %>% add_xy_position(x = "Sex")

e + stat_pvalue_manual(pwc1) + labs(subtitle = get_test_label(res.aov, detailed = TRUE),
    caption = get_pwc_label(pwc1))

Мой график находится в правильном порядке (мужчины, женщины), но значения значимости поменялись местами. Пожалуйста, дайте мне знать, что мне не хватает! Я искал исправление в Интернете в течение нескольких дней и пробовал разные вещи безрезультатно.

(Заранее спасибо, также я новичок в R, поэтому прошу прощения, если допустил ошибку в коде/сообщении выше)


person Laura Cortes    schedule 05.10.2020    source источник
comment
Добро пожаловать в СО. Вы добавили фрагмент своих данных, что очень хорошо. Однако, чтобы воспроизвести ваш вопрос и помочь нам помочь вам, вы должны добавить код, который вы использовали для создания res.aov и pwc1. В противном случае трудно найти решение, поскольку мы не можем запустить ваш код. См. как сделать минимальный воспроизводимый пример   -  person stefan    schedule 06.10.2020
comment
Спасибо за отзыв, сейчас внесу изменения!   -  person Laura Cortes    schedule 06.10.2020


Ответы (1)


Я не очень хорошо знаком с пакетами rstatix и ggpubr. Однако, как вы уже сами поняли, после выполнения emmeans_test порядок вашей переменной Sex теряется, т.е. она преобразуется в символ, и, следовательно, вы получаете алфавитный порядок. Решение этой проблемы состоит в том, чтобы преобразовать Sex в ваших данных pwc обратно в фактор и установить уровни, как в вашем наборе данных ER, используя factor(Sex, levels = levels(ER$Sex)):

library(rstatix)
library(ggpubr)
library(dplyr)

#dataframe
ER <- read.table(header=TRUE, text="
  Sex  Group ER
  M    V     1046
  M    V     1290
  M    Z     1202
  M    Z     1056
  F    V     8000
  F    V     7859
  F    Z     4000
  F    Z     3409
")

ER <- ER %>%
  mutate(Sex = factor(Sex)) %>% 
  set_ref_level("Sex", ref = "M") #set males as my reference

res.aov <- ER %>% 
  anova_test(ER ~ Sex * Group)
#> Coefficient covariances computed by hccm()

pwc <- ER %>% 
  group_by(Sex) %>%
  emmeans_test(ER ~ Group, p.adjust.method = "bonferroni") %>% #output now has females first.
  # Set levels of Sex as in your ER dataset
  mutate(Sex = factor(Sex, levels = levels(ER$Sex)))

pwc1 <- pwc[c(2,1),]

#plot data 
e <- ggboxplot(ER, x = "Sex", y = "ER", color = "Group",
               palette = "jco")

pwc1 <- pwc1 %>% add_xy_position(x = "Sex")

e + stat_pvalue_manual(pwc1) + 
  labs(subtitle = get_test_label(res.aov, detailed = TRUE),
       caption = get_pwc_label(pwc1))

person stefan    schedule 06.10.2020
comment
Вы сделали преобразование внутри mutate, т.е. mutate(Sex = factor(Sex, levels = levels(ER$Sex))) как в моем коде? В противном случае он выдаст вам это сообщение об ошибке. - person stefan; 06.10.2020
comment
Только что попробовал это в моем большом наборе данных, и это сработало отлично! Огромное спасибо. - person Laura Cortes; 06.10.2020
comment
Я вижу, вы видели мое первое сообщение. Да, я отредактировал, потому что понял, что сделал не так. Случайно разделил код. - person Laura Cortes; 06.10.2020