Comment lire une boîte à moustaches
Une boîte à moustaches comprime toute une distribution en cinq nombres et les dessine en un glyphe compact. L'apprendre à lire prend trente secondes, alors commençons par ça - chaque élément a un sens précis :
- Le trait épais dans la boîte est la médiane : la moitié des données est en dessous, la moitié au-dessus.
- La boîte elle-même couvre l'écart interquartile (IQR) - du premier quartile (25 % des données en dessous) au troisième quartile (75 % en dessous). La moitié centrale de tes données vit dans la boîte.
- Les moustaches sont les traits qui sortent de la boîte. Chacune atteint le point de données le plus extrême encore situé à moins de 1,5 × IQR du bord de la boîte - elles couvrent donc « l'étendue ordinaire » des données, pas l'étendue complète.
- Les points individuels au-delà des moustaches sont des valeurs à plus de 1,5 × IQR de la boîte : signalées comme valeurs aberrantes suspectées, dessinées une par une pour que tu puisses les compter.
Une boîte haute signifie des données dispersées ; une médiane décentrée dans la boîte signifie de l'asymétrie ; une traînée de points au-delà d'une moustache signifie une queue lourde de ce côté. Un histogramme montre la même distribution avec plus de détail - mais le super-pouvoir de la boîte à moustaches, c'est qu'on peut en aligner une douzaine côte à côte, ce qui en fait le graphique pour comparer des groupes.
Une boîte à moustaches pour une variable
La fonction est boxplot(), et pour un seul vecteur numérique elle tient en un appel :
scores <- c(52, 55, 58, 60, 61, 63, 64, 66, 68, 70, 72, 95)
boxplot(scores,
main = "Test scores",
ylab = "Score")
L'image obtenue : une boîte de 59 à 69 avec la médiane à 63,5, des moustaches descendant à 52 et montant à 72, et un point solitaire flottant à 95 - la valeur aberrante qu'un résumé moyenne-et-écart-type aurait discrètement absorbée. Ce « une valeur n'est pas comme les autres » instantané, c'est à ça que servent les boîtes à moustaches.
(Comme sur chaque page de ce chapitre, les appels graphiques sont des extraits statiques - l'exécuteur ci-dessous n'affiche que du texte. Lance-les localement pour voir le dessin.)
Comparer des groupes : l'interface formule
Le vrai usage quotidien est une boîte par groupe, et pour ça boxplot() accepte une formule : y ~ group, qui se lit « y ventilé par groupe ». Le jeu de données intégré ToothGrowth de R - la longueur des dents de 60 cobayes recevant de la vitamine C par jus d'orange (OJ) ou acide ascorbique (VC) - est la démonstration classique :
boxplot(len ~ supp,
data = ToothGrowth,
main = "Tooth growth by supplement",
xlab = "Supplement",
ylab = "Tooth length")
Deux boîtes apparaissent sur une échelle verticale commune : la boîte OJ est nettement plus haute que la boîte VC, avec une médiane autour de 22 contre environ 19. Comme les deux boîtes partagent un axe, la comparaison est honnête par construction - aucun risque de deux graphiques à échelles différentes flattant un groupe. La colonne de groupement doit être un facteur (ou un vecteur de caractères) ; chaque niveau devient une boîte.
Les formules s'emboîtent aussi : boxplot(len ~ supp * dose, data = ToothGrowth) dessine six boîtes, une par combinaison de supplément et de dose. Quand une différence entre groupes paraît réelle dans les boîtes, la question naturelle suivante - est-ce plus que du bruit ? - est ce à quoi répond un test t.
Étiquettes, couleurs et boîtes horizontales
Les arguments de style suivent les conventions du tracé de base. names étiquette les boîtes, col les remplit - passe un vecteur pour colorer chaque groupe différemment :
boxplot(len ~ supp,
data = ToothGrowth,
names = c("Orange juice", "Ascorbic acid"),
col = c("orange", "lightblue"),
main = "Tooth growth by supplement",
ylab = "Tooth length")
Deux autres interrupteurs gagnent leur place :
horizontal = TRUEpivote tout le graphique pour que les boîtes s'étendent le long de l'axe horizontal. Fais-le dès que les noms de groupes sont longs - des étiquettes horizontales restent lisibles là où des verticales se chevauchent.notch = TRUEcreuse une encoche autour de chaque médiane ; quand les encoches de deux groupes ne se chevauchent pas, leurs médianes diffèrent vraisemblablement. Traite-le comme un indice visuel, pas comme un test.
Les nombres derrière la boîte
Tout ce que dessine le graphique vient de nombres que tu peux afficher. quantile() donne le résumé à cinq nombres, et boxplot.stats() te donne exactement ce qu'utilise le graphique - y compris les valeurs aberrantes. Celui-ci, tu peux l'exécuter ici même :
Note que les deux sont cousins, pas jumeaux : quantile() rapporte le vrai minimum et le vrai maximum, tandis que s$stats s'arrête aux moustaches - les points les plus extrêmes à l'intérieur de la barrière à 1,5 × IQR. L'écart entre les deux est précisément s$out, ici le 95 solitaire. Quand quelqu'un demande « quelles lignes sont ces points aberrants ? », x[x %in% boxplot.stats(x)$out] - ou un filtre sur les valeurs de barrière - y répond.
Boîtes à moustaches avec ggplot2
Dans ggplot2, le groupement va dans la correspondance esthétique plutôt que dans une formule :
library(ggplot2)
ggplot(ToothGrowth, aes(x = supp, y = len, fill = supp)) +
geom_boxplot() +
labs(title = "Tooth growth by supplement",
x = "Supplement", y = "Tooth length")
Les deux mêmes boîtes, avec légende et thème offerts. La version ggplot2 passe mieux à l'échelle quand le graphique grandit - facette par dose, superpose les points bruts avec geom_jitter(width = 0.1), et le code reste déclaratif. Pour une comparaison ponctuelle en cours d'analyse, boxplot(y ~ g, data = df) reste la chose la plus rapide à taper.
Ce que tu retiens
- Anatomie de la boîte : trait de médiane, boîte = IQR, moustaches = points les plus extrêmes à moins de 1,5 × IQR, points au-delà = valeurs aberrantes suspectées.
boxplot(x)pour une variable ;boxplot(y ~ group, data = df)pour une comparaison de groupes côte à côte sur une seule échelle commune et honnête.- Stylise avec
names, un vecteurcolpar groupe, ethorizontal = TRUEquand les étiquettes sont longues. boxplot.stats(x)$statset$outsont le graphique sous forme de nombres - utilise-les pour extraire les valeurs aberrantes que le graphique pointe.- ggplot2 :
geom_boxplot()avec le groupe associé àxou àfill.
Prochaine étape : le nuage de points - de la distribution d'une variable à la relation entre deux.
Questions fréquentes
Comment faire une boîte à moustaches en R ?
Appelle boxplot(x) sur un vecteur numérique pour une seule boîte, ou utilise l'interface formule boxplot(y ~ group, data = df) pour obtenir une boîte par groupe côte à côte. Les deux sont livrées avec R de base - aucun package nécessaire.
Que signifient les parties d'une boîte à moustaches ?
Le trait épais dans la boîte est la médiane. La boîte couvre l'écart interquartile, du premier au troisième quartile. Les moustaches s'étendent jusqu'aux points les plus extrêmes situés à moins de 1,5 fois l'IQR de la boîte, et tout ce qui dépasse les moustaches est dessiné comme un point individuel - une valeur aberrante suspectée.
Comment faire une boîte à moustaches par groupe en R ?
Utilise une formule : boxplot(len ~ supp, data = ToothGrowth) dessine une boîte par niveau de supp. La variable de groupement doit être une colonne facteur ou caractère ; chaque niveau devient une boîte sur une échelle commune.
Comment retrouver les valeurs aberrantes que montre une boîte à moustaches ?
boxplot.stats(x)$out renvoie exactement les valeurs que le graphique dessinerait comme points au-delà des moustaches, et boxplot.stats(x)$stats donne les cinq nombres derrière la boîte - extrémités des moustaches, charnières et médiane.