无法在我的条形图上放置重要值的正确顺序(emmeans_test 重新排列因子)

Can't place correct order of significant values over my bar graph (emmeans_test rearranges factors)

我正在使用 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小白,如果上面的code/post有误,请见谅)

我对 rstatixggpubr 包不是很熟悉。然而,正如您自己已经发现的那样,在执行 emmeans_test 之后,您的 Sex 变量的顺序丢失了,即它被转换为一个字符,因此您得到了字母顺序。此问题的解决方案是将 pwc 数据中的 Sex 转换回一个因子,并使用 factor(Sex, levels = levels(ER$Sex)):

将水平设置为 ER 数据集中的水平
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))