cassionAnalyse de données

Leçon 2 sur 8

Unité · Regardez-la d'abord

Une proportion de zéro avec un intervalle jusqu'à 24 %

Douze enfants, aucun en retard d'âge. L'intervalle du manuel dit 0 % à 0 %. Le bon dit 0 % à 24,3 %, et l'écart entre ces deux réponses décide si vous agiriez sur cette cellule.

PythonR180 minEnquête SMARTEnquête démographique et de santé (EDS)Définitions d'indicateurs de l'UNICEF

Pourquoi une estimation ponctuelle n’est pas un résultat

Chaque proportion du module 4 a été calculée sur un échantillon — de ménages, de cas, d’élèves. Un autre échantillon de la même population aurait produit un nombre différent, et un intervalle de confiance dit de combien.

import pandas as pd
import numpy as np

wash = pd.read_csv("wash-household-survey-2024.v1.csv")
open_defecation = wash["sanitation_facility"].eq("open-defecation")
k, n = open_defecation.sum(), len(wash)
print(f"{k}/{n} = {k / n:.1%}")
library(dplyr)
wash |> summarise(k = sum(sanitation_facility == "open-defecation"), n = n())

319 sur 2 403 — 13,3 %. L’intervalle là-dessus est étroit, parce que l’échantillon est grand. Sur des cellules plus petites il ne l’est pas, et tout l’intérêt de le calculer est qu’on ne peut pas savoir dans quel cas on se trouve en regardant le pourcentage.

Wilson, non Wald

La formule que la plupart des gens apprennent est l’intervalle de Wald : p ± 1,96 × sqrt(p(1-p)/n). Elle est simple, c’est celle qu’un manuel montre en premier, et elle échoue précisément là où vous en avez besoin.

def wald(k, n, z=1.96):
    p = k / n
    se = np.sqrt(p * (1 - p) / n)
    return p - z * se, p + z * se

def wilson(k, n, z=1.96):
    p = k / n
    denom = 1 + z**2 / n
    centre = (p + z**2 / (2 * n)) / denom
    half = z * np.sqrt(p * (1 - p) / n + z**2 / (4 * n**2)) / denom
    return centre - half, centre + half

for k, n in [(0, 12), (1, 20), (3, 11)]:
    print(f"{k}/{n} = {k/n:.1%}")
    print(f"   Wald   [{wald(k, n)[0]:.1%}, {wald(k, n)[1]:.1%}]")
    print(f"   Wilson [{wilson(k, n)[0]:.1%}, {wilson(k, n)[1]:.1%}]")
# R has this built in and it is the Wilson interval by default.
prop.test(0, 12)$conf.int
binom.test(1, 20)$conf.int
Cellule Wald Wilson
0 sur 12 [0,0 %, 0,0 %] [0,0 %, 24,3 %]
1 sur 20 [−4,6 %, 14,6 %] [0,9 %, 23,6 %]
3 sur 11 [1,0 %, 53,6 %] [9,7 %, 56,6 %]

Wald affirme qu’une cellule sans événement n’a aucune incertitude, et il produit des probabilités négatives. Les deux sont absurdes et les deux apparaissent dans de vrais rapports, parce que c’est la formule dont on se souvient.

Employez Wilson, ou prop.test en R et statsmodels.stats.proportion.proportion_confint(method="wilson") en Python. Cela ne coûte rien et cela ne casse pas aux bornes.

Lisez la largeur, pas seulement les bornes

cases = [
    ("Open defecation", 319, 2403),
    ("Cholera case fatality", 38, 974),
    ("Cholera CFR, Nord district", 24, 381),
    ("Referral completion, disability reported", 54, 202),
    ("Over-age, grade 6", 67, 132),
]
for name, k, n in cases:
    lo, hi = wilson(k, n)
    print(f"{name:42} {k/n:6.1%}  [{lo:.1%}, {hi:.1%}]  width {hi-lo:.1%}")
# Same five, and the width is the column to read.
Estimation Valeur Intervalle à 95 % Largeur
Défécation à l’air libre 13,3 % 12,0–14,7 % 2,7 pts
Létalité du choléra 3,9 % 2,9–5,3 % 2,5 pts
Létalité, district Nord 6,3 % 4,3–9,2 % 4,9 pts
Aboutissement, handicap signalé 26,7 % 21,1–33,2 % 12,1 pts
Retard d’âge, sixième année 50,8 % 42,3–59,1 % 16,8 pts

