Leçon 5 sur 8
Unité · Comparer des lieux
Trois couvertures qui divergent
Couverture administrative, couverture par enquête, et abandon entre doses. La première dépend d'une projection, la deuxième d'un échantillon, et seule la troisième échappe aux deux.
Trois façons de mesurer la même chose
La couverture vaccinale est l’indicateur sanitaire le plus rapporté de ce secteur et il se produit de trois façons différentes, qui divergent régulièrement.
| Méthode | Numérateur | Dénominateur | Échoue quand |
|---|---|---|---|
| Administrative | Doses enregistrées par les formations | Projection de population | La projection est fausse, ou le rapportage incomplet |
| Par enquête | Enfants avec carte ou dose rappelée | Enfants échantillonnés | Les cartes sont perdues ; le rappel est mauvais ; l’échantillon est petit |
| Abandon | Première dose moins dernière dose | Première dose | Rarement — et c’est tout l’intérêt |
Le cours DHIS2 a calculé la première. Le cours sur les enquêtes vous a donné la machinerie de la deuxième. Cette leçon dit pourquoi elles diffèrent et laquelle employer.
La couverture administrative et ses deux dépendances
import pandas as pd
vax = pd.read_csv("vaccination-coverage-2024.v1.csv", parse_dates=["period"])
reported = vax[vax["report_submitted"] == True]
penta3 = reported[reported["antigen"] == "penta3"]
annual_target = (
vax[vax["antigen"] == "penta3"].groupby("facility_id")["target_population"].first()
)
months = penta3.groupby("facility_id").size()
prorated = (annual_target * months.reindex(annual_target.index).fillna(0) / 12).sum()
print(f"doses {penta3['doses_administered'].sum():,}")
print(f"administrative coverage: "
f"{penta3['doses_administered'].sum() / prorated:.1%}")
library(dplyr)
# same shape: doses over a denominator pro-rated to months reported
77,5 %, parmi les couples formation-mois ayant rapporté. Ce chiffre porte deux dépendances, et le cours DHIS2 a établi les deux.
Le dénominateur est une projection. Les nourrissons survivants, issus d’une projection de recensement composée à un taux de croissance supposé. Neuf ans à 2,4 % font un facteur de 1,24, si bien qu’un quart du dénominateur est une hypothèse.
Le taux de rapportage valait 76,5 %. Les formations n’ayant pas rapporté n’apportent aucune dose, si bien que le chiffre est une borne inférieure à moins d’imputer leurs doses.
Une couverture administrative supérieure à 100 % est fréquente et signifie toujours que l’une de ces deux choses est fausse, plus une troisième possibilité — des enfants vaccinés hors de leur bassin, ce qui gonfle un numérateur de formation face à un dénominateur de bassin.
La couverture par enquête et ses deux dépendances
Une enquête de couverture échantillonne des enfants d’un âge donné et demande s’ils ont été vaccinés, en vérifiant sur la carte lorsqu’il y en a une.
Elle supprime le problème de projection — le dénominateur est l’échantillon — et en introduit deux autres.
La conservation des cartes. Là où les cartes sont perdues, la couverture repose sur le souvenir de l’accompagnant, qui surestime pour certains antigènes et sous-estime pour d’autres. Rapportez séparément la couverture vérifiée par carte et celle fondée sur le rappel ; l’écart entre les deux mesure à quel point l’estimation dépend de la mémoire.
La précision. La couverture par enquête arrive avec un intervalle de confiance, et le cours sur les enquêtes a montré qu’un plan en grappes l’élargit. Une enquête qui estime la couverture à plus ou moins six points ne peut pas trancher si un district a franchi une cible de 80 %.
# From the survey course: a proportion with a design-adjusted interval
def coverage_interval(p, n, deff, t=1.99):
se = (p * (1 - p) / n * deff) ** 0.5
return p - t * se, p + t * se
print(coverage_interval(0.775, 900, 2.0))
coverage_interval <- function(p, n, deff, t = 1.99) {
se <- sqrt(p * (1 - p) / n * deff)
c(p - t * se, p + t * se)
}
Pourquoi elles divergent
Cinq raisons, et savoir laquelle s’applique change ce que vous faites.
- La projection est fausse. La plus fréquente, et elle ne déplace que la couverture administrative. Un dénominateur trop petit pousse l’administrative au-dessus de l’enquête.
- Le rapportage est incomplet. Fait baisser l’administrative.
- La traversée des bassins. Déplace les chiffres administratifs par formation dans les deux sens et s’annule au niveau du district.
- L’erreur de rappel. Déplace la couverture par enquête, généralement vers le haut.
- Des cohortes d’âge différentes. La couverture administrative compte les doses données cette année ; une enquête compte les enfants de 12 à 23 mois vaccinés à n’importe quel moment. Ce ne sont pas les mêmes enfants.
La dernière est la plus fréquente et la moins soupçonnée. Deux chiffres de « couverture penta3 » portant sur des cohortes différentes ne sont pas deux estimations d’une quantité ; ce sont deux quantités.
L’abandon — le chiffre qui survit à tout cela
doses = reported.groupby("antigen")["doses_administered"].sum()
for start, end in [("penta1", "penta3"), ("mcv1", "mcv2")]:
dropout = (doses[start] - doses[end]) / doses[start]
print(f"{start} -> {end}: {dropout:.1%}")
vax |> filter(report_submitted) |>
summarise(doses = sum(doses_administered), .by = antigen)
Penta1 vers penta3 : 13,8 %. Première vers seconde dose de rougeole : 22,9 %.
L’abandon est un rapport de deux numérateurs de même source, mêmes formations et mêmes mois. Il a donc :
- aucun dénominateur de population, donc aucune projection à se tromper ;
- le même biais de rapportage dans les deux termes, qui s’annule largement ;
- aucune ambiguïté de cohorte, puisque les deux doses sont comptées pareillement.
Le coût est qu’il ne dit rien du niveau. Un district pourrait avoir 13,8 % d’abandon et 30 % de couverture — bon à retenir les enfants qu’il commence, mauvais à les commencer. Rapportez l’abandon à côté de la couverture, jamais à sa place.
Ce que les deux abandons disent ensemble
L’abandon de la seconde dose de rougeole vaut 22,9 % contre 13,8 % pour le pentavalent, et la différence est instructive plutôt que du bruit.
Les doses de pentavalent se donnent rapprochées dans les premiers mois de vie, quand les accompagnants viennent déjà pour d’autres services. La seconde dose de rougeole se donne bien plus tard, souvent après la fin de la période de contacts intensifs. Un abandon qui croît avec l’intervalle entre doses est un problème de rappel et de proximité, non d’approvisionnement, et les actions correctives diffèrent.
summary = pd.DataFrame({
"series": ["Pentavalent 1->3", "Measles 1->2"],
"dropout": [0.138, 0.229],
"interval": ["weeks", "months"],
"implication": ["retention within the early contact period",
"retention after the early contact period ends"],
})
tibble::tribble(
~series, ~dropout, ~implication,
"Pentavalent 1->3", 0.138, "retention within early contacts",
"Measles 1->2", 0.229, "retention after early contacts end"
)
Laquelle rapporter
Penta3 coverage, administrative 77.5% among reporting facility-months
(reporting rate 76.5%)
denominator: MoH projection from 2015 census
Penta1 to penta3 dropout 13.8% same source, both terms
Measles 1 to 2 dropout 22.9%
Survey coverage not available this year
Quatre lignes, et la dernière est un constat. Là où aucune enquête n’existe, dites-le — car le lecteur suppose par défaut qu’un chiffre de couverture a été validé face à une enquête, et ici il ne l’a pas été.
La suite
La couverture compare un programme à une population. La leçon suivante compare deux populations entre elles, et découvre que la comparaison de la leçon 4 était en partie un artefact de qui habite où.