Sources, age weights and missing data
Table of contents
The labor-force growth overview explains the economic interpretation and regional growth calculation. This page describes the inputs to the age-adjusted construction, including what the current loader actually does when source coverage is incomplete.
Data sources
| Input | Source and purpose |
|---|---|
| Population by single age | UN Population Division, World Population Prospects, accessed through the UN Data Portal; provides country age distributions through time |
| Labor income per person by age | National Transfer Accounts database, variable YL; supplies relative age-income profiles |
| Country identities and proxies | G-Cubed’s maintained ISO3 identifiers, GTAP country codes and NTA reference-country links |
| Model-region membership | G-Cubed’s maintained mapping from GTAP countries to model regions, for the selected GTAP version and regional aggregation |
World Population Prospects supplies population estimates and projections, including data by single age. These are population counts, not a survey of the economically active labor force. The age-adjusted method uses all available ages, rather than imposing a 15–64 working-age cutoff.
NTA YL measures labor income per person of each age in nominal local currency. It includes employee compensation and the labor component of self-employment income. The profile therefore combines differences in economic activity and earnings across ages. See the NTA labor-income methodology. Country survey years differ; they are not a synchronized panel of annual future productivity observations.
Required UN layout
The active reader uses these four case-sensitive columns:
| Column | Meaning |
|---|---|
Iso3 | Country ISO3 code |
Time | Calendar year |
Age | Single age 0 to 99, plus 100+ |
Value | Population at that age and year |
It pivots (Iso3, Time, Age) into a country/year table with age columns, converts 100+ to 100, and multiplies Value by 1,000 under the assumption that the export is in thousands. Duplicate country/year/age observations cannot be pivoted into this layout. Select one consistent sex, projection statistic and source vintage before loading: the reader does not use the extra metadata columns to make those selections.
Required NTA layout and normalization
The NTA reader takes iso_3_country_code and age0 through age100. It replaces blank age cells with zero and divides each profile by its arithmetic mean over the 101 age columns:
The denominator is an unweighted mean across ages, including the zero-filled cells. The normalized profile has mean one across its age columns, but its population-weighted mean can differ from one and change over time.
Country proxy assignment
The country table’s nta_reference_iso_3_country_code field defines which country’s normalized profile a country receives. The loader copies profiles recursively down these reference chains. This assignment happens before population is weighted and before countries are aggregated into model regions.
A proxy assignment overwrites a country’s existing NTA profile. It is not limited to filling countries absent from the NTA extract. The implementation starts its recursion from the country table’s general self-referencing countries (reference_iso_3_country_code), then follows NTA reference links. It does not start from the separate list of NTA self-referencing countries. Keep both reference structures in view when reviewing a changed mapping.
Each UN country/year row is multiplied by that country’s assigned profile. The design permits different assigned country profiles within one aggregate G-Cubed region. The current mapping and loader have the more restrictive behavior described below.
Current source snapshot
This snapshot describes the data inputs and construction reviewed on 11 October 2026. Newer provider releases and previously generated model inputs may differ.
| Property | Inspected value |
|---|---|
| UN source metadata | World Population Prospects; SourceYear=2024; indicator 47, population by 1-year age groups and sex; Median; Both sexes |
| UN coverage | 236 countries/areas, every year 2020–2100, 101 age categories; 1,930,716 observations with complete core values |
| NTA extract | 67 country profiles, reference years 1996–2016, variable YL; a mixture of Mean and Smooth Mean labels |
| Effective proxy result | All 249 country-table profiles become identical to the USA profile after loading |
| Effective profile vintage | USA, 2003, with terminal age group recorded as 90+ |
Although the raw NTA extract contains 67 countries, the current loading path ultimately copies the USA profile to every country, including the other countries with their own source observations. Thus current cross-country differences in effective-labor growth arise from population paths and age distributions, not different national income-by-age profiles. Regional membership and subsequent smoothing also affect the final rates.
The NTA loader ignores the last age metadata. For the effective USA profile, it uses the 90+ observation in the age90 column only at UN age 90; blank ages 91–100 become zero. It does not spread or extend that terminal-group value across older ages. The raw extract contains other terminal groupings too, so this issue also matters if country-specific profiles are restored. The construction therefore should not be described as a full reconciliation of the sources’ oldest-age groups.
Missing data and coverage
| Situation | Implemented behavior and implication |
|---|---|
| Blank NTA age cell | Replaced with zero before normalization. This treats an unreported cell as zero labor income; no age interpolation is performed. |
| Missing country profile | The configured proxy chain can supply a full profile. Remaining missing weights for countries actually used by the UN calculation cause an assertion failure. |
| Missing or all-zero root profile | Normalization produces missing weights, which the root/reference checks reject. There is no estimated fallback profile. |
| Country assigned a proxy despite having direct NTA data | The proxy profile replaces the direct data. Source presence alone does not protect a country’s observations. |
| An age column absent from UN data | Only shared age columns are used. The code checks that at least one age overlaps, rather than requiring all 101. |
| A missing UN value within a country/year | The age sum skips missing values using pandas’ default sum behavior. It is not imputed; an all-missing age row can sum to zero. |
| Country absent from the UN age extract | The age-adjusted method creates no population proxy or replacement row. Regional sums include the countries actually present and mapped. |
| Missing country mapping | Entries without required identifiers are dropped; regional aggregation uses inner joins. A missing contributor can reduce a region’s total, whereas an entirely absent required region fails the final region selection. |
| Entire country/year missing | No general interpolation or balanced-panel check is implemented. Subsequent sums can omit missing contributions, making coverage changes look like demographic changes. |
| Source years beyond the UN endpoint | Constant effective-labor levels are added as scaffolding, then growth is continued with the smoothing algorithm. This is a terminal assumption, not missing historical-data estimation. |
For the inspected GTAP-12 country mapping, 13 mapped ISO3 codes have no separate rows in the UN extract: ALA, ATF, BVT, CCK, CXR, HMD, IOT, NFK, PCN, SGS, SJM, UMI, and VAT. Several represent uninhabited territories. The age-adjusted method adds no replacement contribution for them; this inventory alone does not determine whether a provider includes a territory in another area’s population.
The complete age/year coverage of the current 236 UN areas does not remove the country-coverage or profile-assignment qualifications above. When inputs change, check country membership, all expected years and ages, positive effective-labor totals, and finite output rates explicitly. The loader’s assertions are not a comprehensive data-quality audit.
Other construction paths
For symmetric two-region models, the standard age-adjusted writer copies the first region’s finished growth-rate path to the other region before writing the CSV. That deliberate symmetry override takes precedence over the second region’s independently constructed demographic path.
G-Cubed