Tutoriel : afficher des barres d'erreur sur un graphique

Tutoriel : afficher des barres d'erreur sur un plot

Les barres d’erreur apparaissent fréquemment sur les graphiques illustrant les résultats d’expérimentations biologiques. Bien qu’elles soient très informatives, elles peuvent prêter à confusion, car elles peuvent représenter des informations très variées. En effet, les barres d’erreur peuvent représenter :

  • L’écart type (𝑠𝑑) des observations

  • L’erreur standard (s.e) d’une mesure statistique (très généralement une moyenne)

  • L’intervalle de confiance d’une mesure statistique (là encore très généralement une moyenne)

Dans ce tutoriel, je vous propose, dans un premier temps, de revisiter ces trois éléments : leur signification, leur mode de calcul, et leur utilisation, puis de vous montrer en pas à pas, comment afficher des barres d’erreur avec le package ggplot2.

Table des matières

Définitions et calculs des différentes barres d’erreur

L’écart type

L’écart type (standard deviation en anglais) est un indicateur statistique descriptif de la dispersion des observations.

Il est calculé comme ceci :

𝑠𝑑=1𝑛1𝑖=1𝑁(𝑥𝑖𝑥¯)2

L’écart type des observations s’interprète comme un écart typique à la moyenne. Par exemple, si vous observez des poids de souris, que la moyenne est 250 grammes et que l’écart-type est de 10 grammes, alors cela signifie que l’écart typique des poids des souris par rapport à la moyenne est de 10 grammes.

Il y a également une règle qui dit que si les observations suivent une loi normale, alors :

  • 68% des observations sont comprises entre la moyenne +/- 1 écart-type
  • 95% des observations sont comprises entre la moyenne +/- 2 écart-types
  • 99,7% des observations sont comprises entre la moyenne +/- 3 écart-types.
Règles des écart-types

Image : Michael Galarnyk

En d’autres termes, environ 68% des poids des souris se situeront entre 240 et 260 grammes, et environ 95% se situeront entre 230 et 270 grammes, et 99.7% se situeront entre 220 et 280 grammes.

L’erreur standard

L’erreur standard (standard error en anglais), quant à elle, est un indicateur statistique de la précision de l’estimation d’un paramètre à l’échelle de la population, à partir d’un échantillon. Il peut s’agir, par exemple, de l’erreur standard d’une moyenne.

Lorsqu’une expérimentation est réalisée, elle est menée sur un nombre limité d’individus. Ce nombre limité d’individus est un échantillon de l’ensemble des individus qui constitue une population. L’échantillon est généralement constitué à partir d’un tirage aléatoire de l’ensemble des individus. Lorsque nous calculons la moyenne des observations sur cet échantillon, il s’agit d’une estimation de la moyenne de la population. Si nous recommençons l’expérimentation avec un autre échantillon, nous obtenons une autre estimation de la moyenne de la population. C’est ce qu’on appelle la fluctuation d’échantillonnage.

Prenons un exemple. Imaginons que la population est constituée de 10 000 souris dont le poids moyen est 250g avec un écart type de 25g, que je réalise deux échantillons de 30 souris, et que j’estime la moyenne de leur poids :

# simulation des poids des 10 000 souris constituant la population avec 
set.seed(123) # fixer le tirage pseudo aléatoire
x <- rnorm(n=10000, mean=250, sd=25)

# premier échantillon
x1 <- sample(x,30)

# moyenne des poids du premier échantillon
round(mean(x1),1)

[1] 249
 
# second échantillon
x2 <- sample(x,30)

# moyenne des poids du second échantillon
round(mean(x2),1)

[1] 253.9 

La moyenne estimée de la population avec le premier échantillon est 249 g et 253.9 g avec le second échantillon.

L’erreur standard représente l’écart type des estimations de la moyenne. Recommençons nos tirages au sort pour réaliser 1000 échantillons de 30 souris, puis estimons la moyenne des poids de chacun de ces échantillons, et enfin l’écart type de ces moyennes.

