cassionAnalyse de données

Leçon 2 sur 8

Unité · La marque et la comparaison

Douze communes, un classement, onze intervalles qui se recouvrent

Triées par prévalence, les communes ressemblent à un palmarès. Chacune des onze paires voisines a des intervalles qui se recouvrent, et trois seulement dépassent la médiane du district. Un graphique sans intervalles invite à un classement que les données ne peuvent pas étayer.

PythonR135 minEnquête SMARTCadre intégré de classification de la sécurité alimentaire (IPC)Définitions d'indicateurs de l'UNICEF

Le classement que le graphique invite

Malnutrition aiguë globale par commune avec intervalles de confiance à 95 %. Les trois communes mises en évidence sont les seules dont l’intervalle dépasse la médiane du district.

Douze communes, triées, de 15,3 % à 5,6 %. Sans les moustaches, c’est un palmarès : quelqu’un est le pire, quelqu’un est le meilleur, et une décision de ciblage en découle.

import pandas as pd

communes = pd.DataFrame({
    "commune": ["Anse-Rouge", "Gros-Morne", "L-Estere", "Ennery", "Terre-Neuve",
                "Marmelade", "Gonaives", "Saint-Michel", "Desdunes",
                "Saint-Marc", "Verrettes", "Dessalines"],
    "gam":  [.153, .136, .127, .088, .087, .086, .074, .072, .071, .071, .067, .056],
    "low":  [.109, .102, .083, .056, .055, .054, .057, .046, .040, .053, .041, .036],
    "high": [.206, .175, .183, .129, .130, .127, .095, .105, .117, .094, .102, .081],
})

overlaps = sum(communes["high"][i] > communes["low"][i - 1]
               for i in range(1, len(communes)))
print(f"adjacent pairs whose intervals overlap: {overlaps} of {len(communes) - 1}")
# Eleven of eleven. The ranking is a ranking of point estimates only.

Chaque paire voisine se recouvre. Le graphique peut étayer « ces trois-là sont au-dessus de la médiane du district » et ne peut pas étayer « Gros-Morne est pire que L’Estère ».

L’intervalle est ce qui convertit un classement en constat. Sans lui, le lecteur fournit un ordre que les données ne contiennent pas, et plus les barres sont soigneusement triées, plus l’ordre inventé paraît convaincant.

Tracer l’intervalle

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(7, 4))
ax.barh(communes["commune"], communes["gam"])
ax.errorbar(communes["gam"], communes["commune"],
            xerr=[communes["gam"] - communes["low"],
                  communes["high"] - communes["gam"]],
            fmt="none", capsize=3)
ax.invert_yaxis()
ggplot(communes, aes(x = gam, y = reorder(commune, gam))) +
  geom_col() +
  geom_errorbarh(aes(xmin = low, xmax = high), height = 0.3)

Quatre décisions, dont chacune change ce que le lecteur conclut.

Dites ce qu’est l’intervalle. « Intervalle de confiance à 95 % » dans la légende, à chaque fois. Une moustache nue est lue comme une erreur-type par certains, comme une étendue par d’autres, et comme un minimum et un maximum par la plupart.

Employez le bon intervalle. Ce sont des intervalles binomiaux exacts de Clopper-Pearson, parce que plusieurs communes ont de petits dénominateurs et que l’intervalle de Wald rejeté par le cours de statistiques produit des bornes négatives précisément sur ces cellules.

Ne rognez pas une borne pour qu’elle tienne. Un intervalle qui atteint 20,6 % fixe l’axe ; tronquer l’axe à 15 % et laisser la moustache déborder est un graphique qui a caché sa propre incertitude.

Des moustaches par-dessus les barres, non à leur place. Pour une proportion, la barre porte l’ampleur et la moustache porte le doute. Un graphique en points et moustaches est tout aussi défendable et se lit mieux au-delà d’une quinzaine de catégories.

Quand les intervalles ne sont pas le bon encodage

Trois cas, et recourir à une moustache dans l’un d’eux vaut moins que de s’en passer.

