Comment Ajouter des P-Values sur des GGPLOTS Horizontaux



Comment Ajouter des P-Values sur des GGPLOTS Horizontaux

Cet article décrit comment ajouter des p-values sur des ggplots horizontaux en utilisant la fonction R stat_pvalue_manual() disponible dans le package R ggpubr.

  • Les graphiques horizontaux peuvent être créés en utilisant la fonction coord_flip() [dans le package ggplot2].
  • Lorsque vous ajoutez des p-values à un ggplot horizontal, vous devez spécifier l’option coord.flip = TRUE dans la fonction stat_pvalue_manual() [dans le package ggpubr]. Les options vjust (ajustement vertical) et hjust (ajustement horizontal) peuvent également être spécifiées pour adapter la position des étiquettes de p-values.

Notez que, dans certains cas, les étiquettes de p-values sont partiellement cachées par la bordure supérieure du graphique. Dans ce cas, la fonction ggplot2 scale_y_continuous(expand = expansion(mult = c(0, 0.1))) peut être utilisée pour ajouter des espaces entre les étiquettes et la bordure supérieure du graphique. L’option mult = c(0, 0.1) indique que des espaces de 0% et 10% sont respectivement ajoutés en bas et en haut du graphique.



Sommaire:

Prérequis

Assurez-vous d’avoir installé les paquets R suivants:

  • ggpubr pour créer facilement des graphiques prêts à la publication
  • rstatix contient des fonctions R facilitant les analyses statistiques.

Commencez par charger les packages requis suivants:

library(ggpubr)
library(rstatix)

Préparation des données

# Transformer `dose` en variable factorielle
df <- ToothGrowth
df$dose <- as.factor(df$dose)
head(df, 3)
##    len supp dose
## 1  4.2   VC  0.5
## 2 11.5   VC  0.5
## 3  7.3   VC  0.5

Créer des graphiques simples

# Box plots
bxp <- ggboxplot(df, x = "dose", y = "len", fill = "dose", 
                 palette = c("#00AFBB", "#E7B800", "#FC4E07"))

# Bar plots représentant la moyenne +/- l'écart-type
bp <- ggbarplot(df, x = "dose", y = "len", add = "mean_sd", fill = "dose", 
                palette = c("#00AFBB", "#E7B800", "#FC4E07"))

Comparaisons par paires

Test statistique

Dans l’exemple suivant, nous allons effectuer un test-T en utilisant la fonction t_test() [package rstatix]. Il est également possible d’utiliser la fonction wilcox_test().

stat.test <- df %>% t_test(len ~ dose)
stat.test
## # A tibble: 3 x 10
##   .y.   group1 group2    n1    n2 statistic    df        p    p.adj p.adj.signif
## * <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl>    <dbl>    <dbl> <chr>       
## 1 len   0.5    1         20    20     -6.48  38.0 1.27e- 7 2.54e- 7 ****        
## 2 len   0.5    2         20    20    -11.8   36.9 4.40e-14 1.32e-13 ****        
## 3 len   1      2         20    20     -4.90  37.1 1.91e- 5 1.91e- 5 ****

Graphiques verticaux avec p-values

# Box plot
stat.test <- stat.test %>% add_xy_position(x = "dose")
bxp + stat_pvalue_manual(stat.test, label = "p.adj.signif", tip.length = 0.01)

# Bar plot
stat.test <- stat.test %>% add_xy_position(fun = "mean_sd", x = "dose")
bp + stat_pvalue_manual(stat.test, label = "p.adj.signif", tip.length = 0.01)

Graphiques horizontaux avec p-values

Utiliser les niveaux de significativité des p-values ajustées comme étiquettes

# Box plot horizontal avec p-values
stat.test <- stat.test %>% add_xy_position(x = "dose")
bxp + 
  stat_pvalue_manual(
    stat.test, label = "p.adj.signif", tip.length = 0.01,
    coord.flip = TRUE
    ) +
  coord_flip()

