8.6 Représentation graphique

Il n’existe pas un graphique de référence pour présenter un test t de Student ou un test de Wilcoxon. On retrouve malheureusement dans la littérature plusieurs graphiques qui coexistent. Afin de présenter trois graphiques courants, nous utilisons le jeu de données crabs.

On retrouve généralement deux graphiques montrant la moyenne et l’intervalle de confiance.

a <- chart(data = crabs, rear ~ sex) +
  stat_summary(geom = "col", fun = "mean") +
  stat_summary(geom = "errorbar", width = 0.1,
    fun.data = "mean_cl_normal", fun.args = list(conf.int = 0.95))

b <- chart(data = crabs, rear ~ sex) +
  geom_jitter(alpha = 0.3, width = 0.2) +
  stat_summary(geom = "point", fun = "mean", size = 2) +
  stat_summary(geom = "errorbar", width = 0.1,
    fun.data = "mean_cl_normal", fun.args = list(conf.int = 0.95), size = 1)
# Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
# ℹ Please use `linewidth` instead.
# This warning is displayed once every 8 hours.
# Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
# generated.
combine_charts(list(a,b))

Le graphique en barres (encore appelé graphique en dynamite, car il ressemble au déclencheur d’explosion de dynamite dans les dessins animés Walt Disney) et le nuage de points représentent identiquement la même information. Ils représentent la moyenne avec des barres d’erreurs qui matérialisent l’intervalle de confiance à 95%. Le graphique en dynamite avec des barres d’erreurs ne donne aucune information sur le nombre d’observations. Nous avons déjà abordé rapidement cette problématique dans la section 3.1.3. Il n’est donc pas le graphique optimal pour présenter un test t de Student. Donc, préférez systématiquement le graphique de droite ou une de ses variantes (graphique en violon au lieu des points et barres d’erreurs autour des moyennes superposées lorsque le nombre d’observations est très grand).

Malgré le fait que le test t de Student est un test paramétrique, on retrouve dans la littérature scientifique la boite de dispersion qui est pourtant un graphique associé à des valeurs non paramétriques. Pour le test de Wilcoxon, la boite de dispersion est le graphique descriptif le plus recommandé (on peut aussi y adjoindre les points, ou passer sur le graphique en violon si le nombre d’observations est très grand).

chart(data = crabs, rear ~ sex) +
  geom_boxplot()

Parmi ces trois choix, nous vous conseillons d’employer le nuage de point avec la valeur moyenne et l’intervalle de confiance en priorité dans vos descriptions des données, sans présager nécessairement du test d’hypothèse qui sera réalisé ensuite.

chart(data = crabs, rear ~ sex) +
  geom_jitter(alpha = 0.3, width = 0.2) +
  stat_summary(geom = "point", fun = "mean") +
  stat_summary(geom = "errorbar", width = 0.1,
    fun.data = "mean_cl_normal", fun.args = list(conf.int = 0.95))

Pièges et astuces : barres d’erreurs

Que vous utilisiez le nuage de points ou le graphique en barres, vous devez être extrêmement vigilant aux barres d’erreurs. Vous devez toujours préciser et bien comprendre ce que les barres d’erreurs cachent. Voici quatre graphiques qui présentent différentes barres d’erreurs à partir des mêmes données (la taille de l’axe y a volontairement été figée).

p <- chart(data = crabs, rear ~ sex) +
  geom_jitter(alpha = 0.1, width = 0.2) +
  stat_summary(geom = "point", fun.y = "mean") +
  scale_y_continuous(limits = c(5,22))
# Warning: The `fun.y` argument of `stat_summary()` is deprecated as of ggplot2 3.3.0.
# ℹ Please use the `fun` argument instead.
# This warning is displayed once every 8 hours.
# Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
# generated.
a <- p +
  stat_summary(geom = "errorbar", width = 0.1,
    fun.data = "mean_cl_normal", fun.args = list(conf.int = 0.95)) 

b <- p +
  stat_summary(geom = "errorbar", width = 0.1,
    fun.data = "mean_sdl", fun.args = list(mult = 1))

c <- p +
  stat_summary(geom = "errorbar", width = 0.1,
    fun.data = "mean_sdl", fun.args = list(mult = 2)) 

d <- p + 
  stat_summary(geom = "errorbar", width = 0.1,
    fun.data = "mean_se", fun.args = list(mult = 1))

