cassionAnalyse de données

Retour à la leçonLeçon 5 sur 8Faire coïncider les pièces

Rattacher un dénominateur de population

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 / 21

    Ce que couvre cette leçon

    • Le numérateur est la moitié facile
    • D'où vient réellement un dénominateur
    • Joignez sur le code, jamais sur le nom
    • La projection, et l'année que personne n'énonce
    • Les bassins de desserte ne s'additionnent pas
    • Une couverture supérieure à 100 %
    • Taux pour mille, et le piège de l'annualisation
    • Écrivez le dénominateur
    • La suite
    Notes du présentateur
    D'où vient un dénominateur, comment le joindre sans apparier sur un nom, et pourquoi les populations de bassins de desserte ne totalisent pas un district. Plus le taux de couverture au-dessus de 100 % et ce qu'il dit réellement.
  2. Diapositive 2 / 21

    Le numérateur est la moitié facile

    • Compter ce qu'a fait votre programme relève de la comptabilité.
    Notes du présentateur
    Compter ce qu'a fait votre programme relève de la comptabilité. Décider par quoi le diviser relève de l'analyse, et c'est là qu'un taux de couverture se gagne ou se perd. L'extraction vaccinale rend la chose concrète — elle livre target_population dans le fichier, un chiffre par formation sanitaire, constant sur les douze mois. C'est commode et c'est aussi l'estimation de quelqu'un, faite à un moment donné, par une méthode donnée, et toute cette leçon consiste à ne pas la prendre pour un fait au seul motif qu'elle est arrivée dans une colonne.
  3. Diapositive 3 / 21

    D'où vient réellement un dénominateur

    • Une projection de recensement. L'institut national de statistique publie un recensement et un taux de croissance ;…
    • Une base administrative de population. Les dénominateurs du ministère de la santé par bassin de desserte, ce qu'est…
    • Une cible de programme. Le nombre de personnes que le programme prévoyait d'atteindre. Dénominateur légitime pour «…
    • Une enquête. La plus défendable et la moins disponible, car une enquête donne une proportion avec un intervalle de…
    • Nommez la source dans la colonne — target_population_moh_2024 et target_population_census_projection sont deux…
    Notes du présentateur
    Quatre sources, à peu près par ordre décroissant de fréquence des disputes. Nommez la source dans la colonne. target_population_moh_2024 et target_population_census_projection sont deux nombres différents, et dès que deux d'entre eux se trouvent dans le même dossier sans libellé, quelqu'un en fera la moyenne.
  4. Diapositive 4 / 21

    Joignez sur le code, jamais sur le nom — En Python

    population = pd.read_csv("admin-population-2024.csv")   # admin2_pcode, year, pop_total, pop_under1
    
    vax["admin2_pcode"] = vax["admin2_pcode"].astype("string").str.strip().str.upper()
    
    with_denominator = vax.merge(
        population.query("year == 2024"),
        on="admin2_pcode", how="left", validate="many_to_one",
    )
    
    missing = with_denominator["pop_under1"].isna().sum()
    assert missing == 0, f"{missing} rows have no population figure"
    Notes du présentateur
    Le cours de nettoyage a défendu cet argument à propos des noms de lieux. Il vaut d'être répété ici parce qu'une base de population est l'endroit où une jointure sur nom fait le plus de dégâts : le dénominateur est la seule colonne où un appariement raté ne ressemble pas à un appariement raté, il ressemble à une formation sanitaire sans couverture.
  5. Diapositive 5 / 21

    Joignez sur le code, jamais sur le nom — En R

    population <- read_csv("admin-population-2024.csv")
    
    with_denominator <- vax |>
      mutate(admin2_pcode = toupper(stringr::str_squish(admin2_pcode))) |>
      left_join(filter(population, year == 2024),
                by = "admin2_pcode", relationship = "many-to-one")
    
    stopifnot(!any(is.na(with_denominator$pop_under1)))
    Notes du présentateur
    L'assertion est la ligne importante. Une jointure à gauche qui n'apparie pas laisse un dénominateur manquant ; un dénominateur manquant rend un taux de couverture manquant ; et un taux de couverture manquant est exclu d'une moyenne, si bien que la moyenne du district devient discrètement la moyenne des seuls endroits qui se sont appariés.
  6. Diapositive 6 / 21

    La projection, et l'année que personne n'énonce — En Python

    GROWTH = 0.024   # national annual growth rate, published with the census
    CENSUS_YEAR = 2015
    
    population["pop_2024"] = population["pop_census"] * (1 + GROWTH) ** (2024 - CENSUS_YEAR)
    Notes du présentateur
    Une projection de recensement, c'est une population de base et un taux de croissance. Calculez-la au grand jour.
  7. Diapositive 7 / 21

    La projection, et l'année que personne n'énonce — En R

    GROWTH <- 0.024
    CENSUS_YEAR <- 2015
    
    population <- population |>
      mutate(pop_2024 = pop_census * (1 + GROWTH)^(2024 - CENSUS_YEAR))
  8. Diapositive 8 / 21

    La projection, et l'année que personne n'énonce

    • Écrivez l'année du recensement, le taux de croissance et sa source à côté du nombre.
    • Utilisez la même projection pour tous les indicateurs d'un rapport. Deux indicateurs sur deux projections ne sont…
    • Là où des déplacements ont eu lieu, dites que la projection n'en tient pas compte, et donnez le sens de l'erreur au…
    Notes du présentateur
    Neuf ans à 2,4 % font un facteur de 1,24. Un quart de votre dénominateur est une hypothèse, et elle se compose : deux districts projetés depuis le même recensement au même taux national conserveront exactement leurs tailles relatives, ce qui est précisément ce qui ne se produit pas là où il y a eu des déplacements. Aussi, lorsqu'un taux de couverture est contesté, la projection est en général la réponse honnête. Trois habitudes qui la maintiennent défendable.
  9. Diapositive 9 / 21

    Les bassins de desserte ne s'additionnent pas — En Python

    by_facility = vax.query("antigen == 'penta3' and period == '2024-01-01'")
    print("sum of facility targets:", by_facility["target_population"].sum())
    Notes du présentateur
    Le bassin d'une formation sanitaire est la population qu'elle est censée desservir. Additionnez les bassins de toutes les formations d'un district et vous n'obtiendrez pas le district.
  10. Diapositive 10 / 21

    Les bassins de desserte ne s'additionnent pas — En R

    vax |>
      filter(antigen == "penta3", period == "2024-01-01") |>
      summarise(total = sum(target_population))
  11. Diapositive 11 / 21

    Les bassins de desserte ne s'additionnent pas — En Python

    district = (
        vax.query("antigen == 'penta3'")
        .groupby("period")
        .agg(doses=("doses_administered", "sum"),
             target=("target_population", "sum"))
    )
    district["coverage"] = district["doses"] / district["target"]
    Notes du présentateur
    Ici cette somme vaut 11 774 pour le mois. Ce n'est un dénominateur de district utilisable que si les bassins partitionnent le district — sans chevauchement et sans trou — et ce n'est presque jamais le cas. Deux formations de part et d'autre d'une ville comptent toutes deux la ville. Une population située entre deux bassins est comptée deux fois ou pas du tout. La conséquence est précise et fréquente : la couverture par formation sanitaire n'est pas fiable et la couverture au niveau du district l'est. Les gens traversent les limites de bassin pour se faire vacciner, si bien que le numérateur d'une formation inclut des enfants du dénominateur de sa voisine. Agrégez au niveau où la traversée se produit à l'intérieur de l'unité, et le bruit s'annule.
  12. Diapositive 12 / 21

    Les bassins de desserte ne s'additionnent pas — En R

    district <- vax |>
      filter(antigen == "penta3") |>
      summarise(doses = sum(doses_administered),
                target = sum(target_population), .by = period) |>
      mutate(coverage = doses / target)
  13. Diapositive 13 / 21

    Une couverture supérieure à 100 %

    • Le dénominateur est trop petit. Une projection périmée, ou un coefficient de bassin qui suppose moins de moins d'un…
    • Le numérateur inclut des gens de l'extérieur. Traversée de limites, ou une campagne qui a attiré des gens d'un…
    • La granularité est fausse. Des doses comptées là où on voulait des enfants — un enfant recevant trois doses d'un…
    • Une jointure a multiplié quelque chose. Tout ce qui est dans la leçon 1.
    Notes du présentateur
    Cela arrive constamment et ce n'est jamais un programme qui dépasse sa population. Quatre causes, dans l'ordre où il vaut la peine de les vérifier.
  14. Diapositive 14 / 21

    Une couverture supérieure à 100 % — En Python

    over = district[district["coverage"] > 1]
    print(over)
  15. Diapositive 15 / 21

    Une couverture supérieure à 100 % — En R

    district |> filter(coverage > 1)
  16. Diapositive 16 / 21

    Une couverture supérieure à 100 %

    • Rapportez-le plutôt que de l'écrêter — Un taux de couverture plafonné à 100 % a jeté la preuve que le dénominateur est…
    Notes du présentateur
    Rapportez-le plutôt que de l'écrêter. Un taux de couverture plafonné à 100 % a jeté la preuve que le dénominateur est faux, et ce dénominateur faux est le constat.
  17. Diapositive 17 / 21

    Taux pour mille, et le piège de l'annualisation — En Python

    district["per_1000"] = 1000 * district["doses"] / district["target"]
  18. Diapositive 18 / 21

    Taux pour mille, et le piège de l'annualisation — En R

    district <- district |> mutate(per_1000 = 1000 * doses / target)
    Notes du présentateur
    Deux pièges logent au même endroit. D'abord, une couverture mensuelle n'est pas une couverture annuelle, et la multiplier par douze suppose que chaque mois a rapporté — ce que le cours de nettoyage a montré faux en août et septembre ici. Ensuite, un taux pour mille exige que sa période figure dans le libellé : doses_per_1000_under1_per_month est sans ambiguïté, rate ne l'est pas.
  19. Diapositive 19 / 21

    Écrivez le dénominateur

    ChampValeur
    IndicateurCouverture penta3, district
    NumérateurDoses de penta3 administrées, formations ayant rapporté
    DénominateurNourrissons survivants, bassins du ministère sommés au district
    SourceEstimations de population du ministère 2024, projetées du recensement 2015 à 2,4 %
    DésagrégationMois, type de formation sanitaire
    RéserveTaux de complétude de 29 % en août ; couverture calculée sur les seules formations ayant rapporté
    Notes du présentateur
    Tout indicateur que vous publiez devrait porter une fiche de référence. Ce tableau prend deux minutes et règle la question définitivement. C'est le même geste que le fichier de définitions que le cours de fondamentaux écrit à côté d'une table de résultats, et c'est ce que le cours Conception d'indicateurs et cadre logique développera plus tard en fiche de référence complète.
  20. Diapositive 20 / 21

    La suite

    • Le dénominateur répond à « sur combien de personnes ».
    Notes du présentateur
    Le dénominateur répond à « sur combien de personnes ». La leçon suivante répond à « sur combien de périodes » — construire un calendrier complet pour qu'une formation sanitaire n'ayant jamais rapporté en août apparaisse comme un trou plutôt que de ne pas apparaître du tout.
  21. Diapositive 21 / 21

    La suite

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