cassionData Analysis

Back to the lessonLesson 8 of 8Reading it against something else

What exactly was counted?

The same deck as the downloads, rendered as a page. Start the slideshow to present it full screen — arrow keys or a click advance one slide, Escape leaves.

Slides · PDFSlides · PowerPoint

  1. Slide 1 / 15

    What this lesson covers

    • The question
    • Four parts
    • The provenance block
    • Interrogating a figure you did not produce
    • What the system cannot tell you
    • Where this course leaves you
    • Where module 3 leaves you
    Speaker notes
    Four questions, a provenance block that answers them, and a worked interrogation of one figure from raw value to published percentage. The question this course exists to make answerable.
  2. Slide 2 / 15

    The question

    • Somebody presents a slide: penta3 coverage, 78%.
    Speaker notes
    Somebody presents a slide: penta3 coverage, 78%. Somebody else asks what exactly was counted. It is not a hostile question and it is not a technical one. It is the question the whole of module 2 and module 3 have been building toward, and a figure that cannot answer it is a figure that cannot be defended, however carefully it was computed.
  3. Slide 3 / 15

    Four parts

    • What was counted? — The data element, its aggregation operator, and whether any category disaggregation was collapsed…
    • Where? — Which org units, at which level, on which version of the hierarchy
    • When? — Which periods, by activity date or entry date, and how complete they were at extraction
    • Out of what? — The denominator, its source, its year, and how many of the expected reporting units contributed
    Speaker notes
    What was counted? The data element, its aggregation operator, and whether any category disaggregation was collapsed on the way out. Where? Which org units, at which level, on which version of the hierarchy. When? Which periods, by activity date or entry date, and how complete they were at extraction. Out of what? The denominator, its source, its year, and how many of the expected reporting units contributed. Each of those has been a lesson. Together they are the block below.
  4. Slide 4 / 15

    The provenance block — Example (cont.)

    Figure            Penta3 coverage, district, 2024
    Value             77.5%
    
    What              Data element PENTA3_DOSES ("Penta 3rd dose administered"),
                      aggregation operator SUM over periods and org units.
                      No category disaggregation in the extract; the element has
                      none configured.
    Where             38 facilities at org unit level 4, hierarchy as pinned in
                      extracts/2026-07-28/raw/organisationUnits.json. No facility
                      was reassigned during 2024.
    When              202401 to 202412, by activity period. Analytics tables last
                      run 2026-07-27 23:14 UTC, so late entry up to that point is
                      included.
    Out of what       Surviving infants, MoH catchment estimates 2024, projected
                      from the 2015 census at 2.4% annual growth. Denominator
                      pro-rated to the months each facility reported: 9,238 of a
  5. Slide 5 / 15

    The provenance block — Example (cont.)

                      full-year 11,774.
    Completeness      349 of 456 facility-months reported (76.5%). August 29%,
                      September 45%. The figure is coverage among reporting
                      facility-months and is a lower bound on district coverage.
    Extract           extracts/2026-07-28/, manifest.json, script extract.py 1.3
  6. Slide 6 / 15

    The provenance block

    • Attach it to the figure, not to the report — A slide with the number and a footnote pointing at the block is what…
    Speaker notes
    Seven lines and a heading. It takes ten minutes the first time and two thereafter, because six of the seven come straight out of the manifest and the metadata the extract already pulled. Attach it to the figure, not to the report. A slide with the number and a footnote pointing at the block is what survives being forwarded.
  7. Slide 7 / 15

    Interrogating a figure you did not produce

    • 1. Is it a data element or an indicator? — If an indicator, ask for the numerator and denominator expressions
    • 2. What is the denominator's year? — A 2024 numerator over a 2019 projection is common and understates coverage by…
    • 3. What was the reporting rate? — Below 90%, the figure is a lower bound
    • 4. Which org unit level? — A figure that mixes levels double-counts; a facility-level coverage figure is unreliable for…
    • 5. Was the period complete when it was pulled? — A recent month is provisional, and a figure quoted from a pull three…
    • 6. What is it being compared to? — Most misuse is comparison — against a different measure, a different denominator, or…
    Speaker notes
    More often you are handed a number and asked whether it can be used. Six questions, in the order that eliminates the most possibilities fastest. 1. Is it a data element or an indicator? If an indicator, ask for the numerator and denominator expressions. Most disagreements end here. 2. What is the denominator's year? A 2024 numerator over a 2019 projection is common and understates coverage by whatever nine years of growth amounts to. 3. What was the reporting rate? Below 90%, the figure is a lower bound. If nobody knows, that is the answer to whether it can be used. 4. Which org unit level? A figure that mixes levels double-counts; a facility-level coverage figure is unreliable for the catchment reasons lesson 2 gave. 5. Was the period complete when it was pulled? A recent month is provisional, and a figure quoted from a pull three days after month end will not reproduce. 6. What is it being compared to? Most misuse is comparison — against a different measure, a different denominator, or a period with a different reporting rate.
  8. Slide 8 / 15

    Interrogating a figure you did not produce — In Python

    def interrogate(figure):
        return {
            "type": figure.get("element_or_indicator"),
            "denominator_year": figure.get("denominator_year"),
            "reporting_rate": figure.get("reporting_rate"),
            "org_unit_level": figure.get("level"),
            "period_complete_at_extraction": figure.get("period_closed"),
            "comparable_to": figure.get("comparable_to"),
        }
  9. Slide 9 / 15

    Interrogating a figure you did not produce — In R

    interrogate <- function(figure) {
      figure[c("element_or_indicator", "denominator_year", "reporting_rate",
               "level", "period_closed", "comparable_to")]
    }
  10. Slide 10 / 15

    Interrogating a figure you did not produce

    • A blank in any of those is the finding — You are not asking somebody to justify themselves; you are establishing…
    Speaker notes
    A blank in any of those is the finding. You are not asking somebody to justify themselves; you are establishing whether the number can carry the decision it is about to be used for.
  11. Slide 11 / 15

    What the system cannot tell you

    • Why a facility stopped reporting — The system records that it did
    • What the data entry clerk understood the field to mean — A column labelled "cases" collects whatever a person believes…
    • What happened outside the catchment — Routine data sees what came to the service
    Speaker notes
    Three things no amount of API work recovers, and each has to come from a person. Why a facility stopped reporting. The system records that it did. The reason — a staff departure, a broken tablet, a security incident, a supervisor who left — is in somebody's head and it decides whether the gap is a data problem or a service problem. What the data entry clerk understood the field to mean. A column labelled "cases" collects whatever a person believes a case is. Two facilities can be internally consistent and mean different things, and that is the definition problem the indicator course exists for. What happened outside the catchment. Routine data sees what came to the service. The previous lesson decomposed exactly what that excludes.
  12. Slide 12 / 15

    What the system cannot tell you

    The system is a record of what was reported, not of what happened. Every figure it produces inherits that, and stating it once in a report is worth more than any additional decimal place.
  13. Slide 13 / 15

    Where this course leaves you

    • You can read a DHIS2 extract as the database it came from, aggregate up a hierarchy that moves, treat completeness as a denominator, pull the same extract every month with a manifest that says what you asked for, place a routine figure beside a survey estimate and explain the gap, and answer what was counted for any number the system produces.
    Speaker notes
    You can read a DHIS2 extract as the database it came from, aggregate up a hierarchy that moves, treat completeness as a denominator, pull the same extract every month with a manifest that says what you asked for, place a routine figure beside a survey estimate and explain the gap, and answer what was counted for any number the system produces.
  14. Slide 14 / 15

    Where module 3 leaves you

    • Three courses.
    Speaker notes
    Three courses. Indicator Design and the LogFrame defined the number. Survey Analysis, Sampling and Weighting put an interval on it. This one traced it back to the system that produced it. Together they are the answer to the platform's own standing instruction — always state how an indicator is calculated, what its denominator is, and what decision it informs — for the two kinds of data this sector actually has: a survey and a routine system. Module 4, Sector Analysis, is next and is the largest in the spine at six courses. It applies all of this to the sector you report on, starting with Nutrition Analysis: CMAM and SMART — the WHO growth standards, the SMART plausibility report, the Sphere performance thresholds, and coverage estimation, which is where the difference between admissions over expected caseload and actual coverage finally gets the twenty-four hours it needs.
  15. Slide 15 / 15

    Where this goes next

    Read the full lesson, with runnable code Back to the lesson