combine_charts(list(a,b,c,d))
Nuage de points de la largeur de l'arrière de la carapace en focntion du sexe avec la moyenne et des barres d'erreurs. A : moyenne et intervalle de confiance 0.95. B : moyenne et écart-type. C : moyenne et 2*écart-type. D : moyenne et erreur standard

Figure 8.6: Nuage de points de la largeur de l’arrière de la carapace en focntion du sexe avec la moyenne et des barres d’erreurs. A : moyenne et intervalle de confiance 0.95. B : moyenne et écart-type. C : moyenne et 2*écart-type. D : moyenne et erreur standard

Les formules servant au calcul des quatre variantes des barres d’erreurs sont les suivantes dans l’ordre de A à D :

  • Graphique A : intervalle de confiance 0.95

\[\mathrm{IC}(1 - \alpha) \simeq \bar{x} \pm t_{\alpha/2}^{n-1} \cdot SE_x\]

mean_cl_normal(crabs$rear)
#         y     ymin     ymax
# 1 12.7385 12.37968 13.09732
  • Graphique B : écart-type

\[s_x = \sqrt{\sum_{i=1}^n{\frac{(x_i - \bar{x})^2}{n-1}}}\]

mean_sdl(crabs$rear, mult = 1)
#         y     ymin     ymax
# 1 12.7385 10.16516 15.31184
  • Graphique C : deux fois la valeur de l’écart-type

\[2 \times s_x\]

mean_sdl(crabs$rear, mult = 2)
#         y    ymin     ymax
# 1 12.7385 7.59182 17.88518
  • Graphique D : erreur standard

\[SE_x = \frac{s_x}{\sqrt{n}}\]

mean_se(crabs$rear)
#         y     ymin     ymax
# 1 12.7385 12.55654 12.92046

Comme nous venons de le voir, les barres d’erreurs sont calculées à partir de différentes fonctions. Il est donc indispensable de préciser explicitement ce que les barres d’erreurs représentent. Dans le cas du test t de Student, nous avons vu qu’il est lié directement à la notion d’intervalle de confiance. C’est donc la version avec l’IC (variante A) qui permet une comparaison visuelle immédiate du test. Par contre, cet IC, autant que l’erreur standard dépendent de n. Autement dit, comme ici, les barres d’erreurs peuvent devenir très petites si n est grand, indépendamment de la variation intrinsèque des mesures.

Si l’on ne souhaite pas faire intervenir n, c’est alors l’écart type qui représentera le mieux l’étalement des observations. De plus, nous savons que si la distribution est normale, deux fois l’écart type d’un côté et de l’autre représente à peu près l’intervalle dans lequel 95% des observations doivent se trouver, ce qui donne un sens à la variante qui représente deux fois l’écart type comme barre d’erreur. Donc, il n’y a pas un graphique meilleur que les autres, tout dépend de l’information que vous souhaitez mettre en évidence dans vos données et du contexte de votre analyse.

Pour en savoir plus
  • Beware of dynamite. Démonstration de l’impact d’un graphe en barres pour représenter la moyenne (et l’écart type) = graphique en “dynamite”.

  • Dynamite plots : unmitigated evil? Une autre comparaison du graphe en dynamite avec des représentations alternatives qui montre que le premier peut avoir quand même quelques avantages dans des situations particulières.

  • Annotation de graphiques avec {{ggpubr}. Comment afficher les p-values sur un graph ? Ces variantes annotées des résultats des tests d’hypothèses correspondants se retrouvent fréquemment dans les publications en biologie.

Pour terminer, bien que la moyenne soit un descripteur statistique très utile, il est parfois utilisé de manière abusive. Une distribution statistique ne se résume pas à un nombre, fût-ce la moyenne. De plus, si la distribution est asymétrique, la moyenne est un mauvais choix (préférez alors la médiane, ou transformez les données pour rendre la distribution plus symétrique). La vidéo suivante détaille le problème qui peut se produire :

À vous de jouer !

Appliquez vos nouvelles connaissances dans le projet GitHub Classroom de groupe que vous avez débuté au module précédent.

Réalisez en groupe le travail A07Ga_human_health, partie II.

Travail en groupe de 4 pour les étudiants inscrits au cours de Science des Données Biologiques I : inférence à l’UMONS à terminer avant le 2025-05-19 23:59:59.

Initiez votre projet GitHub Classroom

Voyez les explications dans le fichier README.md, partie II.