# réalisation des 1000 échantillons de 3O souris à la partir de la population x et calcul de la moyenne

means <- replicate(1000, mean(sample(x,30)))

# calcul de l'écart type des moyennes
round(sd(means),1)

[1] 4.5 

L’écart type des moyennes est de 4.5 g. C’est l’erreur standard de la moyenne. Cette valeur nous renseigne sur la variabilité des estimations de la moyenne d’un échantillon à l’autre.

L’erreur standard peut être calculée avec cette formule :

𝑠𝑒=𝑠𝑑𝑁

où sd est l’écart-type de l’échantillon et 

𝑁

 est la taille de l’échantillon.

Si nous appliquons cette formule à notre exemple, nous obtenons : 

𝑠𝑒=2530=4.56

, ce qui est très proche de la valeur calculée précédemment.

Cette formule nous dit que l’erreur standard est inversement proportionnelle à la racine carrée de la taille de l’échantillon. Autrement dit, l’erreur standard diminue lorsque la taille de l’échantillon augmente. C’est assez intuitif : imaginez que votre échantillon contienne l’ensemble des individus de la population, sauf un. Dans cette situation, la moyenne estimée sera très proche de la moyenne de la population. L’erreur standard sera donc très faible et la précision très grande. À l’inverse, si votre échantillon ne contient qu’un petit nombre d’individus, la moyenne estimée sera probablement assez éloignée de la moyenne de la population. L’erreur standard sera donc grande et la précision faible.

Faisons un exemple, en reprenant notre exemple de poids de souris, mais en considérant cette fois des échantillons de taille 10

# réalisation des 1000 échantillons de 10 souris à la partir de la population x et calcul de la moyenne
 

means <- replicate(1000, mean(sample(x,10)))

# calcul de l'écart type des moyennes
round(sd(means),1)

[1] 7.7 

L’erreur standard est de 7.7 g. C’est une valeur plus grande que celle obtenue avec des échantillons de taille 30. Cela signifie que l’estimation de la moyenne de la population est moins précise avec des échantillons de taille 10 qu’avec des échantillons de taille 30.

En résumé, alors que l’écart-type mesure la dispersion des observations individuelles, l’erreur standard mesure la précision de l’estimation de la moyenne de la population.

L’intervalle de confiance

L’intervalle de confiance (confidence interval en anglais) est un autre indicateur statistique de la précision de l’estimation d’un paramètre à l’échelle de la population, estimé à partir d’un échantillon.

L’intervalle de confiance est une plage de valeur dans laquelle on s’attend à ce que la moyenne de la population se situe avec un certain niveau de confiance (par exemple, 95%).

Il est calculé comme ceci pour un intervalle de confiance de 95% de la moyenne :

𝐼𝐶=𝑥¯±𝑍×𝑠𝑒

