cassionData Analysis

Lesson 7 of 8

Unit · Reading it against something else

Three answers to one question

Acute malnutrition is 8.7% in the routine screening register, 11.4% in a household survey using the same measure, and 14.9% in a SMART survey using a different one. Decompose the gap into selection and measure, and neither source is wrong.

PythonR90 minWHO Child Growth StandardsSMART surveyUNICEF indicator definitions

The meeting

The nutrition cluster has three figures for acute malnutrition in the same population and the same year. The routine screening register says 8.7%. A household survey says 11.4%. A SMART survey says 14.9%.

Somebody will ask which is right. The answer is that all three are, and the useful work is decomposing the gap into its two causes — who was measured and what was measured — because each cause has a different implication for what the programme should do.

The three sources

import pandas as pd

muac = pd.read_csv("muac-screening-artibonite-2024.v1.csv")
measured = muac[muac["muac_mm"].notna()]
routine = ((measured["muac_mm"] < 125) | (measured["oedema"] == True)).mean()

print(f"routine screening register: {routine:.1%} on n={len(measured):,}")
library(dplyr)

muac |>
  filter(!is.na(muac_mm)) |>
  summarise(rate = mean(muac_mm < 125 | oedema), n = n())
Source Measure Population Estimate n
Routine screening register MUAC Children brought to screening 8.7% 4,146
Household survey MUAC Population sample, weighted 11.4% 648
SMART survey Weight-for-height z Population sample 14.9% 874

Two things vary across those rows, and they vary one at a time, which is what makes the decomposition possible.

Hold the measure, vary the selection: 8.7% to 11.4%

Rows one and two both use MUAC. The only difference is who got measured.

The routine register measures children someone brought to a screening. The household survey measures children sampled from the population, with the weights the survey course built.

That is a 2.7-point gap, and it goes in the direction it always goes. Screening reaches children whose carers can reach a screening point — closer to the site, less constrained by other work, in a household with someone able to travel. The children who are hardest to reach are systematically more likely to be malnourished, and the routine figure does not contain them.

Routine data measures the served population, not the population. That is not a defect of the system; it is what a service register is. The mistake is reading it as a prevalence.

Hold the selection, vary the measure: 11.4% to 14.9%

Rows two and three are both population samples. The difference is the measurement.

MUAC and weight-for-height do not identify the same children. They correlate, but each finds cases the other misses — MUAC is more sensitive to younger and shorter children, weight-for-height to older and taller ones. Applying the standard cut-offs to the same population gives different prevalences, and in most settings weight-for-height gives the higher figure.

A 3.5-point gap here, and it means the two figures cannot be read against the same threshold. The 15% emergency threshold for global acute malnutrition is defined against a specific measure, and a MUAC-based prevalence compared to it is comparing two different quantities. The indicator course made this point about naming; here is what it costs.

comparison = pd.DataFrame({
    "source": ["Routine register", "Household survey", "SMART survey"],
    "measure": ["MUAC", "MUAC", "weight-for-height z"],
    "population": ["screened", "population sample", "population sample"],
    "estimate": [0.087, 0.114, 0.149],
})
comparison["vs_previous"] = comparison["estimate"].diff()
print(comparison)
tibble::tribble(
  ~source,             ~measure, ~population,         ~estimate,
  "Routine register",  "MUAC",   "screened",              0.087,
  "Household survey",  "MUAC",   "population sample",     0.114,
  "SMART survey",      "WHZ",    "population sample",     0.149
) |> mutate(vs_previous = estimate - lag(estimate))

Selection accounts for 2.7 points. Measure accounts for 3.5. Between them they account for the whole of the 6.2-point spread, and neither is an error.

What each source is actually good for

Source Good for Not for
Routine register Caseload, workload, supply planning, trend within the served population Prevalence, coverage denominators
Household survey Population prevalence with an interval, equity across strata Anything monthly; anything about individual facilities
SMART survey Prevalence against the IPC and emergency thresholds, comparability with other surveys Anything more often than annually

Read that table and the meeting resolves itself. The programme manager asking “how many children will we admit next quarter” wants the routine register. The cluster asking “has the situation crossed the emergency threshold” wants the SMART survey. Asking either question of the other source produces a defensible-sounding wrong answer.

Triangulation, not reconciliation

The instinct when two sources disagree is to reconcile them — to decide which is right and adjust the other. Resist it. The sources are measuring different things and the difference is information.

What the difference tells you:

  • A widening gap between routine and survey means screening coverage is falling, or the hardest-to-reach are becoming harder to reach. That is a programmatic finding and neither source alone shows it.
  • A routine figure that moves while the survey does not is usually about case finding — a new outreach round, a new screening protocol — not about nutrition status.
  • A survey figure that moves while routine does not means the programme is not seeing the change. That is the most actionable finding of the three.
def gap_over_time(routine_series, survey_series):
    return pd.DataFrame({
        "routine": routine_series,
        "survey": survey_series,
        "ratio": survey_series / routine_series,
    })
gap_over_time <- function(routine, survey) {
  tibble::tibble(routine, survey, ratio = survey / routine)
}

Track the ratio, not the difference. A ratio of survey to routine is roughly the inverse of screening coverage, and it is stable enough to be a monitoring indicator in its own right.

The sentence in the report

Acute malnutrition in the district, 2024:

  14.9% (95% CI 12.3-17.9) by weight-for-height z-score, from a 30-cluster
  SMART survey of 874 children, design effect 1.5.

  11.4% by MUAC in the same population, from a household survey of 648
  measured children, weighted to the sampling frame.

  8.7% by MUAC among 4,146 children brought to routine screening. This is a
  measure of the screened population, not a prevalence estimate, and is
  reported here for comparison with previous rounds of screening only.

The gap between the first two figures is a measurement difference; between the
second and third, a difference in who was measured. Neither indicates an error.

Ten lines, and they end an argument that would otherwise recur every quarter. The last sentence is the one that does the work.

When you only have routine data

Which is most of the time. Three honest positions:

  • Report caseload, not prevalence. “3,700 children screened, 362 acutely malnourished by MUAC” is a true sentence that supports supply planning.
  • Report the trend, not the level. A routine series is far more reliable about direction than about level, provided screening coverage is stable — and say that it is, with a number.
  • Anchor to the last survey. Where a survey exists, the routine-to-survey ratio from that year can be carried forward as a stated assumption, with its date. It is an assumption and it must be labelled as one.

What you must not do is present a routine screening rate as a population prevalence. It is the most common misuse of routine data in this sector and it always understates.

What comes next

Every lesson in this course has been a version of one question. The last lesson asks it directly — what exactly was counted, by whom, over what period — and turns it into a block you attach to any figure the system produces.

Teach this lesson

The lesson as a slide deck, with the prose kept in the speaker notes rather than on the slide. Generated from this page, so it cannot fall out of step with it.

Start the slideshowRead the slides

The PDF needs no software and projects from any machine. The PowerPoint file is there to be edited — add your organisation's branding, cut a section for a shorter session, or merge two lessons into a workshop.