Le retard d’âge en sixième vaut 50,8 % et pourrait se situer entre 42 % et 59 %. Le cours d’éducation a rapporté ce nombre à une décimale près. La décimale n’est pas fausse, elle est simplement sans objet — le second chiffre de 50,8 ne porte aucune information à n=132.

Deux choses gouvernent la largeur et une seule dépend de vous. La taille d’échantillon, décidée par le plan ; et la proximité de la proportion à 50 %, décidée par le monde. Une proportion proche de 50 % a l’intervalle le plus large possible, et les 6,3 % de Nord sont plus serrés que les 50,8 % de sixième malgré un n plus grand.

L’écrire dans une phrase

C’est ce sur quoi porte l’ossature de ce cours, et c’est un problème de rédaction autant que de statistique.

Pas ceci : « 50,8 % des élèves de sixième sont en retard d’âge. »

Ni ceci : « 50,8 % (IC à 95 % 42,3–59,1) des élèves de sixième sont en retard d’âge. » Correct, et un lecteur saute la parenthèse.

Ceci : « Entre quatre et six élèves de sixième sur dix sont en retard d’âge (50,8 %, IC à 95 % 42,3–59,1, n=132). »

Mettez l’intervalle en mots d’abord, puis donnez les nombres. Les mots sont ce que lit un non-analyste et ils portent l’incertitude ; les nombres sont ce que vérifie un analyste.

def sentence(label, k, n):
    lo, hi = wilson(k, n)
    return (f"{label}: {k/n:.1%} (95% CI {lo:.1%} to {hi:.1%}, n={n})")

print(sentence("Grade 6 over-age", 67, 132))
# Generate the string in code so the number and its interval cannot drift apart.

Quand l’intervalle change la décision

Le test de l’utilité d’un intervalle est de savoir si une valeur quelconque qu’il contient mènerait ailleurs.

lo, hi = wilson(38, 974)
threshold = 0.01                      # Sphere: cholera CFR below 1%
print(f"CFR {38/974:.1%}, interval [{lo:.1%}, {hi:.1%}]")
print(f"entire interval above the {threshold:.0%} threshold: {lo > threshold}")
prop.test(38, 974)$conf.int

La létalité du choléra vaut 3,9 % avec un intervalle de 2,9 % à 5,3 %, et le seuil Sphère vaut 1 %. Toute valeur de l’intervalle est au-dessus du seuil, si bien que la conclusion — cette réponse échoue au standard — ne dépend pas de l’endroit où se situe la vérité dans l’intervalle.

C’est là qu’on peut agir sur une estimation ponctuelle : quand tout l’intervalle dit la même chose. Là où il enjambe le seuil, le rapport honnête dit que les données ne tranchent pas, et la leçon suivante porte sur un écart où c’est exactement ce qui se produit.

Trois intervalles que ce cours ne calculera pas ainsi

Une proportion issue d’un échantillon en grappes. Le cours sur les enquêtes a établi qu’un plan en grappes élargit l’intervalle du facteur d’effet de plan, et la formule ci-dessus suppose un tirage aléatoire simple. L’appliquer à des données en grappes sous-estime la largeur, parfois d’un facteur deux.

Une médiane ou une moyenne asymétrique. Les intervalles présentés ici sont pour des proportions. Une médiane exige un bootstrap ou une méthode de rangs, et une moyenne sur la distribution d’E. coli de la leçon 1 n’a besoin ni de l’un ni de l’autre — elle a besoin d’un autre résumé.

Un effectif sans dénominateur. « 142 cas ont été signalés » n’a pas d’intervalle, car ce n’est l’estimation de rien. C’est un décompte de ce qui a été enregistré, et le cours de protection a consacré une leçon à pourquoi.

Rapportez-le comme une fourchette

Over-age enrolment, grade 6

  50.8%   95% CI 42.3 to 59.1, n = 132

  Between four and six students in ten. The interval is wide because grade 6
  holds 132 students; a difference of five points against another grade would
  not be distinguishable at this sample size.

La dernière phrase est la plus utile. Elle dit d’avance au lecteur quelles comparaisons ce nombre peut porter, ce qui l’empêche de faire celle qu’il ne peut pas.

La suite

Un intervalle dit à quel point un nombre est incertain. La leçon suivante place deux nombres côte à côte et demande si l’écart entre eux est réel — sur deux écarts laissés ouverts par le module 4, dont les réponses sont opposées.

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.