où 

  • 𝑥¯

     est la moyenne de l’échantillon, 

  • 𝑍 est le score Z (quantile de la loi normale correspondant au niveau de confiance choisi (1,96 pour 95%), et 
  • s𝑒 est l’erreur standard.

Par exemple, si vous observez des poids de souris, que la moyenne est 250 grammes, l’écart-type est de 25 grammes, que vous avez un échantillon de 30 souris, et que vous souhaitez un intervalle de confiance à 95%, alors l’erreur standard serait de 4.56 grammes (comme calculé précédemment). L’intervalle de confiance serait :

𝐼𝐶=250±1,96×4.56

𝐼𝐶=250±8,94

Donc, l’intervalle de confiance est [241,06 ; 258,94] grammes.

Cela signifie que vous pouvez être confiant à 95% que la véritable moyenne des poids des souris dans la population se situe entre 246,08 et 253,92 grammes.

Utilisation des barres d’erreur : Description vs inférence

L’écart-type est un indicateur descriptif de la dispersion des observations, alors que l’erreur standard et l’intervalle de confiance sont des indicateurs inférentiels de la précision de l’estimation de la moyenne de la population.

Lorsque les moyennes de deux groupes d’individus indépendants sont représentées côte à côte sur un graphique avec des barres d’erreur indiquant l’intervalle de confiance, l’absence de chevauchement des barres d’erreur suggère qu’un test statistique adéquat révélera probablement une différence significative entre les moyennes des deux groupes.

En revanche, si les barres d’erreur se chevauchent, cela suggère qu’un test statistique approprié ne mettra probablement pas en évidence de différence significative entre les moyennes des deux groupes.

Régle empirique du chevauchement des intervalles de confiance

Néanmoins, Il est toujours crucial de réaliser le test statistique approprié pour tirer des conclusions définitives.

Représenter des barres d’erreur avec ggplot2

Pour réaliser un graphique avec les moyennes et des barres d’erreur, il est nécessaire au préalable de disposer d’une table de données (data frame) contenant les moyennes, et les quantités que vous souhaitez représenter à l’aide barres d’erreur (sd, se ou ci). Ensuite, vous n’aurez plus qu’à ajouter la couche geom_errorbar().

Et puisque les barres d’erreur peuvent représenter l’écart-type, l’erreur standard de la moyenne ou son intervalle de confiance, il est primordial de bien spécifier le type de barres d’erreur que vous représentez, soit dans le titre, soit dans la légende du graphique. Il est aussi important de faire apparaitre le nombre de données. Je vous montre comment faire cela

Simulation des données

Imaginons un plan expérimental visant à évaluer l’effet de trois régimes sur la perte de poids.

# Définir les niveaux du facteur
Regime <- rep(c("RégimeA", "RégimeB", "RégimeC"), each = 30)

# Générer des poids poids perdu
set.seed(123)  # pour reproductibilité
yA <- rnorm(30, mean = 5, sd = 2)
yB <- rnorm(30, mean =3, sd = 2)
yC<- rnorm(30, mean =7, sd = 2)
Poids_perdu <- c(yA, yB, yC)

# Création d'u numero d'identification
ID =paste("patient", 1:90, sep="_")

# Création d'un un data frame avec les variables
mydata <- data.frame(
  ID,
  Regime,
  Poids_perdu
)


# Afficher les première ligne du data frame
head(mydata)
         ID  Regime Poids_perdu
1 patient_1 RégimeA    3.879049
2 patient_2 RégimeA    4.539645
3 patient_3 RégimeA    8.117417
4 patient_4 RégimeA    5.141017
5 patient_5 RégimeA    5.258575
6 patient_6 RégimeA    8.430130 

Calcul des moyennes, sd, erreur standard et intervalles de confiance pour les barres d’erreur

Il est très facile de créer le data frame agrégé, contenant le nombre de données, la moyenne, l’écart type, l’erreur standard et la quantité à retrancher ou à ajouter à la moyenne pour former les bornes de l’intervalle de confiance, à partir du data frame des observations brutes, en utilisant la fonction summarySEdu package Rmisc :

library(Rmisc)
mydata.agg <- summarySE(mydata, measurevar = "Poids_perdu", groupvars = "Regime")

mydata.agg

   Regime  N Poids_perdu       sd        se        ci
1 RégimeA 30    4.905792 1.962061 0.3582218 0.7326458
2 RégimeB 30    3.356677 1.670256 0.3049456 0.6236838
3 RégimeC 30    7.048841 1.739588 0.3176038 0.6495727 

Affichage des barres d’erreur de type sd

#Charger la bibliothèque ggplot2
library(ggplot2)

#Créer un graphique ggplot en spécifiant le data frame et les mappages esthétiques de base
ggplot(mydata.agg, aes(x = Regime, y = Poids_perdu, colour = Regime)) + 

 #Ajouter des points représentant les moyennes de poids perdu pour chaque régime
  geom_point(size = 3) + 

 #Ajouter des barres d'erreur représentant l'écart type autour des moyennes
  geom_errorbar(aes(ymin = Poids_perdu - sd, ymax = Poids_perdu + sd), width = 0.2) + 

 #Ajouter des annotations de texte pour indiquer le nombre de données (N) 
  geom_text(aes(y = min(Poids_perdu) - 1, label = paste("N =", N)), vjust = -0.5) + 
 

Affichage des barres d’erreur de type se

Il suffit de remplacer sd par se dans la couche geom_errorbar():

ggplot(mydata.agg, aes(x = Regime, y = Poids_perdu, colour = Regime)) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = Poids_perdu - se, ymax = Poids_perdu + se), width = 0.2) +
  geom_text(aes(y = min(Poids_perdu) - 1, label = paste("N =", N)), vjust = -0.5) +
  theme_minimal() +
  labs(title = "Poids perdu par régime avec erreur standard",
       x = "Régime",
       y = "Poids perdu (kg)") +
  theme(legend.position = "none") 

