Retour à la leçon·Leçon 4 sur 8·Qui est un cas
Là où les deux critères divergent
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.
Ce que couvre cette leçon
- La question à laquelle le registre peut répondre
- Calculez les deux sur les mêmes enfants
- Le tableau croisé
- Le désaccord, c'est l'âge
- Lequel a raison ?
- Ce que cela implique pour vos chiffres
- Rapportez toujours la paire
- La suite
Notes du présentateur
468 enfants sévères selon le seul poids-pour-taille, 24 selon le seul PB, 142 selon les deux. Une concordance de 22,4 %, et tout le désaccord tient à l'âge — 31,4 mois contre 14,3.La question à laquelle le registre peut répondre
- Les deux critères d'admission figurent dans les définitions de cas et les deux s'emploient sur le terrain.
Notes du présentateur
Les deux critères d'admission figurent dans les définitions de cas et les deux s'emploient sur le terrain. Savoir s'ils trouvent les mêmes enfants est une question empirique, et elle exige un registre portant les deux mesures sur le même enfant. Le registre d'admissions PCIMA a exactement cela — PB et poids-pour-taille à l'admission, pour 1 100 épisodes. Cette leçon est ce qu'il dit.Calculez les deux sur les mêmes enfants — En Python
import pandas as pd cmam = pd.read_csv("cmam-admissions-2024.v1.csv") cmam["whz"] = cmam.apply(whz, axis=1) # from lesson 2 both = cmam[cmam["whz"].notna()].copy() print(f"{len(both)} of {len(cmam)} admissions have both measurements") both["sam_whz"] = both["whz"] < -3 both["sam_muac"] = both["muac_admission_mm"] < 115Calculez les deux sur les mêmes enfants — En R
both <- cmam |> filter(!is.na(whz)) both <- both |> mutate(sam_whz = whz < -3, sam_muac = muac_admission_mm < 115)Notes du présentateur
1 028 sur 1 100. Les 72 sans taille sont le défaut de taille manquante des défauts connus du jeu de données, et c'est le premier constat — les deux critères n'ont pas le même dénominateur, même sur un registre unique, car l'un exige deux mesures et l'autre une seule.Le tableau croisé — En Python
table = pd.crosstab(both["sam_muac"], both["sam_whz"], rownames=["SAM by MUAC"], colnames=["SAM by WHZ"]) print(table)Le tableau croisé
Non sévère par WHZ Sévère par WHZ Non sévère par PB 394 468 Sévère par PB 24 142 Le tableau croisé — En Python
overlap = table.loc[True, True] union = table.values.sum() - table.loc[False, False] print(f"concordance {overlap / union:.1%} of {union} severe by either measure")Notes du présentateur
Lisez les deux cellules en gras. 468 enfants sont sévères par le poids-pour-taille et pas par le PB. 24 le sont par le PB et pas par le poids-pour-taille. 142 le sont par les deux.Le tableau croisé — En R
both |> summarise(overlap = sum(sam_muac & sam_whz), union = sum(sam_muac | sam_whz)) |> mutate(concordance = overlap / union)Le tableau croisé
- 22,4 % — Des enfants que ce registre qualifierait de sévères selon l'une ou l'autre mesure, moins d'un quart le sont…
Notes du présentateur
22,4 %. Des enfants que ce registre qualifierait de sévères selon l'une ou l'autre mesure, moins d'un quart le sont selon les deux. Ce nombre n'est pas un artefact de ce jeu de données. Les comparaisons publiées trouvent des recouvrements de 10 % à 40 % selon la population, et un programme qui n'a pas mesuré le sien en suppose un.Le désaccord, c'est l'âge — En Python
mean_age = pd.Series({ "MUAC only": both.loc[both["sam_muac"] & ~both["sam_whz"], "age_months"].mean(), "WHZ only": both.loc[both["sam_whz"] & ~both["sam_muac"], "age_months"].mean(), "Both": both.loc[both["sam_muac"] & both["sam_whz"], "age_months"].mean(), }) print(mean_age.round(1))Le désaccord, c'est l'âge — En R
both |> mutate(group = case_when(sam_muac & sam_whz ~ "both", sam_muac ~ "muac only", sam_whz ~ "whz only", TRUE ~ "neither")) |> summarise(mean_age = mean(age_months), n = n(), .by = group)Le désaccord, c'est l'âge
Groupe Âge moyen Sévère par le seul PB 14,3 mois Sévère par les deux 15,6 mois Sévère par le seul poids-pour-taille 31,4 mois Le désaccord, c'est l'âge — En Python
by_age = both.assign( band=pd.cut(both["age_months"], [5, 12, 24, 36, 60], labels=["6-11", "12-23", "24-35", "36-59"]) ).groupby("band")[["sam_muac", "sam_whz"]].mean() print((by_age * 100).round(1))Notes du présentateur
Voilà. Les enfants que le PB trouve et que le poids-pour-taille manque ont la moitié de l'âge de ceux que le poids-pour-taille trouve et que le PB manque. Le mécanisme est simple et ce n'est un défaut d'aucune des deux mesures. Le PB croît avec l'âge : un bras en bonne santé mesure environ 135 mm à six mois et environ 155 mm à cinq ans. Un seuil fixe de 115 mm représente donc un déficit bien plus profond pour un enfant de cinq ans que pour un nourrisson, si bien que le PB devient progressivement plus difficile à franchir à mesure que l'enfant grandit. Le poids-pour-taille n'a aucun terme d'âge et s'applique également sur toute la plage.Le désaccord, c'est l'âge — En R
both |> mutate(band = cut(age_months, c(5, 12, 24, 36, 60), labels = c("6-11", "12-23", "24-35", "36-59"))) |> summarise(across(c(sam_muac, sam_whz), mean), .by = band)Notes du présentateur
Exécutez-le et les deux courbes se croisent. Le PB identifie davantage les plus jeunes ; le poids-pour-taille davantage les plus âgés. Un programme admettant sur le seul PB fait tourner une charge de cas plus jeune qu'un programme admettant sur le seul poids-pour-taille, et c'est un fait clinique sur qui est traité, non un détail de mesure.Lequel a raison ?
- Le PB prédit la mortalité au moins aussi bien, et mieux dans plusieurs études. Si le but de l'admission est de…
- Le poids-pour-taille est le standard des enquêtes, et les seuils IPC comme les comparaisons internationales…
- Le PB est opérationnellement praticable au niveau communautaire. Le poids-pour-taille ne l'est pas.
Notes du présentateur
Aucun, et la question est la mauvaise. Ce à quoi chacun sert diffère. La réponse du secteur est d'employer les deux, d'admettre sur l'un ou l'autre, et de décharger sur celui qui a servi à l'admission. Ce qui est cliniquement sensé et crée le problème analytique pour lequel cette leçon existe.Ce que cela implique pour vos chiffres
- La charge de cas dépend du critère — Admettre sur l'un ou l'autre donne ici une charge de 634 enfants sévères ; sur le…
- Ce ne sont pas des estimations de la même quantité.
- La prévalence n'est pas comparable entre mesures — Une MAG par le PB et une MAG par le poids-pour-taille sont deux…
- La sortie doit employer le critère d'admission — Un enfant admis sur le PB et déchargé sur le poids-pour-taille peut…
- Un programme qui change de critère casse sa propre série — Une charge de cas qui monte de 40 % au changement de…
Notes du présentateur
Quatre conséquences, et chacune est une question qui vous sera posée. La charge de cas dépend du critère. Admettre sur l'un ou l'autre donne ici une charge de 634 enfants sévères ; sur le seul PB, 166 ; sur le seul poids-pour-taille, La prévalence n'est pas comparable entre mesures. Une MAG par le PB et une MAG par le poids-pour-taille sont deux indicateurs différents. La leçon 6 montre ce que cela produit quand un chiffre est lu face au seuil de 15 %. La sortie doit employer le critère d'admission. Un enfant admis sur le PB et déchargé sur le poids-pour-taille peut sortir avant guérison, ou être gardé bien après. Le protocole PCIMA est explicite et les registres, régulièrement, ne le sont pas. Un programme qui change de critère casse sa propre série. Une charge de cas qui monte de 40 % au changement de protocole est une rupture de définition, et la règle du cours sur la conception d'indicateurs à propos du versionnement s'applique exactement.Ce que cela implique pour vos chiffres — En Python
for name, mask in [("either", both["sam_muac"] | both["sam_whz"]), ("muac only", both["sam_muac"]), ("whz only", both["sam_whz"])]: print(f"{name:10} caseload {mask.sum():>4}")Ce que cela implique pour vos chiffres — En R
both |> summarise(either = sum(sam_muac | sam_whz), muac = sum(sam_muac), whz = sum(sam_whz))Rapportez toujours la paire — Exemple
Severe acute malnutrition, admissions 2024, n = 1,028 with both measurements By MUAC (<115 mm) 166 By weight-for-height (z < -3) 610 By either 634 By both 142 (22.4% of those severe by either) Children severe by MUAC alone average 14.3 months; by weight-for-height alone, 31.4 months. The two criteria identify overlapping but substantially different caseloads, and the difference is age.Notes du présentateur
Six lignes. Elles devancent la question, nomment le mécanisme, et empêchent quelqu'un de comparer une charge fondée sur le PB à une charge fondée sur le poids-pour-taille comme si l'écart était une évolution nutritionnelle.La suite
- Vous savez classer des enfants et vous savez de quoi la classification dépend.
Notes du présentateur
Vous savez classer des enfants et vous savez de quoi la classification dépend. L'unité suivante se demande si l'enquête ayant produit les mesures est croyable — le rapport de plausibilité SMART, où l'écart-type de 1,22 de la leçon 2 est enfin lu.