# Bar plot horizontal avec p-values
stat.test <- stat.test %>% add_xy_position(fun = "mean_sd", x = "dose")
bp + stat_pvalue_manual(
  stat.test, label = "p.adj.signif", tip.length = 0.01,
  coord.flip = TRUE
  ) +
  coord_flip()

Utiliser les p-values ajustées comme étiquettes

# Utilisation de `p.adj` comme étiquettes
stat.test <- stat.test %>% add_xy_position(x = "dose")
bxp + 
  stat_pvalue_manual(
    stat.test, label = "p.adj", tip.length = 0.01,
    coord.flip = TRUE
    ) +
  coord_flip()

# Changer l'angle d'orientation des p-values
# Ajustez la position des p-values en utilisant vjust et hjust
# Ajoutez des espaces entre les étiquettes et la bordure du graphique
bxp + 
  stat_pvalue_manual(
    stat.test, label = "p.adj", tip.length = 0.01,
    coord.flip = TRUE, angle = 0, 
    hjust = 0, vjust = c(0, 1.2, 0)
    ) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.3))) + 
  coord_flip() 

Comparaisons par rapport à un groupe de référence

Tests statistiques

stat.test <- df %>% t_test(len ~ dose, ref.group = "0.5") 
stat.test
## # A tibble: 2 x 10
##   .y.   group1 group2    n1    n2 statistic    df        p    p.adj p.adj.signif
## * <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl>    <dbl>    <dbl> <chr>       
## 1 len   0.5    1         20    20     -6.48  38.0 1.27e- 7 1.27e- 7 ****        
## 2 len   0.5    2         20    20    -11.8   36.9 4.40e-14 8.80e-14 ****

Graphiques verticaux avec p-values

# Box plot verticale avec p-values
stat.test <- stat.test %>% add_xy_position(x = "dose")
bxp + 
  stat_pvalue_manual(stat.test, label = "p.adj", tip.length = 0.01) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)))

# Bar plot vertical avec p-values
stat.test <- stat.test %>% add_xy_position(fun = "mean_sd", x = "dose")
bp + 
  stat_pvalue_manual(stat.test, label = "p.adj.signif", tip.length = 0.01) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)))

Graphiques horizontaux avec p-values

# Box plot horizontal avec p-values
stat.test <- stat.test %>% add_xy_position(x = "dose")
bxp + 
  stat_pvalue_manual(
    stat.test, label = "p.adj", tip.length = 0.01, 
    coord.flip = TRUE
    ) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1))) +
  coord_flip()

# Bar plot horizontal avec p-values
stat.test <- stat.test %>% add_xy_position(fun = "mean_sd", x = "dose")
bp + 
  stat_pvalue_manual(
    stat.test, label = "p.adj", tip.length = 0.01,
    coord.flip = TRUE
    ) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1))) +
  coord_flip()

# Indiquer les p-values à la position x = "groupe2"
stat.test <- stat.test %>% add_xy_position(x = "dose")
bxp + 
  stat_pvalue_manual(
    stat.test, label = "p = {p.adj}", tip.length = 0.01, 
    coord.flip = TRUE, x = "group2", hjust = 0.4
    ) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.2))) +
  coord_flip()

# Rendre les p-values horizontales en utilisant l'option angle
stat.test <- stat.test %>% add_xy_position(x = "dose")
bxp + 
  stat_pvalue_manual(
    stat.test, label = "p = {p.adj}", tip.length = 0.01, 
    coord.flip = TRUE, x = "group2", angle = 90
    ) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1))) +
  scale_x_discrete(expand = expansion(mult = c(0.05, 0.3))) +
  coord_flip()

Conclusion

Cet article décrit comment ajouter des p-values sur des ggplots horizontaux en utilisant la fonction R stat_pvalue_manual() disponible dans le package R ggpubr. Voir d’autres questions apparentées fréquemment posées : ggpubr FAQ.



Version: English





No Comments

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments