cassionAnalyse de données

Retour à la leçonLeçon 4 sur 8La fiche de référence

Le débat sur le dénominateur, et les découpages que vous promettez

Le même diaporama que les téléchargements, rendu sous forme de page. Lancez le diaporama pour le présenter en plein écran — les flèches ou un clic avancent d'une diapositive, Échap quitte.

Diapositives · PDFDiapositives · PowerPoint

  1. Diapositive 1 / 17

    Ce que couvre cette leçon

    • Toute dispute sur un chiffre est une dispute sur le dénominateur
    • Trois dénominateurs, un registre
    • La règle
    • Dites ce qu'il exclut, dans la fiche
    • La désagrégation est une promesse sur la taille d'échantillon
    • Fixez un effectif minimal, dans la fiche, à l'avance
    • Quels découpages changent réellement une décision
    • La suite
    Notes du présentateur
    Trois dénominateurs pour un numérateur, la règle qui tranche entre eux, et la désagrégation qui fait passer de vingt-quatre cellules à quarante-huit, dont trois trop petites pour être publiées.
  2. Diapositive 2 / 17

    Toute dispute sur un chiffre est une dispute sur le dénominateur

    • Le numérateur se règle d'ordinaire en une minute.
    Notes du présentateur
    Le numérateur se règle d'ordinaire en une minute. Quelqu'un a compté les enfants avec un PB sous 125 mm et a trouvé 362, et personne ne le conteste. Ce qui suit est une heure sur ce par quoi diviser, et cette heure a lieu parce que tous les candidats sont défendables.
  3. Diapositive 3 / 17

    Trois dénominateurs, un registre — En Python

    measured = muac["muac_mm"].notna()
    assessed = measured | muac["oedema"].notna()
    cases = (muac["muac_mm"] < 125) | (muac["oedema"] == True)
    
    for label, mask in [("all screened", pd.Series(True, index=muac.index)),
                        ("with a measurement", measured),
                        ("assessed either way", assessed)]:
        print(f"{label:22} n={mask.sum():5}  GAM={cases.sum() / mask.sum():.2%}")
  4. Diapositive 4 / 17

    Trois dénominateurs, un registre — En R

    muac |>
      summarise(
        all_screened = n(),
        measured     = sum(!is.na(muac_mm)),
        assessed     = sum(!is.na(muac_mm) | !is.na(oedema)),
        cases        = sum(muac_mm < 125 | oedema, na.rm = TRUE)
      ) |>
      mutate(across(c(all_screened, measured, assessed), ~ cases / .x, .names = "gam_{.col}"))
  5. Diapositive 5 / 17

    Trois dénominateurs, un registre

    DénominateurnMAG
    Tous ceux qui sont venus4 2188,58 %
    Enfants avec une mesure de PB4 1468,73 %
    Enfants évalués par mesure ou œdème4 2168,59 %
    Notes du présentateur
    Trois nombres, séparés de 0,15 point, et les trois circulent dans de vrais rapports. L'écart est faible ici, et c'est précisément pourquoi la leçon vaut d'être apprise sur ce fichier plutôt que sur un autre où la réponse serait évidente. Le premier dénominateur est faux, et il l'est d'une manière qui ne se voit pas comme un grand écart. Diviser par tous ceux qui sont venus traite les 72 enfants non mesurés comme s'ils avaient été mesurés et trouvés bien nourris. C'est une affirmation sur des enfants que personne n'a regardés.
  6. Diapositive 6 / 17

    La règle

    Le dénominateur est la population qui était réellement susceptible de figurer au numérateur, sur la même période, au même endroit.
  7. Diapositive 7 / 17

    La règle

    • Couverture. Pas tout le district — la tranche d'âge cible du bassin, sur la période.
    • Taux de guérison. Pas tous les admis — ceux ayant atteint une issue. Les enfants encore en traitement à la date…
    • Aboutissement des référencements. Pas tous les cas — les cas ayant consenti à être référés, ce que le jeu de…
    • Assiduité. Pas les enfants inscrits multipliés par tous les jours de classe — les enfants inscrits multipliés par…
    Notes du présentateur
    Appliquez-la et la réponse tombe. Un enfant sans mesure et sans évaluation d'œdème ne pouvait pas entrer au numérateur quel que soit son état nutritionnel, il n'a donc pas sa place au dénominateur. La deuxième ligne est la défendable, et la troisième l'est si vous considérez qu'une évaluation d'œdème suffit. La même règle tranche la plupart des disputes que vous aurez.
  8. Diapositive 8 / 17

    Dites ce qu'il exclut, dans la fiche — Exemple

    Denominator   Children with a MUAC measurement recorded (n = 4,146 of 4,218).
    Excludes      72 children (1.7%) screened but not measured, coded -99. Their
                  nutritional status is unknown; if they were systematically the
                  most distressed children, GAM is understated. Not testable from
                  this register.
    Notes du présentateur
    Quel que soit votre choix, l'exclusion est une affirmation et elle s'écrit. Cette dernière phrase est ce qui rend le chiffre défendable. Vous avez nommé un sens de biais possible et dit que vous ne pouvez pas le trancher, ce qui est une position plus solide que n'importe quel chiffre présenté sans cela.
  9. Diapositive 9 / 17

    La désagrégation est une promesse sur la taille d'échantillon — En Python

    banded = muac[muac["age_months"].notna()].assign(
        band=lambda d: (d["age_months"] >= 24).map({True: "24-59", False: "6-23"})
    )
    
    by_two = banded.groupby(["commune", "band"]).size()
    by_three = banded.groupby(["commune", "band", "sex"]).size()
    
    print(f"commune x band:       {len(by_two)} cells, smallest {by_two.min()}")
    print(f"commune x band x sex: {len(by_three)} cells, smallest {by_three.min()}, "
          f"{(by_three < 30).sum()} below 30")
    Notes du présentateur
    Un cadre logique qui dit « désagrégé par sexe, âge et district » s'est engagé à produire des cellules, et les cellules ont des effectifs.
  10. Diapositive 10 / 17

    La désagrégation est une promesse sur la taille d'échantillon — En R

    banded <- muac |>
      filter(!is.na(age_months)) |>
      mutate(band = if_else(age_months >= 24, "24-59", "6-23"))
    
    banded |> count(commune, band) |> summarise(cells = n(), smallest = min(n))
    banded |> count(commune, band, sex) |> summarise(cells = n(), smallest = min(n),
                                                     under_30 = sum(n < 30))
  11. Diapositive 11 / 17

    La désagrégation est une promesse sur la taille d'échantillon

    DésagrégationCellulesPlus petiteCellules sous 30
    Commune × tranche d'âge24490
    Commune × tranche d'âge × sexe48163
  12. Diapositive 12 / 17

    La désagrégation est une promesse sur la taille d'échantillon

    • Ajouter un seul découpage binaire double les cellules et divise leur taille par deux — Passer de deux à trois…
    Notes du présentateur
    Ajouter un seul découpage binaire double les cellules et divise leur taille par deux. Passer de deux à trois dimensions fait tomber la plus petite cellule de 49 enfants à 16, et place trois cellules sous tout seuil de publication raisonnable. Une prévalence calculée sur 16 enfants bouge de six points de pourcentage quand un enfant change de catégorie. La publier dans un tableau à côté d'un chiffre communal calculé sur 400 invite le lecteur à les comparer comme s'il s'agissait du même type de nombre.
  13. Diapositive 13 / 17

    Fixez un effectif minimal, dans la fiche, à l'avance — En Python

    MIN_CELL = 30
    
    table = (
        banded.assign(case=cases)
        .groupby(["commune", "band", "sex"])
        .agg(n=("case", "size"), cases=("case", "sum"))
    )
    table["rate"] = (table["cases"] / table["n"]).where(table["n"] >= MIN_CELL)
    table["note"] = table["n"].lt(MIN_CELL).map({True: "suppressed: n < 30", False: ""})
  14. Diapositive 14 / 17

    Fixez un effectif minimal, dans la fiche, à l'avance — En R

    MIN_CELL <- 30
    
    table <- banded |>
      summarise(n = n(), cases = sum(case), .by = c(commune, band, sex)) |>
      mutate(rate = if_else(n >= MIN_CELL, cases / n, NA_real_),
             note = if_else(n < MIN_CELL, "suppressed: n < 30", ""))
    Notes du présentateur
    Deux propriétés comptent. L'effectif n reste visible même là où le taux est supprimé, si bien qu'un lecteur voit que la cellule existe et pourquoi elle est vide. Et le seuil a été fixé avant que les chiffres soient vus, même discipline que celle appliquée aux bandes de tolérance par le cours d'évaluation. Dans les données de protection et de VBG, cela cesse d'être une élégance statistique pour devenir un contrôle de divulgation, que le cours Données de protection et VBG traite comme il se doit. L'habitude est la même et il vaut mieux l'avoir avant d'en avoir besoin.
  15. Diapositive 15 / 17

    Quels découpages changent réellement une décision

    • Sexe — oui, presque toujours. Cela change le ciblage, les effectifs et les messages.
    • Tranche d'âge — oui en nutrition, où les critères d'admission diffèrent selon l'âge.
    • District — oui, cela déplace des ressources.
    • Type de formation — parfois ; cela change la supervision, ce qui est réel.
    • Mois — d'ordinaire une tendance et non une désagrégation, et moins chère en graphique.
    Notes du présentateur
    Dernière question, et elle est budgétaire autant qu'analytique. Chaque désagrégation promise doit être collectée, nettoyée, calculée et vérifiée, et la plupart des cadres logiques en promettent plus que personne n'en utilise. Demandez de chaque découpage — le programme ferait-il quelque chose de différent si ce découpage montrait un écart ? Un découpage qui ne changerait rien est un coût de rapportage assorti d'un risque de qualité, car chaque champ obligatoire supplémentaire est un champ de plus qui arrivera vide.
  16. Diapositive 16 / 17

    La suite

    • Vous savez désormais définir un indicateur avec précision.
    Notes du présentateur
    Vous savez désormais définir un indicateur avec précision. L'unité suivante porte sur la famille d'indicateurs qui comptent des personnes, où le problème de définition est différent — la même personne apparaissant dans douze rapports mensuels, et ce qui se passe quand quelqu'un additionne ces rapports.
  17. Diapositive 17 / 17

    La suite

    Lire la leçon complète, avec le code exécutable Retour à la leçon