Un recensement, non un échantillon. Un décompte de tous les points d’eau d’un district n’a pas d’erreur d’échantillonnage. Il a d’autres erreurs — un point manqué, un état mal enregistré — et un intervalle de confiance ne les décrit pas. Dites plutôt que le dénominateur est complet.

Un total, non un taux. « 1 850 cas enregistrés » est un décompte de ce qui s’est produit. Il ne porte pas d’intervalle, et le cours de protection y a consacré une leçon.

Une série temporelle dont le lecteur doit voir la forme. Douze points mensuels avec moustaches deviennent une haie ; une bande ombrée derrière la ligne porte la même information et laisse la forme lisible.

ax.fill_between(months, lower, upper, alpha=0.2)
ax.plot(months, values)
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line()

La ligne de référence travaille plus que les intervalles

Moyenne du rapport poids-taille par équipe d’enquête, contre le seuil d’alerte SMART. La moyenne d’une équipe dépasse le seuil à partir duquel SMART signale un problème de mesure.

Un nombre est comparé à quelque chose, que vous le dessiniez ou non, et le dessiner décide à quoi.

Seuils Sphère, seuils d’alerte SMART, frontières de phase IPC, cibles nationales, un passage précédent. Chacun est une référence que quelqu’un dans la salle tient en tête, et le graphique qui la dessine est celui que tout le monde regarde de la même façon.

Étiquetez la ligne par ce qu’elle est, non par sa valeur. « Plancher 70 % » vaut mieux que « 0,70 », que le lecteur voit déjà sur l’axe.

Une seule ligne de référence. Deux est une comparaison que le lecteur doit effectuer ; trois est une décoration.

L’ordre de lecture, et les trois qui dépassent

La figure marque trois communes plutôt que de les décrire, décision qui vaut d’être copiée.

median = communes["gam"].median()
clears = communes[communes["low"] > median]
print(f"median {median:.1%}; clearing it: {list(clears['commune'])}")
communes |> filter(low > median(gam)) |> pull(commune)

Anse-Rouge, Gros-Morne et L’Estère sont les trois seules dont la borne inférieure dépasse la médiane du district de 8,0 %. C’est une affirmation défendable et c’est celle que fait la mise en évidence. Tout ce qui est en dessous est un groupe, non une séquence.

La mise en évidence est un argument, faites-en donc l’argument que fait la légende. Mettre en évidence les trois plus élevées par valeur aurait marqué les mêmes trois ici par chance ; le faire selon que l’intervalle dépasse la médiane les marque pour une raison, et les deux divergeraient sur un autre jeu de données.

Rapportez-le en entier

Global acute malnutrition by commune, Artibonite, 2024

  Prevalence by commune with 95% Clopper-Pearson intervals, sorted by point
  estimate. n ranges from 189 to 768 screenings per commune.

  Three communes -- Anse-Rouge, Gros-Morne and L'Estere -- have lower bounds
  above the district median of 8.0% and are highlighted.

  All eleven adjacent pairs have overlapping intervals. The chart supports
  "these three are above the district median" and does not support a ranking
  of one commune against its neighbour.

  Intervals are exact binomial. Communes with fewer than 300 screenings have
  intervals roughly twice as wide as Gonaives and Saint-Marc, which is a
  property of where the screening teams went rather than of their nutrition
  situation.

Le troisième paragraphe est ce qui empêche d’employer le graphique comme un palmarès, et c’est la phrase qu’un lecteur ne fournira pas de lui-même.

La suite

Les deux figures de cette leçon emploient une couleur pour les barres ordinaires et une pour les barres mises en évidence. La leçon suivante porte sur les trois couleurs qu’elles n’emploient délibérément pas, et sur ce que dépenser celles-ci pour des districts coûte sans possibilité de rachat.

Animer cette leçon

La leçon en diaporama, la prose étant reléguée dans les notes du présentateur plutôt que projetée. Produit à partir de cette page, dont il ne peut donc pas s'écarter.

Lancer le diaporamaLire les diapositives

Le PDF ne requiert aucun logiciel et se projette depuis n'importe quel poste. Le fichier PowerPoint est fait pour être modifié : appliquez la charte de votre organisation, retirez une section pour une séance plus courte, ou fusionnez deux leçons en atelier.