cassionAnalyse de données

Retour à la leçonLeçon 1 sur 8Comment la base est structurée

Ce qu'est réellement une valeur dans DHIS2

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

    Ce que couvre cette leçon

    • Une valeur a cinq coordonnées
    • Élément de données — la chose qui est comptée
    • Combinaisons de catégories — la ventilation intégrée à l'élément
    • Élément de données contre indicateur
    • Ensembles de données — le formulaire, et ce que « attendu » veut dire
    • Demandez les métadonnées, pas seulement les données
    • La suite
    Notes du présentateur
    Cinq coordonnées, pas un nombre. Élément de données, combinaison d'options de catégories, unité d'organisation, période et ensemble de données — et la différence entre un élément de données et un indicateur, d'où part l'essentiel de la confusion sur les chiffres de routine.
  2. Diapositive 2 / 22

    Une valeur a cinq coordonnées

    CoordonnéeDans l'extractionCe à quoi elle répond
    Élément de donnéesantigen plus la mesureCe qui a été compté
    Combinaison d'options de catégoriesabsenteSelon quelle ventilation
    Unité d'organisationfacility_idOù
    PériodeperiodQuand
    Ensemble de donnéesabsentSur quel formulaire il a été collecté
    Notes du présentateur
    L'extraction vaccinale ressemble à un tableur — formation sanitaire, période, antigène, doses. Dans le système d'origine, une valeur stockée est adressée par cinq choses, et les connaître toutes les cinq est ce qui rend un chiffre défendable. Deux des cinq manquent à l'export, et c'est le cas normal. L'essentiel de cette leçon porte sur ce que ces deux-là portent et sur les disputes que leur absence provoque.
  3. Diapositive 3 / 22

    Élément de données — la chose qui est comptée — En Python

    import pandas as pd
    
    vax = pd.read_csv("vaccination-coverage-2024.v1.csv", parse_dates=["period"])
    print(sorted(vax["antigen"].unique()))
    print(vax.groupby("antigen")["doses_administered"].sum())
    Notes du présentateur
    Un élément de données est la mesure brute que collecte un formulaire — « doses de penta3 administrées », « doses de BCG administrées ». C'est un décompte de quelque chose, saisi par une personne, et il est stocké exactement tel que saisi.
  4. Diapositive 4 / 22

    Élément de données — la chose qui est comptée — En R

    library(dplyr)
    library(readr)
    
    vax <- read_csv("vaccination-coverage-2024.v1.csv")
    
    vax |> summarise(doses = sum(doses_administered), .by = antigen)
  5. Diapositive 5 / 22

    Élément de données — la chose qui est comptée

    • Demandez lequel des deux — Un dénominateur stocké comme élément annuel peut être révisé rétrospectivement ; stocké…
    Notes du présentateur
    Six antigènes, six éléments de données. La colonne target_population est une septième valeur d'une autre nature, et dans une instance réelle ce ne serait généralement pas un élément de données du tout — c'est un dénominateur, stocké soit comme un élément de données saisi une fois par an, soit comme un attribut de l'unité d'organisation. Demandez lequel des deux. Un dénominateur stocké comme élément annuel peut être révisé rétrospectivement ; stocké comme attribut, il change pour toutes les périodes d'un coup. Cette différence explique qu'un taux de couverture calculé en janvier puis en juin puisse différer sans aucune dose nouvelle.
  6. Diapositive 6 / 22

    Combinaisons de catégories — la ventilation intégrée à l'élément — Exemple

    Data element:  Penta3 doses administered
    Category combo: Age (<1, 1+) x Sex (F, M)
    Stored values:  4 per org unit per period
    Notes du présentateur
    Une combinaison de catégories découpe un élément de données en cellules que le formulaire collecte réellement. Le penta3 pourrait être ventilé par âge (moins d'un an / un an et plus) et par sexe, donnant quatre combinaisons d'options de catégories par élément.
  7. Diapositive 7 / 22

    Combinaisons de catégories — la ventilation intégrée à l'élément

    • L'élément n'a aucune ventilation, donc il y a une valeur et rien n'a été perdu.
    • L'export a agrégé les combinaisons d'options, auquel cas la ventilation existe dans le système et votre fichier ne…
    Notes du présentateur
    C'est là que loge le contresens le plus fréquent sur un export DHIS2. Si votre extraction a une ligne par antigène, formation et mois, l'une de deux choses est vraie, et elles ne s'équivalent pas.
  8. Diapositive 8 / 22

    Combinaisons de catégories — la ventilation intégrée à l'élément — En Python

    expected = (vax["facility_id"].nunique() * vax["period"].nunique()
                * vax["antigen"].nunique())
    print(f"{expected} expected rows, {len(vax)} in the file")
  9. Diapositive 9 / 22

    Combinaisons de catégories — la ventilation intégrée à l'élément — En R

    c(expected = n_distinct(vax$facility_id) * n_distinct(vax$period) *
                 n_distinct(vax$antigen),
      actual = nrow(vax))
    Notes du présentateur
    38 × 12 × 6 = 2 736, et le fichier compte 2 736 lignes. La grille est exactement pleine, ce qui vous dit que l'export est au niveau de l'élément de données sans ventilation survivante. Si un rapport demande ensuite la couverture par sexe, la réponse n'est pas dans ce fichier, et elle est peut-être ou non dans le système.
  10. Diapositive 10 / 22

    Élément de données contre indicateur

    • Un élément de données est stocké. Quelqu'un l'a saisi.
    • Un indicateur est calculé. Il a un numérateur, un dénominateur et un facteur, et DHIS2 l'évalue au niveau que vous…
    Notes du présentateur
    La distinction qui cause le plus d'ennuis, et il vaut la peine d'être précis.
  11. Diapositive 11 / 22

    Élément de données contre indicateur — Exemple

    Indicator:   Penta3 coverage
    Numerator:   #{Penta3 doses administered}
    Denominator: #{Surviving infants}
    Factor:      100
  12. Diapositive 12 / 22

    Élément de données contre indicateur

    • Un indicateur n'est pas stocké, donc il ne peut pas être faux dans la base — Si un taux de couverture est faux, c'est…
    • L'indicateur est évalué au niveau demandé — et l'arithmétique est sommer-puis-diviser, non diviser-puis-moyenner
    Notes du présentateur
    Trois conséquences qui reviennent sans cesse. Un indicateur n'est pas stocké, donc il ne peut pas être faux dans la base. Si un taux de couverture est faux, c'est soit un élément de données, soit la définition de l'indicateur. Les deux ont des responsables et des remèdes différents. L'indicateur est évalué au niveau demandé, et l'arithmétique est sommer-puis-diviser, non diviser-puis-moyenner. Demander la couverture au niveau du district somme numérateurs et dénominateurs sur les formations ; cela ne moyenne pas les couvertures par formation. C'est le comportement correct et c'est l'inverse de ce que fait d'ordinaire un utilisateur de tableur.
  13. Diapositive 13 / 22

    Élément de données contre indicateur — En Python

    district = vax[vax["report_submitted"] == True]
    correct = (district["doses_administered"].sum()
               / district["target_population"].sum())
    wrong = (district["doses_administered"] / district["target_population"]).mean()
    print(f"ratio of sums {correct:.3f}, mean of ratios {wrong:.3f}")
  14. Diapositive 14 / 22

    Élément de données contre indicateur — En R

    vax |>
      filter(report_submitted) |>
      summarise(ratio_of_sums = sum(doses_administered) / sum(target_population),
                mean_of_ratios = mean(doses_administered / target_population))
  15. Diapositive 15 / 22

    Élément de données contre indicateur

    • Un indicateur peut être demandé pour une période que les données ne soutiennent pas — Demandez la couverture annuelle…
    Notes du présentateur
    Un indicateur peut être demandé pour une période que les données ne soutiennent pas. Demandez la couverture annuelle et DHIS2 sommera douze numérateurs mensuels sur un dénominateur qui peut être une valeur annuelle ou une somme de valeurs mensuelles, selon la configuration de l'élément. Obtenir un nombre plausible ne prouve pas que l'agrégation était juste.
  16. Diapositive 16 / 22

    Ensembles de données — le formulaire, et ce que « attendu » veut dire — En Python

    reported = vax["report_submitted"] == True
    print(f"{reported.sum()} of {len(vax)} facility-month-antigen values reported")
    print(f"reporting rate {reported.mean():.1%}")
    Notes du présentateur
    Un ensemble de données est le formulaire sur lequel un groupe d'éléments est collecté, affecté à un ensemble d'unités d'organisation, avec un type de période. C'est lui qui décide quelles unités sont censées rapporter, fondement de tout chiffre de complétude que le système produit.
  17. Diapositive 17 / 22

    Ensembles de données — le formulaire, et ce que « attendu » veut dire — En R

    mean(vax$report_submitted)
  18. Diapositive 18 / 22

    Ensembles de données — le formulaire, et ce que « attendu » veut dire — En Python

    partial = (
        vax[reported].groupby(["facility_id", "period"])["antigen"].nunique()
    )
    print(f"{(partial < 6).sum()} facility-months with only some antigens reported")
    Notes du présentateur
    76,5 %. Ce nombre n'a de sens que parce qu'une affectation d'ensemble de données dit que les 38 formations étaient censées transmettre chaque mois. Sans l'ensemble de données, il n'y a ni dénominateur ni complétude. Remarquez aussi ce que l'extraction ne porte pas : le rapportage est ici tout ou rien par couple formation-mois pour les six antigènes, ce à quoi ressemble un ensemble de données unique contenant les six. Un système répartissant les antigènes sur deux ensembles montrerait des mois partiels, et cette structure serait visible dans les données.
  19. Diapositive 19 / 22

    Ensembles de données — le formulaire, et ce que « attendu » veut dire — En R

    vax |>
      filter(report_submitted) |>
      summarise(antigens = n_distinct(antigen), .by = c(facility_id, period)) |>
      filter(antigens < 6) |>
      nrow()
    Notes du présentateur
    Zéro. Un ensemble de données, six éléments, transmis ensemble.
  20. Diapositive 20 / 22

    Demandez les métadonnées, pas seulement les données

    • Les définitions des éléments de données, y compris leur mode d'agrégation entre périodes (somme, moyenne, ou…
    • La combinaison de catégories de chaque élément, pour savoir ce qui a été réduit.
    • L'affectation des ensembles de données, pour savoir combien d'unités étaient attendues.
    • Les définitions d'indicateurs de tout ce qui est calculé, avec les expressions de numérateur et de dénominateur.
    Notes du présentateur
    La conclusion pratique de cette leçon. Quand vous demandez une extraction, demandez les métadonnées avec. Quatre petits fichiers, et ils transforment un export en quelque chose à partir de quoi une fiche de référence peut s'écrire. Le cours Conception d'indicateurs exigeait une source détaillée jusqu'au champ ; voici à quoi cela ressemble quand la source est DHIS2.
  21. Diapositive 21 / 22

    La suite

    • Vous savez ce qu'est une valeur et où elle se situe.
    Notes du présentateur
    Vous savez ce qu'est une valeur et où elle se situe. La leçon suivante la déplace — vers le haut d'une hiérarchie d'unités d'organisation qui n'est pas fixe, où une formation réaffectée d'un district à l'autre en mars donne un total de district qu'on ne peut pas simplement sommer.
  22. Diapositive 22 / 22

    La suite

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