cassionData Analysis

Back to the lessonLesson 2 of 8The ladder is not the source

The boolean that halves a coverage figure

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

    What this lesson covers

    • Sanitation has the same shape as water
    • Why sharing costs a rung
    • Open defecation is the number to lead with
    • The hygiene ladder, and the observation that carries it
    • The three ladders cannot be averaged
    • What comes next
    Speaker notes
    62.0% of households have an improved sanitation facility and 43.2% have basic service. The difference is one column — whether the latrine is shared — and the hygiene ladder has an equivalent that costs it half again.
  2. Slide 2 / 18

    Sanitation has the same shape as water

    RungDefinition
    Safely managedImproved, not shared, and excreta safely disposed of or treated
    BasicImproved, not shared with other households
    LimitedImproved but shared
    UnimprovedPit latrine without a slab, hanging latrine, bucket
    Open defecationNo facility
    Speaker notes
    An improved facility is necessary and not sufficient, and the field that makes the difference is a boolean nobody looks at twice.
  3. Slide 3 / 18

    Sanitation has the same shape as water — In Python

    IMPROVED_SANITATION = {
        "flush-to-sewer", "flush-to-septic", "vip-latrine", "pit-latrine-with-slab",
    }
    
    improved = households["sanitation_facility"].isin(IMPROVED_SANITATION)
    shared = households["shared_sanitation"]
    
    print(f"improved facility:  {improved.mean():.1%}")
    print(f"basic (not shared): {(improved & ~shared).mean():.1%}")
    print(f"limited (shared):   {(improved & shared).mean():.1%}")
  4. Slide 4 / 18

    Sanitation has the same shape as water — In R

    improved_sanitation <- c("flush-to-sewer", "flush-to-septic",
                             "vip-latrine", "pit-latrine-with-slab")
    
    households |>
      mutate(service = case_when(
        sanitation_facility == "open-defecation" ~ "open defecation",
        !sanitation_facility %in% improved_sanitation ~ "unimproved",
        shared_sanitation ~ "limited",
        TRUE ~ "basic"
      )) |>
      count(service) |>
      mutate(share = n / sum(n))
  5. Slide 5 / 18

    Sanitation has the same shape as water

    RungHouseholdsShare
    Basic1,03843.2%
    Limited (shared)45218.8%
    Unimproved59424.7%
    Open defecation31913.3%
  6. Slide 6 / 18

    Sanitation has the same shape as water

    • 62.0% have an improved facility and 43.2% have basic service — Eighteen points sit on a latrine that meets the…
    Speaker notes
    62.0% have an improved facility and 43.2% have basic service. Eighteen points sit on a latrine that meets the construction standard and is shared with another household.
  7. Slide 7 / 18

    Why sharing costs a rung

    • This is the same argument as the thirty minutes — In both ladders the second condition exists because a facility that…
    Speaker notes
    Because the reason for the standard is use, not construction. A shared latrine is used less at night, less by women and girls, and less by children — which is where the health benefit is. The classification follows the behaviour, not the concrete. This is the same argument as the thirty minutes. In both ladders the second condition exists because a facility that is technically adequate and practically avoided produces no health outcome, and an indicator that counted it would report progress that nobody experienced.
  8. Slide 8 / 18

    Open defecation is the number to lead with — In Python

    od = households["sanitation_facility"].eq("open-defecation")
    by_district = households.groupby("district")["sanitation_facility"].apply(
        lambda s: s.eq("open-defecation").mean()
    )
    print(f"{od.sum()} households, {od.mean():.1%}")
    print((by_district * 100).round(1))
  9. Slide 9 / 18

    Open defecation is the number to lead with — In R

    households |>
      summarise(open_defecation = mean(sanitation_facility == "open-defecation"),
                n = n(), .by = district)
    Speaker notes
    13.3%, and it is the one WASH figure that a non-specialist reads correctly without being told the definition. Lead with it, disaggregate it, and note that the district field in this file is written six ways — the cleaning course dealt with that, and grouping without normalising splits the worst district in four.
  10. Slide 10 / 18

    The hygiene ladder, and the observation that carries it — In Python

    has_facility = households["handwashing_facility"].ne("no-facility")
    soap = households["soap_observed"]
    
    print(f"any facility:            {has_facility.mean():.1%}")
    print(f"basic (facility + soap): {(has_facility & soap).mean():.1%}")
    print(f"limited (no soap):       {(has_facility & ~soap).mean():.1%}")
    print(f"no facility:             {(~has_facility).mean():.1%}")
    Speaker notes
    Basic hygiene service requires a handwashing facility with water and soap available. Three rungs, and the survey answers all three, because the enumerator observed rather than asked.
  11. Slide 11 / 18

    The hygiene ladder, and the observation that carries it — In R

    households |>
      mutate(hygiene = case_when(
        handwashing_facility == "no-facility" ~ "no facility",
        soap_observed ~ "basic",
        TRUE ~ "limited"
      )) |>
      count(hygiene) |>
      mutate(share = n / sum(n))
  12. Slide 12 / 18

    The hygiene ladder, and the observation that carries it

    RungHouseholdsShare
    Basic — facility and soap81934.1%
    Limited — facility, no soap81133.7%
    No facility77332.2%
  13. Slide 13 / 18

    The hygiene ladder, and the observation that carries it

    • 67.8% have somewhere to wash their hands and 34.1% have soap there — The hygiene ladder loses half its top rung to a…
    • Observation is why this is trustworthy — Reported handwashing runs far above observed handwashing everywhere it has…
    Speaker notes
    67.8% have somewhere to wash their hands and 34.1% have soap there. The hygiene ladder loses half its top rung to a single observed item, which is a larger drop than either of the other two ladders. Observation is why this is trustworthy. Reported handwashing runs far above observed handwashing everywhere it has been measured, because the question has an obviously correct answer. The column here is what the enumerator saw, and the column name should say so — soap_observed, not soap.
  14. Slide 14 / 18

    The three ladders cannot be averaged — In Python

    summary = pd.DataFrame({
        "ladder": ["Drinking water", "Sanitation", "Hygiene"],
        "at_least_basic": [0.547, 0.432, 0.341],
        "denominator": ["all households"] * 3,
    })
    print(summary)
  15. Slide 15 / 18

    The three ladders cannot be averaged — In R

    tibble::tribble(
      ~ladder,          ~at_least_basic,
      "Drinking water",           0.547,
      "Sanitation",               0.432,
      "Hygiene",                  0.341
    )
  16. Slide 16 / 18

    The three ladders cannot be averaged

    • Where a single composite is demanded, publish the three and the count of households that have all three — which is a…
    Speaker notes
    Three numbers on the same denominator, which is unusual and worth noticing — they can legitimately be shown side by side. What they cannot be is combined. There is no "WASH coverage" indicator, and a mean of the three would describe no household: a household with basic water, shared sanitation and no soap is not "58% covered", it is a household with one of three services. Where a single composite is demanded, publish the three and the count of households that have all three, which is a real quantity and usually a sobering one.
  17. Slide 17 / 18

    What comes next

    • The ladders classify.
    Speaker notes
    The ladders classify. They do not say how much water arrived, how long the queue was, or whether the water was safe to drink. The next two lessons are the measurements Sphere adds on top — and the first of them has two unit errors hiding in it.
  18. Slide 18 / 18

    Where this goes next

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