Affichage des barres d’erreur de type intervalle de confiance

Il suffit de remplacer sd par ci dans la couche geom_errorbar():

ggplot(mydata.agg, aes(x = Regime, y = Poids_perdu, colour = Regime)) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = Poids_perdu - ci, ymax = Poids_perdu + ci), width = 0.2) +
  geom_text(aes(y = min(Poids_perdu) - 1, label = paste("N =", N)), vjust = -0.5) +
  theme_minimal() +
  labs(title = "Poids perdu par régime avec intervalles de confiance",
       x = "Régime",
       y = "Poids perdu (kg)") +
  theme(legend.position = "none") 

Pour aller plus loin

Conclusion

Les barres d’erreur sont des outils puissants pour représenter la variabilité et l’incertitude dans les données expérimentales. Que ce soit pour illustrer l’écart type, l’erreur standard ou les intervalles de confiance, il est crucial de bien comprendre ce qu’elles représentent et comment les calculer. En utilisant les techniques et les outils présentés dans cet article, vous serez mieux équipé pour interpréter et communiquer vos résultats de manière claire et précise.

J’espère que cet article vous a aidé à mieux comprendre l’utilisation des barres d’erreur dans les graphiques. N’hésitez pas à laisser un commentaire ci-dessous si vous avez des questions, des suggestions ou des expériences à partager sur ce sujet. Vos retours sont précieux et m’aident à améliorer le contenu pour mieux répondre à vos attentes.

Poursuivez votre lecture

6 Responses

  1. Bonjour ! S’il vous plaît puis-je avoir les tables des lois de probabilité tabulées et leur mode d’utilisation bien expliquer ?

  2. Bonjour madame,
    Toujours très ému et satisfait quand je lis vos articles. J’en ressors toujours plein le sac. Pas seulement avec des informations mais des connaissances très utiles et applicables dans notre quotidien.

    Merci vraiment pour ce que vous faites.

    Rodrigue, Québec

  3. Merci claire pour ce tuto car elle nous évitera de confondre ces différents paramètres lors de la présentation de résultats sous forme de plot avec les barres d’erreurs.

  4. Bonjour et merci pour cet excellent article qui remet bien les choses à plat.

    Une question néanmoins : pourquoi dans l’exemple des régimes, où sd, se et ci sont calculés automatiquement par Rmisc, on n’a pas ci = 1,96*se ?
    ci-dessous les valeurs pour le régime A :
    se = 0.3582218, ci = 0.7326458, ce qui fait un facteur de 2,05.

    1. Bonjour Véronique,

      Merci pour cette excellente question.
      Les Ci renvoyés par la fonction sont calculés en employant une distribution de Student. 2,05 devrait correspondre au percentile 97,5% avec n-1 (29) degrès de libertés.
      Vous pouvez vérifier ici https://istats.shinyapps.io/tdist/; dans l’onglet « Find Percentile / Quantile », en choisissant 29 degrees of freedom, « Two -tailed » et Probability =95%.
      Bonne continuation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous souhaitez vous former à R, ou aux statistiques ?

Retrouver le planning et les programmes de  mes formations ici  👇👇👇 

Vous avez besoin d'un assitance pour analyser vos données ?

Retrouver mes propositions de services ici  👇👇👇 

Vous souhaitez soutenir mon travail ?​

C’est possible en faisant un don  sur la page Tipeee du blog  👇👇👇

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.