Skip to content

design(#601): the population record — declaring what a sample represents [DECISION NEEDED]#603

Open
ligon wants to merge 1 commit into
developmentfrom
docs/601-population-record
Open

design(#601): the population record — declaring what a sample represents [DECISION NEEDED]#603
ligon wants to merge 1 commit into
developmentfrom
docs/601-population-record

Conversation

@ligon

@ligon ligon commented Jul 12, 2026

Copy link
Copy Markdown
Owner

A proposal, not an implementation. It changes the semantics of a public API (Feature()) and encodes a judgement about what the library is willing to pool on a user's behalf. That is a direction decision. @ligon — this one is yours.

I also nearly shipped the wrong one an hour ago, which is the best argument for asking.

What I got wrong

I proposed frame: national | subnational | specialized, with Feature() defaulting to national.

@ligon: "the lsms-isa countries focus on agriculture, and so often exclude urban by design."

That kills it. A national-only default would have silently excluded the LSMS-ISA countries — the core of the library. I'd have replaced a silent-inclusion bug with a silent-exclusion bug. Same disease, sign flipped.

The distinction I'd missed

Two different things a sample can be, and they must not share a label:

documented frame restriction different target population
example Ethiopia ESS W1 (rural + small towns); ISA ag-focused designs Liberia NHFS (forest-adjacent communities)
still a general-purpose welfare survey of the country? yes no
what Feature() should do include, record the restriction, warn fence: exclude by default, opt-in explicitly

"% rural" is not the discriminator, and never was. The discriminator is what population the instrument is trying to measure.

This maps onto the SCOPE predicate the discovery agent derived independently in #599: Liberia NHFS fails "general-purpose welfare instrument"; Ethiopia W1 passes it with a documented restriction.

Why it's load-bearing, not an oddity

Ethiopia's universe changes across waves:

wave rural urban % rural
2011-12 3,466 503 87%
2018-19 3,115 3,655 46%

Urban goes 503 → 3,655. ESS W1 covered rural + small towns; later waves added urban centres. Anyone running a panel on Ethiopia W1→W5 is pooling different populations — household fixed effects across a universe that shifted underneath them. Every one of those waves is graded sane.

Liberia made the gap visible. Ethiopia makes it load-bearing — a core ISA country, one of the most-used panels in the library.

It also settles the shape: the universe is a property of the (country, wave) cell, not the country.

The judgement call

Record the universe per (country, wave) — target population, deliberate exclusions, what the weights inflate to, and the source. Config, not prose. (Liberia/_/CONTENTS.org already describes the problem correctly, in plain English, and it changed nothing. Prose is not enforcement.)

Then Feature():

  1. Surface it (df.attrs) — the universe travels with the data.
  2. Warn when a call pools materially different universes.
  3. ⚠ Fence specialized frames by default, opt-in to include. ← This is the contestable piece.

For: Liberia is silently corrupting cross-country analysis today, and the people most likely to be harmed are the least likely to read a CONTENTS.org.

Against: it's paternalistic, and a default that drops data is exactly the silent behaviour this whole exercise has been fighting.

I lean toward fencing, because the failure is asymmetric — a spurious warning costs a user thirty seconds; a silently pooled forest survey costs them a published result. But it's a call about what the library is for.

The connection worth noticing

This is the same move as the rest of the week, one step upstream. not-asked adjudicates absence after the fact. The capability record (#599) and the population record declare it at acquisition time. Same discipline — stop lumping, demand evidence for terminal states — applied when the knowledge is cheapest, instead of rediscovered by a probe months later.

Full design: slurm_logs/DESIGN_population_record_2026-07-12.org

🤖 Generated with Claude Code

…epresents)

A proposal, not an implementation.  It changes the semantics of a PUBLIC API
(`Feature()`) and encodes a judgement about what the library is willing to pool
on a user's behalf.  That is a direction decision, and it is Ethan's.

I also nearly shipped the WRONG one, which is the best argument for asking.

## What I got wrong

I proposed `frame: national | subnational | specialized`, with `Feature()`
defaulting to `national`.

Ethan: "the lsms-isa countries focus on agriculture, and so often exclude urban
by design."

That kills it.  A `national`-only default would have SILENTLY EXCLUDED THE
LSMS-ISA COUNTRIES -- the core of the library.  I would have replaced a
silent-inclusion bug with a silent-exclusion bug: same disease, sign flipped.

## The distinction I had missed

Two different things a sample can be, and they must not share a label:

  documented frame restriction   Ethiopia ESS W1 (rural + small towns); the ISA
                                 ag-focused designs.  STILL a general-purpose
                                 welfare survey of the country.  -> INCLUDE,
                                 record the restriction, warn on heterogeneity.

  different target population    Liberia NHFS (forest-adjacent communities).
                                 NOT a general-purpose survey of Liberia.
                                 -> FENCE: exclude from Feature() by default.

"% rural" is not the discriminator and never was.  The discriminator is WHAT
POPULATION THE INSTRUMENT IS TRYING TO MEASURE.

## Why it is load-bearing, not an oddity

Ethiopia's universe changes ACROSS WAVES: urban households go 503 (2011-12) to
3,655 (2018-19).  ESS W1 covered rural + small towns; later waves added urban
centres.  So anyone running a panel on Ethiopia W1->W5 is pooling different
populations -- household fixed effects across a universe that shifted underneath
them.  Every one of those waves is graded `sane`.

Liberia made the gap visible.  Ethiopia makes it load-bearing: a core ISA
country, one of the most-used panels in the library.

It also settles the shape -- the universe is a property of the (country, wave)
cell, not the country.

## The connection

This is the same move as the rest of the week, pushed one step upstream.  The
`not-asked` mechanism ADJUDICATES absence after the fact.  The capability record
(PR #599) and the population record DECLARE it at acquisition time.  Same
discipline -- stop lumping, demand evidence for terminal states -- applied when
the knowledge is cheapest instead of rediscovered by a probe months later.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ligon

ligon commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

Population-statement survey: all 111 waves, assembled

The per-country documentation sweep is now one reviewable document — slurm_logs/POPULATION_STATEMENTS_2026-07-21.org, in #654 (against development).

It records, for every wave the library ships, what that survey's own documentation says its sample represents: verbatim quotes, exclusions called out in their own block for every wave, and the gaps left as gaps with the full search record.

Headline counts

finding waves
total waves swept (38 country directories) 111
a documented statement of some kind (source_type != not-found) 104
no statement of any kind (source_type = not-found) 7
plus: records NOT FOUND for a universe, fallback coverage claim only 3
…so, waves where no document names the population 10
statement lives in a file this repo ships 63
statement lives only in catalog metadata or a catalog-hosted PDF 41
extractor confidence high / medium / low 84 / 25 / 2

Both gap counts are correct; they answer different questions. 7 is the source_type count. 10 is the answer to "does any document name the population this sample represents?" — the difference is itself a finding.

The rule the sweep obeyed

  • Quotes are verbatim. Sic spellings, source typography and the sources' own internal contradictions are preserved; every PDF-extraction repair is declared per wave.
  • Gaps are recorded as gaps, with what was searched, so the claim is falsifiable.
  • Nothing is inferred from the data. No .dta was opened. Where inheriting a sibling wave's universe would have been defensible (Mali / Niger / Senegal 2021-22 EHCVM-2 panels), it was declined.

Universe-tag distribution

The tag is an editorial reading, not a quote — no document uses these words. It exists so 111 rows can be scanned.

universe tag waves
national-all-households 37
national-claimed 28
region-excluded 18
subnational-area 11
not-stated 7
panel-inherited 5
mixed-national+panel 2
rural-and-small-town 1
specialized 1
agricultural-households 1

national-all-households = the documentation names the population. national-claimed = only "National" / "nationally representative" exists — 65 waves assert national scope, but only 37 name a population.

Five things the evidence shows

  1. 41 of 111 waves' population record does not exist inside the library. It lives on microdata.worldbank.org (two Ghana panel waves: catalog.ihsn.org), and three waves already have a <universe> element that is present and empty. Linking would track a moving target; transcription with a locator is the only durable option observed.
  2. A field literally labelled "Universe" exists for only 47 of 111 waves.
  3. The most repeated sentence in the corpus is boilerplate. "The survey covered all de jure households excluding prisons, hospitals, military barracks, and school dormitories." appears verbatim in 15 waves — including Ethiopia 2018-19/2021-22 and Nigeria 2015-16/2018-19/2023-24, not just the WAEMU countries. It attests a WB NADA template, not a statistical office's claim.
  4. 19 waves subtract a named region by design; exactly one declares an urban exclusion (Ethiopia ESS1). Malawi excludes Likoma through IHS3 and includes it from IHS4 — a real universe break mid-panel.
  5. Specialization mostly appears inside waves, not as whole waves (Serbia and Montenegro's MOP and Roma samples, Azerbaijan's three sub-populations, Iraq 2012's one-third module subsample, Malawi 2016-17/2019-20 reading a cross-section and a panel into one library wave, GLSS3's per-module sub-universes). A wave-level record would flatten all of it.

Also worth noting: "declared universe" and "what the weights represent" come apart in real documents (Ethiopia ESPS-5 weights represent the population excluding Tigray; Nigeria 2018-19 is "representative of areas of Nigeria that were accessible during 2018/19"; Tanzania 2019-20 declares a national universe over an Extended-Panel cohort). And three surveys' documentation denies a well-defined universe outright — China 1995-97 ("not a rigorous random sample drawn from a well-defined population"), EthiopiaRHS ("these data are not nationally representative"), Albania 1996 (purposive over-sampling of poor areas). The library has no way to express that today, and those are the cells most dangerous to pool.

No proposal is made. §5.7 of the document lists 17 unresolved disagreements, including one where the editorial tag contradicts the wave's own UNIVERSE field (Mali 2018-19), flagged rather than adjudicated. Per #601's note, a proposal encoding a judgement about what the library will pool on a user's behalf is a direction decision for Ethan.

Refs #601. PR: #654

Full summary table (111 waves)

source_type and confidence are as recorded by the sweep. The universe tag is my editorial reading, not a quote from any document — see the legend in §2 of slurm_logs/POPULATION_STATEMENTS_2026-07-21.org.

Expand — country, wave, source_type, confidence, universe tag
country wave source_type confidence universe tag (editorial)
Afghanistan 2016-17 local-documentation high national-all-households
Afghanistan 2020 local-documentation high national-all-households
Albania 1996 local-documentation high region-excluded
Albania 2002 wb-catalog high national-all-households
Albania 2003 local-documentation medium panel-inherited
Albania 2004 local-documentation medium panel-inherited
Albania 2005 local-documentation high national-all-households
Albania 2008 not-found high not-stated
Albania 2012 local-documentation low national-claimed
Armenia 1996 wb-catalog high national-all-households
Azerbaijan 1995 wb-catalog high region-excluded
Benin 2018-19 local-documentation high national-all-households
Benin 2018-2019 local-documentation medium national-all-households
Burkina_Faso 2014 local-documentation high national-all-households
Burkina_Faso 2018-19 local-documentation high national-all-households
Burkina_Faso 2021-22 local-documentation high panel-inherited
Cambodia 2019-20 local-documentation medium national-claimed
China 1995-97 local-documentation high subnational-area
CotedIvoire 1985-86 wb-catalog medium national-claimed
CotedIvoire 1986-87 wb-catalog medium national-claimed
CotedIvoire 1987-88 wb-catalog medium national-claimed
CotedIvoire 1988-89 wb-catalog medium national-claimed
CotedIvoire 2018-19 wb-catalog high national-all-households
Ethiopia 2011-12 local-documentation high rural-and-small-town
Ethiopia 2013-14 local-documentation high region-excluded
Ethiopia 2015-16 local-documentation high region-excluded
Ethiopia 2018-19 wb-catalog high national-all-households
Ethiopia 2021-22 wb-catalog high region-excluded
EthiopiaRHS 1989 local-documentation high subnational-area
EthiopiaRHS 1994a local-documentation high subnational-area
EthiopiaRHS 1994b local-documentation high subnational-area
EthiopiaRHS 1995 local-documentation high subnational-area
EthiopiaRHS 1997 local-documentation high subnational-area
EthiopiaRHS 1999 local-documentation high subnational-area
EthiopiaRHS 2004 local-documentation high subnational-area
EthiopiaRHS 2009 local-documentation medium subnational-area
GhanaLSS 1987-88 local-documentation high national-all-households
GhanaLSS 1988-89 local-documentation high national-claimed
GhanaLSS 1991-92 local-documentation high national-all-households
GhanaLSS 1998-99 local-documentation high national-claimed
GhanaLSS 2005-06 local-documentation high national-all-households
GhanaLSS 2012-13 local-documentation high national-all-households
GhanaLSS 2016-17 local-documentation medium national-claimed
GhanaSPS 2009-10 local-documentation high national-claimed
GhanaSPS 2013-14 wb-catalog medium national-claimed
GhanaSPS 2017-18 wb-catalog medium national-claimed
Guatemala 2000 local-documentation high national-all-households
Guinea-Bissau 2018-19 local-documentation high national-all-households
Guyana 1992 wb-catalog high national-claimed
India 1997-98 local-documentation high subnational-area
Iraq 2006-07 local-documentation high national-all-households
Iraq 2012 not-found high not-stated
Kazakhstan 1996 local-documentation medium national-claimed
Kosovo 2000 wb-catalog high national-all-households
Liberia 2018-19 wb-catalog high specialized
Malawi 2004-05 local-documentation medium region-excluded
Malawi 2010-11 local-documentation high region-excluded
Malawi 2013-14 wb-catalog high panel-inherited
Malawi 2016-17 local-documentation high mixed-national+panel
Malawi 2019-20 local-documentation high mixed-national+panel
Mali 2014-15 wb-catalog high region-excluded
Mali 2017-18 local-documentation high region-excluded
Mali 2018-19 local-documentation high region-excluded
Mali 2021-22 not-found high not-stated
Nepal 1995-96 wb-catalog high national-all-households
Nepal 2003-04 not-found high not-stated
Nepal 2010-11 local-documentation high national-all-households
Niger 2011-12 local-documentation high region-excluded
Niger 2014-15 local-documentation high region-excluded
Niger 2018-19 local-documentation high national-all-households
Niger 2021-22 wb-catalog low national-claimed
Nigeria 2010-11 wb-catalog medium national-claimed
Nigeria 2012-13 wb-catalog medium agricultural-households
Nigeria 2015-16 wb-catalog high national-all-households
Nigeria 2018-19 local-documentation high region-excluded
Nigeria 2023-24 wb-catalog high national-all-households
Pakistan 1991 wb-catalog high region-excluded
Panama 1997 wb-catalog high national-all-households
Panama 2003 wb-catalog high national-all-households
Panama 2008 wb-catalog high national-all-households
Peru 1985 wb-catalog high region-excluded
Peru 1990 wb-catalog high subnational-area
Peru 1991 wb-catalog medium national-claimed
Peru 1994 wb-catalog high national-all-households
Senegal 2018-19 local-documentation high national-all-households
Senegal 2021-22 not-found high not-stated
Serbia 2007 local-documentation high region-excluded
Serbia and Montenegro 2002 local-documentation high region-excluded
Serbia and Montenegro 2003 local-documentation high region-excluded
South Africa 1993 wb-catalog high national-all-households
Tajikistan 1999 wb-catalog high national-claimed
Tajikistan 2003 wb-catalog high national-claimed
Tajikistan 2007 local-documentation high national-claimed
Tajikistan 2009 wb-catalog high panel-inherited
Tanzania 2008-09 wb-catalog high national-all-households
Tanzania 2010-11 wb-catalog high national-all-households
Tanzania 2012-13 wb-catalog high national-all-households
Tanzania 2014-15 wb-catalog high national-all-households
Tanzania 2019-20 local-documentation high national-all-households
Tanzania 2020-21 not-found high not-stated
Timor-Leste 2001 not-found high not-stated
Timor-Leste 2007-08 local-documentation high national-all-households
Togo 2018 wb-catalog high national-all-households
Uganda 2005-06 local-documentation medium national-claimed
Uganda 2009-10 local-documentation medium national-claimed
Uganda 2010-11 local-documentation medium national-claimed
Uganda 2011-12 local-documentation medium national-claimed
Uganda 2013-14 local-documentation medium national-claimed
Uganda 2015-16 local-documentation medium national-claimed
Uganda 2018-19 wb-catalog medium national-claimed
Uganda 2019-20 local-documentation medium national-claimed

@ligon

ligon commented Jul 22, 2026

Copy link
Copy Markdown
Owner Author

Is there a de facto DEFAULT urban exclusion in the LSMS-ISA countries?

No. Not declared, and not realised. Exactly one wave in the entire 111-wave library declares an urban restriction (Ethiopia ESS1 2011-12), and it was lifted at the very next wave. Every other LSMS-ISA wave declares a national, explicitly urban-inclusive universe, and the realised samples are 20–55% urban.

But the intuition is not wrong — it is aimed at the wrong object. What is agriculture-shaped in these surveys is module administration, not sample coverage. In its most extreme form, measured here for the first time: Ethiopia ESS4 (2018-19) and ESPS-5 (2021-22) administer the agriculture questionnaire to zero of their 3,655 / 2,674 urban households, while urban households are the majority of the sample. That is the precise statement, and it is very different from "excludes urban".

Of the three claims in play, the evidence supports claim 3 (module applicability) and refutes claims 1 and 2 as characterisations of ISA design.


0. First: a correction to the evidence base (#654 / the sweep document)

The maintainer's pushback on §5.2 is correct and I want to record why, because #603 should not build on the tag ladder as drawn.

§5.2 says the 28 national-claimed waves "offer nothing stronger than 'National', 'national coverage', or 'a nationally representative sample of households'." Those three are not equivalent. The first two are coverage claims. The third names the unit (households) and the scope (national) — it is a universe statement.

All eight Uganda waves were demoted on that basis. Their actual text (§3, verbatim):

The UNPS is carried out annually, over a twelve-month period on a nationally representative sample of households, for the purpose of accommodating the seasonality associated with the composition of and expenditures on consumption.

And Uganda 2005-06 goes further than any tag suggests:

The UNHS sample covers the entire country and was selected in such a way that it will generate estimates for the whole of Uganda, for urban and rural Uganda, and each of the four (statistical) regions…

with strata of representativeness recorded across every UNPS wave as "Kampala City, Other Urban Areas, Central Rural, Eastern Rural, Western Rural, Northern Rural". Urban is a design stratum, not an omission. Uganda declares a national household universe.

A second, independent problem with the ladder, found while checking the first. One identical sentence —

The survey covered all de jure households excluding prisons, hospitals, military barracks, and school dormitories.

— is the population statement for 14 waves across 10 countries (Benin ×2, Burkina Faso, Côte d'Ivoire, Ethiopia ×2, Guinea-Bissau, Mali, Niger, Nigeria ×3, Senegal, Togo), and appears 30 times in the document overall. It is World Bank catalog boilerplate. Yet it earns the top tier (national-all-households), while a country statistical office's own Basic Information Document earns national-claimed. The ladder currently rewards a templated catalog field over a country-authored statement. That inversion should be fixed before #603 relies on the tag counts. The verbatim quotes in §3 are sound throughout — it is only the editorial compression in §2/§5.2 that is not load-bearing.

(Where the wiggle room actually lives — see §5 below — is the household definition, not the scope.)


1. The LSMS-ISA country list, confirmed from the repo

Ethiopia, Malawi, Mali, Niger, Nigeria, Tanzania, Uganda, Burkina Faso — your list is right.

  • ARCHITECTURE.md:8 names the programme; Ethiopia/_/CONTENTS.org:304 states "The Ethiopia Socioeconomic Survey (ESS) is part of the LSMS-ISA program".
  • ⚠️ The only explicit list in the repo is wrong: SkunkWorks/audits/plot_features.md:13 asserts "All 13 LSMS-ISA countries (Ethiopia, Malawi, Nigeria, Tanzania, Uganda, Mali, Niger, Senegal, Burkina_Faso, Benin, Togo, Guinea-Bissau, and the designated GhanaSPS)". The four bolded are EHCVM/WAEMU harmonised-survey countries, a different programme. That memo is repeated in slurm_logs/ handoffs and should be corrected.
  • GhanaSPS is a genuine edge case (EGC-ISSER panel) but cannot participate in this measurement: its data_scheme.yml declares food_acquired only — no sample, no household_roster, no ag tables. Its own config says so: "GhanaSPS has NO sample table (cluster identity unavailable…)".

2. Per-country-per-wave: declared universe / realised urban share / ag-module coverage

urb% = urban share of households in sample(). agR% / agU% = share of rural / urban sampled households appearing in the agriculture modules (plot_features, falling back to crop_production) — i.e. "has at least one plot record".

Country Wave Declared universe (sweep §3) N urb% agR% agU%
Ethiopia 2011-12 rural + small town only ⚠️ 3,969 12.7 85 35
2013-14 national; urban expansion added 5,262 36.8 96 21
2015-16 "nationally representative … rural and urban areas" 4,954 34.0 98 24
2018-19 all de jure households (excl. institutions) 6,770 54.0 89 0 ⚠️
2021-22 as above, less Tigray 4,959 53.9 87 0 ⚠️
Malawi 2004-05 all individuals in selected HHs, 3 regions 11,280 12.8
2010-11 all districts except Likoma, excl. institutions 12,271 18.2 92 39
2013-14 IHPS panel-inherited 4,000 26.2 90 38
2016-17 IHS4 cross-section + IHPS panel 14,955 19.7 88 35
2019-20 IHS5 (incl. Likoma) + IHPS 14,612 19.9 87 34
Mali 2014-15 national "incl. both urban and rural", less Kidal 3,804 36.9 90 10
2017-18 national, less Kidal 8,390 17.5 ⚠️ 89 9
2018-19 all de jure households (boilerplate) 6,602 41.7 68 21
2021-22 not stated 6,143 44.5 68 20
Niger 2011-12 national "incl. both urban and rural", less Arlit strata 3,968 38.8 77 18
2014-15 as above (panel) 3,558 35.8 68 17
2018-19 all de jure households (boilerplate) 6,024 26.2 77 12
2021-22 national-claimed 6,622 37.9 75 16
Nigeria 2010-11 "while having an intensive focus on agriculture, is a national surveyBoth urban and rural EAs were canvassed" 5,000 32.4 79 25
2012-13 catalog says "Agricultural farming household members" ⚠️ 4,859 31.9 79 22
2015-16 all de jure households (boilerplate) 4,696 32.5 80 21
2018-19 as above, less rural Borno 5,263 32.9 88 47
2023-24 as above 5,067 32.3 89 59
Tanzania 2008-09 "all households and individuals in Tanzania" excl. barracks/institutions 3,265 36.8
2010-11 as above 3,924 33.0
2012-13 as above 5,010 35.7
2014-15 as above 4,341 41.5
2019-20 as above (Extended Panel sub-cohort) 1,184 42.4 97 84
2020-21 not stated; Refresh Panel + 545-HH urban booster 4,709 45.6 87 33
Uganda 2005-06 "estimates … for urban and rural Uganda" 3,123 27.5 33
2009-10 "a nationally representative sample of households" 2,975 25.8 92 42
2010-11 as above 2,716 22.5 89 42
2011-12 as above 2,850 20.5 85 45
2013-14 as above 3,119 26.2 91 43
2015-16 as above 3,305 25.3 90 42
2018-19 as above 3,176 25.5 94 48
2019-20 as above 3,078 24.2 93 43
Burkina Faso 2014 "l'ensemble des ménages … représentativité … milieux de résidence (urbain et rural)" 10,411 38.4
2018-19 as above (EHCVM) 7,010 44.9 93 31
2021-22 all de jure households (boilerplate) 3,227 45.5 92 34

= the table is not declared for that wave in the country's data_scheme.yml (a library coverage gap, not a survey fact) — notably all four Tanzania NPS 2008-15 rounds and Malawi IHS2.

Not one wave has an urban share near zero. The range is 12.7% (Ethiopia ESS1 — the one declared exclusion) to 55%. Median ≈ 33%.


3. The headline finding: Ethiopia ESS4 / ESPS-5 administer agriculture to rural EAs only

The agU% = 0 cells above are not a library artifact. I verified them against the raw source, bypassing the library join entirely (sect3_pp_w4.dta / sect3_pp_w5.dta vs the household cover page saq14):

=== 2018-19  sect3_pp_w4.dta (19339,135) | sect_cover_hh_w4.dta (6770,20)
  HH in cover by rural x in-ag-file:
  _inag   False   True
  RURAL     356   2759
  URBAN    3655      0        <-- zero of 3,655 urban households
=== 2021-22  sect3_pp_w5.dta (14878,145) | sect_cover_hh_w5.dta (4959,25)
  RURAL     306   1979
  URBAN    2674      0        <-- zero of 2,674 urban households

The library config (Ethiopia/2018-19/_/plot_features.py) applies no rural filter — it reads the post-planting files whole. The restriction is in the survey.

This is corroborated by the declared design, which the sweep records but does not connect: ESS rural EAs are "a subsample of the 2018 AgSS EA sample; 10 agricultural + 2 non-agricultural households per rural EA, 15 households per urban EA". The agricultural frame linkage exists only on the rural side.

And it is a change. ESS1–ESS3 did put urban (small-town) households through the ag modules — 174 / 414 / 411 of them. ESS4 stopped. So within one country the library now spans two different module regimes under one feature name, with no record of the difference.

This is exactly the kind of fact #603 exists to represent, and it is invisible in every wave-level universe statement.


4. Did the design change over time? Yes — twice, in opposite directions

  1. Ethiopia ESS1 → ESS2 (the urban expansion). The one declared urban exclusion in the library, and it lasted exactly one wave. Measured: urban share 12.7% → 36.8%. The ESS3 BID states the mechanism: "this expansion means now that all households in Ethiopia have some positive probability of selection into the expanded ESS2 sample." Your "ISA changed" hypothesis is confirmed — but it changed once, in one country, fourteen years ago, and toward inclusion.
  2. Ethiopia ESS3 → ESS4 (the module contraction). Urban share kept rising (34% → 54%) while urban ag-module coverage went 24% → 0%. Sample and module moved in opposite directions.

Elsewhere the trend is uniformly toward more urban: Tanzania added a 545-household urban booster in 2020-21 (Tanzania/_/CONTENTS.org:409); Nigeria's urban ag coverage rose 25% → 59%; Malawi added Likoma at IHS4.

⚠️ A live caveat found in Ethiopia/_/CONTENTS.org:304-306, which #603 should not inherit: "covering rural and small-town areas in waves 1-3, expanding to include all urban areas from wave 2 onward." Self-contradictory, and the first half is false. The strata table 20 lines below has it right (2011-12: "No Addis Ababa, Dire Dawa Urban"; 2013-14: "Adds Addis Ababa, Dire Dawa Urban"), and my measurement confirms the table, not the prose.


5. Where the ambiguity actually is: the household definition

Scope is well declared. The unit is where ISA waves genuinely differ:

Country Residence / membership rule Institutional exclusion
Ethiopia (ESS4, ESPS-5) de jure prisons, hospitals, barracks, dormitories
Nigeria (W3–W5) de jure same sentence, verbatim
Niger 2018-19, Mali 2018-19, Burkina Faso 2021-22 de jure same sentence, verbatim
Tanzania (all NPS) "all households and individuals in Tanzania"; eligibility = any member aged 15+, excluding live-in servants military barracks, other institutions
Malawi IHS3 households + persons in them institutions
Malawi IHS4 private dwellings only; explicitly not restricted to Malawian citizens; non-Malawian diplomats and tourists excluded prisons, hospitals, barracks
Malawi IHPS tracked individuals: "neither servants nor guests … projected to be at least 12 years of age" + Likoma
Burkina Faso (EMC/EHCVM) "l'ensemble des ménages, toutes catégories confondues, nationaux ou non, résidant sur le territoire national" — residence-based, includes non-nationals
Uganda none stated in any of the eight waves none stated

Three materially different rules are in play (de jure vs. residence-based vs. age-gated eligibility), and Tanzania's "any member aged 15+, excluding live-in servants" is a genuine restriction on which households qualify — not just which people get interviewed. Uganda's silence is the real gap, and it is a gap about the unit, which is exactly the maintainer's "wiggle room".


6. Does the answer differ between ISA and the rest of the library? Yes — sharply

Declared urban exclusion Realised urban share
LSMS-ISA (8 countries, 39 waves) 1 wave (Ethiopia ESS1) 12.7 – 55%
EthiopiaRHS (8 waves) subnational — 15 peasant associations 0.0% in all 8 waves
Côte d'Ivoire (5 waves, non-ISA) national-claimed / national 40.6 – 50.0%
Senegal / Togo (EHCVM, non-ISA) national 36.8 – 55.1%

The contrast that matters for #603: the library does contain genuinely rural-only surveys, and they do not look like this. EthiopiaRHS is 0.0% urban across every wave and every household — a flat, unambiguous signal. China 1995-97 and India 1997-98 are the same shape (§5.3 records both as rural in fact while declining to write it as a universe). The ISA countries look nothing like them. Whatever representation #603 chooses needs to separate those two populations cleanly, and the realised urban share does so without ambiguity.

Also worth noting: Nigeria 2012-13's agricultural-households tag is now measurably refuted. The catalog's Universe field reads "Agricultural farming household members.", contradicting the wave's own BID ("re-interview all of the Wave 1 households"). The data settle it: 1,549 urban households are in the sample and the roster, and 78% of them have no plot record at all. It is a national sample. The tag should be dropped, which also removes the sweep's agricultural-households category entirely (n=1).


7. Data-quality issues surfaced in passing (not the assignment; reporting rather than dropping)

  1. Uganda 2005-06 sample().Rural is broken — 2,263 rural households carry the literal string '0' instead of 'Rural' (the 860 urban rows are fine). Every other Uganda wave is clean. Any Rural == 'Rural' filter silently drops the entire 2005-06 rural sample.
  2. Mali cluster_features().Rural is unharmonised — carries raw French Rural / Urbain / Autre urbain / Urbain (District de Bamako), and the vocabulary differs by wave. sample().Rural for Mali is canonical, so the two disagree.
  3. GhanaLSS sample().Rural is NaN for 4 of 7 waves (1987-88, 1988-89, 1998-99, 2005-06 — 21,024 rows), and 1991-92 uses a non-canonical Semi-urban.
  4. Ethiopia ag-module ID leakage — 120 (2018-19) and 40 (2021-22) households appear in the agriculture files but not the household cover page.

Happy to file these separately if useful; none of them changes any conclusion above.


8. Method / caveats

  • Documentation evidence is cited, not re-derived, from origin/docs/601-population-statements §3 verbatim quotes. I re-read the quotes rather than the editorial tags, per the correction above.
  • Measurement via the Country API on the shared warm cache (v0.8.0 content-hash invalidation active; no config was modified, so cached parquets are valid by construction). LSMS_COUNTRIES_ROOT and PYTHONPATH were pinned to the worktree and asserted at runtime (assert 'worktrees' in lsms_library.__file__). No dvc CLI was invoked.
  • The agU%/agR% proxy is "household appears in plot_features (else crop_production)". It measures plot-holding as recorded, so it conflates "not asked" with "asked, has no plot" — except in Ethiopia ESS4/ESPS-5, where I went to the raw source and separated them exactly. For the other countries the finding is the weaker but sufficient one: urban ag coverage is 9–84%, nowhere near zero.
  • Each ISA country's _/CONTENTS.org was read, including LOGBOOK/WAITING/TODO. What that turned up: the Ethiopia wave-1-3 contradiction (§4), the Tanzania urban booster (§4), Uganda's open TODO Investigate 2005-06 strata vs later sub-regions confirming the 6 strata are "Kampala + 4 regions × urban/rural", Uganda's TODO Missing panel weight for 2019-20, and Nigeria's Caveats / blockers (W1 has no soil/irrigation/tenure-system; TenureSystem W5 only) — none of which bears on urban coverage.
  • Per the brief, no schema is proposed. This is evidence only.

ligon added a commit that referenced this pull request Jul 22, 2026
docs(#603): population-statement survey — all 111 waves, verbatim
ligon added a commit that referenced this pull request Jul 22, 2026
…in 38 country CONTENTS.org

For each country, a new "Sampling universe, exclusions and sub-samples"
section records *what the survey documentation claims the sample
represents* -- verbatim, with a file/page or catalog-field citation for
every quote, and with gaps recorded as gaps (naming what was searched)
rather than filled by inference.

This is EVIDENCE ONLY.  No schema, YAML key, or code change is proposed
here: GH #603 owns the representation decision.  Nothing in these
sections is inferred from the .dta files -- what a survey claims and what
its microdata contain are kept strictly apart.

Placement follows each file's existing structure: sections sit beside the
country's existing "Sampling Design" / "Survey Program" material where
that exists, and above the issue list otherwise.  Malawi and Uganda are
filed one level down as the last subsection of their existing "Sampling
Design" section.  Four countries had no _/CONTENTS.org and get one
(Afghanistan, Armenia, Peru, Serbia and Montenegro).

Where the new evidence contradicts text already in a file, both sides are
quoted and the disagreement is flagged in place -- nothing existing was
edited or deleted (Azerbaijan weights, CotedIvoire CILSS panel shape,
Ethiopia ESS1 coverage, GhanaLSS GLSS1/2 rotating panel, Guinea-Bissau
vague/grappe, Mali EHCVM-vs-EAC-I, Nepal panel, Nigeria wt_wave5, Uganda
refresh cadence).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Su5JKX3wKChyfMAdXrdCTr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant