Current Diets¶
Overview¶
The model represents current consumption patterns by combining a
configurable primary intake source (diet.source) — the GDD-IA
dataset (the default) or the FAOSTAT FBS-derived estimate — with
the optional GBD risk-factor anchor and the
NHANES USA override, plus item-level food supply data from FAOSTAT
for within-group disaggregation. The pipeline produces a single
per-country, per-food baseline diet whose mass basis is aligned with
what the model’s food bus delivers after applying food loss and waste.
The baseline diet serves several roles:
Health impact assessment: dietary risk exposure for the burden of disease attributable to current diets.
Optimization reference: comparison point for optimized diets and, optionally, an equality constraint when
enforce_baseline_dietis enabled.Calibration: anchors the consumer-utility piecewise blocks (Consumer Values) and the production-stability L1 calibration (Calibration).
Population-weighted mean food group consumption (g/person/day) by UN M49 macro-region, showing how dietary patterns vary across world regions.¶
Global population-weighted mean consumption (g/person/day) broken down by individual foods within each food group.¶
Data Sources¶
- Global Dietary Database for Impact Assessments (GDD-IA)
Provider: Marco Springmann (University College London) [Springmann2026]. GDD-IA combines regional food availability and food-waste estimates, socio-demographic variation in intake from dietary surveys, and energy-intake estimates based on measurements of body weight, height and physical activity, to produce complete diets with absolute intake levels that are comparable across regions. It is a distinct dataset from the Tufts University Global Dietary Database (GDD), which GLADE does not use.
Status: Published and openly licensed (CC-BY-4.0); retrieved automatically from Zenodo, so it needs no manual download. This is GLADE’s default intake source.
Coverage: 171 source countries, with 12 of GLADE’s 175 default countries filled from configured proxies. Intake is reported in parallel grams/day and kcal/day for every food category. The Zenodo record covers 1990-2020 in five-year steps; the workflow warns and uses the closest release when
baseline_yearfalls between them.Role: With
diet.source: gdd_ia(the default), primary source of per-country food-group totals for all food groups except the GBD-anchored risk groups (see below).
- Global Burden of Disease (GBD) 2019 dietary risk exposure
Provider: Institute for Health Metrics and Evaluation (IHME) [Brauer2024]
Coverage: country-level mean intake (g/day) for the GBD dietary risk factors, adults 25+.
Role: optionally anchors the risk-factor food groups (fruits, vegetables, whole_grains, legumes, nuts_seeds, red_meat) so the baseline lines up with the same exposure basis the GBD relative-risk functions were calibrated against. Controlled by
diet.anchor_groups_to_gbd(see GBD Anchoring of Risk-Factor Groups (optional)). When anchoring is off, these groups use the GDD-IA/FAOSTAT estimate like every other group and this dataset is not needed on disk.
- NHANES — What We Eat in America / FPED
Provider: USDA ARS / CDC NHANES
Coverage: United States; population-mean intake per food group derived from the FPED demographic table.
Role: USA-only override for every food group it covers.
- FAOSTAT FBS + QCL
Provider: FAO Statistics Division
Role: With
diet.source: fbs, FBS energy supply is also the source of the food-group totals themselves (see FBS-Derived Baseline Diet (alternative)). Independently of the source, item-level supply (FBS) drives within-group disaggregation of food-group totals into per-food consumption; production statistics (QCL) resolve shared FBS items (e.g. several millet species under one FBS code) and weight module-pool projections (see Step 2: Within-group food shares); and FBS supply serves as the anchor source for the foods indiet.fbs_override_foods(meats, eggs, yam, coffee, cocoa).
Weight Conventions¶
The FBS source needs no mass-basis conversions: its group masses are derived from FBS energy at model-basis densities (see FBS-Derived Baseline Diet (alternative)). The conventions below apply to the GDD-IA source.
GDD-IA reports intake “as consumed” (cooked weight for cereals and
meats, fresh weight for fruits and vegetables). The pipeline derives the
food-group mass values that downstream rules consume in the model’s
basis, so no further conversion is needed when reading
dietary_intake.csv:
For most groups (cereals, vegetables, fruits, nuts/seeds, oil, sugar, legumes, poultry, eggs) the IA-reported grams are already close enough to the model basis to be passed through as-is.
Red meat is inflated from cooked to raw retail mass by the configured
diet.gdd_ia.cooked_to_rawfactor (default 1.43, i.e.1/0.7).Dairy mass is derived from energy at cow-milk density (0.607 kcal/g) so the value is on a strict cow-milk-equivalent basis. All dairy subcategories reported by GDD-IA (fluid milk, yoghurt, cheese, condensed/evaporated, ice cream, butter, cream) are pooled by energy before the conversion.
GBD exposure is converted to the model basis at load time via
diet.source_basis and weight_conversion (cooked→dry for
whole_grains and legumes at 0.45 and 0.40; cooked→fresh for
red_meat at 1.43). NHANES values are intake-based and pass through
unchanged.
Units in the merged dietary_intake.csv distinguish g/day (fresh
wt) from g/day (milk equiv) for dairy and g/day (refined sugar
eq) for sugar.
FBS-Derived Baseline Diet (alternative)¶
With diet.source: fbs, the per-(country, food-group) intake totals
are derived from FAOSTAT Food Balance Sheets instead of GDD-IA. The
rule prepare_fbs_dietary_intake computes, per country and group,
where \(\text{kcal}_i\) is the FBS “Food supply (kcal/capita/day)” element for FBS item \(i\), \(w_g\) the group’s consumer waste fraction, and \(k_i\) the model-basis energy density (kcal/g, nutrition.csv) of the item’s mapped food(s). Deriving mass from energy rather than from the FBS mass element sidesteps per-item mass-basis bookkeeping: FAO’s nutritive factors already net out flour extraction, refuse fractions, and carcass-to-retail conversion, so dividing by the model-basis density lands directly in model basis — the same convention the GDD-IA pipeline uses for dairy. The FBS “Food supply” element is net of supply-chain losses, so only consumer waste is deducted.
Item-to-group attribution follows the food-to-FBS-item mapping used by
the within-group shares (each item counted once per group), with a few
special cases (see workflow/scripts/diet/fbs_intake.py for the full
rules):
Wheat, rice and maize (FBS 2511, 2807, 2514) are the only items whose foods span two groups: FBS does not distinguish whole-grain from refined consumption, so
diet.fbs.whole_grain_sharessets the fraction of each item’s energy consumed as the whole-grain food (flour-wholemeal,rice-brown,maize-whole); the remainder goes to the refined counterpart. The defaults come from a population-weighted least-squares fit of the FBS-derived per-country whole-grain intake to the GBD whole-grain exposure estimate.Dairy folds butter and cream energy into the milk item at cow-milk density (strict milk-equivalent mass, matching GDD-IA).
Oil uses the FBS “Vegetable Oils” aggregate (2914) so unmodelled oils are included in the group total.
Unmapped pool items (pineapples, dates, “other” residuals) count toward their projection pool’s group at the mean density of the pool’s recipient foods.
Stimulants are not emitted: all three stimulants foods are
diet.fbs_override_foodsand get their per-food intake directly from FBS mass supply inestimate_baseline_diet.
Because the masses are derived from FBS energy at the same densities used by the kcal accounting, the FBS diet is FAO-energy-consistent by construction and the kcal-normalisation step (Step 1c below) is skipped. GBD anchoring, the NHANES USA override, the FBS per-food overrides, and the within-group disaggregation apply unchanged.
The FBS-derived diet is supply-based: it inherits FBS’s known biases relative to intake surveys beyond what the waste fractions correct. GDD-IA reconciles those supply estimates against survey intake and energy requirements, which is why it is the default. The baseline diet is structural, so a calibration artefact set fit against one source is not valid for the other; no FBS-fit set is shipped, so using this source means recalibrating first (see Calibration).
GBD Anchoring of Risk-Factor Groups (optional)¶
For the six GBD dietary risk-factor groups (fruits,
vegetables, whole_grains, legumes, nuts_seeds,
red_meat) the per-country food-group total can optionally be taken
from GBD dietary-exposure intake instead of the GDD-IA/FAOSTAT estimate.
The point of anchoring is basis consistency with the health module:
the GBD relative-risk dose-response curves are calibrated against GBD’s
own intake exposure, so a GBD-anchored baseline makes the model’s
attributable-burden numbers directly comparable to GBD’s.
Controlled by diet.anchor_groups_to_gbd:
match_health(default) – followhealth.enabled. A health run anchors; a no-health run does not.true/false– force anchoring on or off, decoupled from the health module.
When anchoring is on, the run needs the manually-downloaded IHME GBD data (see Data Sources); when off, it needs none of it.
When to turn it on¶
Turn anchoring on when you care about compatibility with GBD health metrics – i.e. whenever the health module is enabled, or when comparing the model’s diet-attributable disease burden against GBD estimates. Otherwise the GDD-IA/FAOSTAT baseline (anchoring off) is a perfectly reasonable diet and avoids the manual GBD download entirely; this is the default for a no-health run.
How much does it change the baseline diet?¶
The switch is not cosmetic at the diet level. Across ~174 countries, anchoring moves the per-country total of every risk-factor group, and in about half of the affected country-group cells by more than 50 % relative. The direction is systematic (values below are the mean per-country shift, anchored minus non-anchored, g/day):
Group |
Mean shift (g/day) |
Direction |
|---|---|---|
vegetables |
-56 |
anchoring lowers vegetable intake (e.g. ~172 -> ~116 g/day mean) |
red_meat |
-35 |
lowers in ~98 % of countries |
legumes |
-15 |
lowers in ~94 % of countries |
nuts_seeds |
-6 |
lowers in ~95 % of countries |
whole_grains |
-4.5 (mixed) |
large relative swings; GBD is often much higher where GDD-IA reports near-zero whole grain |
fruits |
+2.4 (mixed) |
roughly unchanged on average, country-specific either way |
In words: the GBD-anchored (“health-on”) baseline has systematically less vegetables, red meat, legumes and nuts than the GDD-IA/FAOSTAT (“health-off”) baseline, and a markedly different whole-grain profile.
Whether this matters for physical outcomes depends on the question. From a global agricultural and land-use perspective the effect is expected to be modest – the shifts are partly redistributive within the diet and are further absorbed by the production-stability calibration (see Calibration) – though not strictly negligible. The reason to anchor is primarily health-metric compatibility, not a large expected change in land use or emissions.
Caveat: the option is not exactly “only the six risk groups”
Anchoring whole_grains to GBD’s narrow whole-grain definition can
discard cereal energy that GDD-IA reports more broadly. To preserve
each country’s cereal energy budget, a cereal residual fix
reassigns that deficit to refined grain (see
apply_cereal_residual_fix in estimate_baseline_diet.py), and
the kcal normalisation then treats refined grain as anchored too.
So enabling anchoring also adjusts refined grain even though it is
not itself a GBD risk factor. The fix only runs when whole_grains
is anchored, so it is inert when anchoring is off.
Calibration coupling
The calibration artefacts under data/curated/calibration/ are fit
against a specific baseline diet. Two sets are committed: default
(anchoring off) and gbd-anchored (anchoring on, used by the
health-enabled configs via calibration.source). Changing
diet.anchor_groups_to_gbd (or health.enabled, which drives it)
changes the baseline diet, so point calibration.source at the
matching set – the provenance check errors otherwise (see
Calibration).
GDD-IA to Food Group Mapping¶
GDD-IA’s food categories are mapped onto the model’s food groups in
workflow/scripts/prepare_gdd_ia_dietary_intake.py. The mapping
covers every food group the model uses (fruits, vegetables,
starchy_vegetable, legumes, nuts_seeds, oil, sugar,
grain, whole_grains, red_meat, poultry, dairy,
eggs, plus stimulants for downstream tea/coffee handling).
Categories that are out of scope for the model (alcohol, seafood,
spices, rendered animal fats, miscellaneous “other”) are excluded from
food-group totals but their energy is tracked separately for the
kcal-normalisation step described below. Cereals keep GDD-IA’s total
energy but not its whole/processed split (which counts decorticated
millet and sorghum as processed, unlike the model’s food taxonomy):
the total cereal kcal is re-split between grain and
whole_grains by the country’s FBS cereal composition, using the
same item attribution and diet.fbs.whole_grain_shares as the FBS
diet source. Plantain is routed to
starchy_vegetable; and all red-meat subcategories (including
processed) are folded into red_meat so the consumption side stays
consistent with FAOSTAT slaughter-volume animal production.
Country Coverage¶
GDD-IA covers 171 countries. Twelve of GLADE’s 175 default countries do
not have separate IA estimates, so the pipeline copies values from a
configured proxy. The built-in proxies live in
workflow/scripts/prepare_gdd_ia_dietary_intake.py and can be
extended via diet.gdd_ia.country_proxies in the config:
Missing country |
Proxy |
Rationale |
|---|---|---|
Afghanistan (AFG) |
Iran (IRN) |
Persian/Pashtun dietary similarity. |
American Samoa (ASM) |
Samoa (WSM) |
Pacific islands; geographic proximity. |
Brunei (BRN) |
Malaysia (MYS) |
Regional similarity. |
Bhutan (BTN) |
Nepal (NPL) |
Himalayan diet. |
Eritrea (ERI) |
Ethiopia (ETH) |
Existing convention. |
Equatorial Guinea (GNQ) |
Cameroon (CMR) |
Central African neighbour. |
French Guiana (GUF) |
France (FRA) |
French overseas territory. |
Palestine (PSE) |
Jordan (JOR) |
Regional similarity. |
Puerto Rico (PRI) |
United States (USA) |
US territory. |
Somalia (SOM) |
Ethiopia (ETH) |
Existing convention. |
South Sudan (SSD) |
Sudan (SDN) |
Regional and historical ties. |
Taiwan (TWN) |
China (CHN) |
Regional similarity. |
Data Processing¶
The diet pipeline runs in three preparation stages followed by the baseline-diet estimation:
Prepare the group-intake source (
diet.source):fbs—prepare_fbs_dietary_intakederives per-(country, food group) intake from FBS energy supply (see FBS-Derived Baseline Diet (alternative)) intofbs_dietary_intake.csv.gdd_ia(default) —prepare_gdd_ia_dietary_intakereads the parallel grams and kcal CSVs, maps GDD-IA’s food categories to the model’s food groups, derives the per-food-group mass in model basis (pooling all dairy subcategories by energy, applying the cooked-to-raw meat inflation), and emits two files:gdd_ia_dietary_intake.csv— per-(country, food group) intake (g/day) at age =All ages.gdd_ia_kcal_target.csv— per-country kcal accounting: the total dietary energy, the out-of-scope subtotal, the in-scope target (total minus out-of-scope), and the refined / whole-grain cereal energy split. Consumed by the cereal residual fix and the kcal-normalisation step inestimate_baseline_diet.
Prepare NHANES (
prepare_nhanes_dietary_intake): parses the USDA FPED demographic-table PDF for the configured cycle and emits USA-only per-food-group intake with the FAOSTAT butter top-up, cured-meat fold, and fruit-juice projection (see Data Sources for the FPED specifics).Merge sources (
merge_dietary_sources): NHANES overrides the group-intake source for the (country, item) pairs it covers; the merged filedietary_intake.csvis the input toestimate_baseline_diet.
The GBD risk-exposure data is processed independently by
prepare_gbd_food_group_intake into
gbd_food_group_intake.csv and is read directly by
estimate_baseline_diet for the GBD-anchored groups.
Output Format¶
dietary_intake.csv:
unit,item,country,age,year,value
g/day (milk equiv),dairy,USA,All ages,2018,...
g/day (fresh wt),fruits,USA,All ages,2018,...
...
unit:g/day (fresh wt),g/day (milk equiv)(dairy), org/day (refined sugar eq)(sugar).item: food group name.country: ISO 3166-1 alpha-3 code.age:All agesfor GDD-IA and FBS rows; NHANES uses the configureddiet.baseline_ageliteral (the FPED single population-mean row).year: reference year.value: mean daily intake in grams per person, in model basis.
Baseline Diet Estimation¶
The dietary intake stage produces food-group-level totals. The
optimization model operates at the level of individual foods, so
workflow/scripts/estimate_baseline_diet.py disaggregates the totals
into per-(country, food) consumption estimates and applies a small
number of consistency fixes:
Step 1: Food group totals¶
For groups in health.risk_factors (currently fruits,
vegetables, whole_grains, legumes, nuts_seeds,
red_meat) the per-country total is taken from GBD when GBD reports
a value and falls back to the merged source/NHANES value otherwise.
GBD strictly takes precedence on these groups — no averaging — so the
baseline is on the same intake basis the GBD relative-risk functions are
calibrated against. All other groups use the configured group-intake
source (or NHANES for the USA).
GBD exposure is converted to the model’s basis at load time, per
food-group, using diet.source_basis plus per-(source, country,
food_group) overrides from data/curated/diet_source_basis_overrides.csv
and the conversion tables in weight_conversion. The script also
logs cross-validation metrics: median and range of the source/GBD ratio
across countries for every risk group, and GBD’s milk exposure as a
cross-check on the dairy total.
Step 1b: Cereal residual fix¶
GBD’s whole_grains risk factor is defined narrowly (dry whole-grain
flour). GDD-IA’s whole_grains is broader (any product with
substantial whole-grain content). When Step 1 anchors whole_grains
to GBD, ~250 kcal/day of cereal energy can disappear from the country’s
cereal budget. To preserve the cereal energy budget, the deficit is
reassigned to refined ``grain``:
For the GDD-IA source the cereal kcal pool comes from
gdd_ia_kcal_target.csv (basis-aware), not from nutrition.csv
per-group averages; for the FBS source it is reconstructed from the
pre-anchoring group totals at model-basis densities, which reproduces
the FBS cereal energy exactly.
Step 1c: Anchor-aware kcal normalisation (GDD-IA source only)¶
This step runs only for diet.source: gdd_ia; the FBS-derived diet
is FAO-energy-consistent by construction (see
FBS-Derived Baseline Diet (alternative)).
For each country, the unanchored groups are scaled by a single
multiplicative factor so that total kcal across all groups lands on
the in-scope dietary-energy target from gdd_ia_kcal_target.csv
(total energy minus the out-of-scope subtotal). GBD-anchored groups
and the refined-grain residual from Step 1b are held fixed. The factor
is clipped to [0.1, 5.0] to guard against pathological values;
the mean, std, and range of the factor across countries are logged.
Step 3: Per-food consumption¶
Per-food consumption is the product of the food-group total (post Steps 1b and 1c) and the within-group share:
As a validation check, the within-group sums are verified to match the group totals to within 0.1 g/day (excluding foods that will be replaced by FBS overrides in Step 4).
Step 4: FBS supply overrides¶
For foods listed in diet.fbs_override_foods the Step-3 estimate is
replaced with an FBS-supply-anchored intake. The override formula is
where
\(S_{i,f}\) is the FAOSTAT FBS supply (kg/capita/year) for the food’s FBS items (carcass-weight for meat);
\(\sigma_{i,f}\) is the within-FBS-item share (1.0 unless several override foods share an FBS code, in which case the supply is split between them by country-level QCL production weights — e.g. dairy / dairy-buffalo both map to FBS 2848);
\(r_f\) is the carcass-to-retail factor for meat (0.67 cattle, 0.73 pig, 0.66 sheep, 0.60 chicken; 1.0 for non-meat foods);
\(w_{i,g(f)}\) is the country- and group-level consumer-waste fraction from
processing/{name}/food_loss_waste.csv.
Note that the override deducts only consumer waste, not
supply-chain loss: the FAOSTAT FBS “Food supply” element is already net
of production-side losses (production − feed − seed − processing −
other − losses = food). The \((1-w)\) factor lands the override on
the same post-FLW intake basis the model’s food_processing and
animal_production links deliver after applying their FLW
multipliers, so the diet mass-balances against the food bus.
Why yam needs an override
GDD-IA / GBD starchy-vegetable intake for sub-Saharan Africa is well below FAOSTAT food supply (e.g. Nigeria: GBD ≈ 70 g/day vs. FBS ≈ 700 g/day for starchy vegetables). Because yam production is almost entirely concentrated in West Africa, the within-group underestimate translates directly into a ~10× underestimate of yam demand. The within-group shares are correct — the problem is in the group total — so overriding yam consumption with FBS supply ensures the model’s demand matches observed food availability.
Why animal products use FBS, not survey intake
For meats, poultry, and eggs the per-food intake is anchored to FAOSTAT FBS supply rather than the survey-disaggregated group total. Three reasons:
Survey bias on socially significant foods. Self-reported food intake systematically over-reports red meat against slaughter- volume supply in many populations. GDD-IA harmonises survey data but does not reconcile against production. The combined intake total for red meat sat ~24 Mt/yr above what total world supply (production net of feed/non-food/exports, after post-loss and consumer waste) can deliver — physically impossible — and inflates the calibrated
feedL1 cost because the deviation-penalty calibration must otherwise accommodate intake-derived consumer values that exceed supply.Trade is handled implicitly. FBS supply per country already encodes
production + imports − exports − feed − seed − non-food − stock_changes, so country-level diet automatically reflects observed importer/exporter patterns. The model’s trade hubs then only have to reproduce the observed FAOSTAT trade flows at solve time, instead of resolving a mismatch via expensive feed-deviation L1 penalties.Same FAOSTAT backbone as production. Baseline animal production is built from QCL element 5510 with the shared
weight_conversion.carcass_to_freshtable applied. FBS aggregates the same QCL primary commodities at carcass-weight balance level. Anchoring both sides to FAOSTAT removes a class of unit/source mismatches that otherwise surfaces as residual slack after solve.
Dairy is intentionally excluded from the override list. Its
food_loss_waste convention is non-standard — the curated dairy
override sets loss_fraction=0 and waste_fraction=0.30, where
the 30 % lumps in non-food uses of raw milk (calf feed, processing,
industrial) plus retail and consumer waste, because the model does
not have an explicit non-food milk outlet. Under that convention the
GDD-IA-based dairy total happens to mass-balance against the
production-side QCL × 0.7 delivered to the food bus. Switching
dairy to an FBS override would break that balance.
Output¶
processing/{name}/baseline_diet.csv has one row per (country, food):
Column |
Description |
|---|---|
|
ISO 3166-1 alpha-3 country code. |
|
Model food name (e.g. |
|
Food group to which the food belongs. |
|
Estimated daily consumption in grams per person, on post-loss, post-waste consumer-eaten intake basis — the same basis the food bus delivers after the build_model FLW multiplier (see Weight bases for animal products). |
Rows are sorted by (country, food_group, food).
Downstream Uses¶
Baseline diet enforcement: when
config.validation.enforce_baseline_dietis true, the solver adds per-food, per-country equality constraints on food consumption links.Within-group ratio fixing: when
config.food_groups.fix_within_group_ratios.enabledis true, foods within each group are constrained to keep their baseline proportions while group totals may vary.Piecewise consumer utility calibration: baseline per-food consumption and baseline food-equality duals together calibrate
results/{name}/consumer_values/{baseline_scenario}/utility_blocks.csv(Consumer Values).Health impact assessment: baseline consumption feeds the population-attributable fraction calculation (Health Impacts).
Workflow Integration¶
Snakemake rules (see workflow/rules/diet.smk, and
workflow/rules/retrieve.smk for the download):
download_gdd_ia_intakeprepare_gdd_ia_dietary_intakeprepare_nhanes_dietary_intakemerge_dietary_sourcesprepare_gbd_food_group_intakeprepare_faostat_fbs_itemsprepare_food_loss_wasteestimate_baseline_dietvalidate_baseline_dietandcompare_baseline_diet_to_gbd(consistency checks)
Input data:
data/downloads/gdd_ia/intake_grams_{release_year}.csvanddata/downloads/gdd_ia/intake_kcals_{release_year}.csv(auto-fetched from Zenodo for the release closest tobaseline_year)data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_{1,2}/*.CSVdata/downloads/usda_fped/Table_1_FPED_MaleFemale_{cycle}.pdfFAOSTAT FBS and QCL (auto-fetched via the FAOSTAT bulk API)
Curated data files:
File |
Purpose |
|---|---|
|
Maps model foods to FAOSTAT FBS item codes for within-group share calculation. |
|
Maps foods sharing an FBS item to QCL production codes for disambiguation. |
|
Food → food-group mapping. |
|
Per-food native mass basis (dry / fresh / cooked / milk-equiv). |
|
Per-(source, country, food_group) basis overrides for the cross-source conversion. |
|
FPED column → model food-group mapping and unit-conversion factors. |
|
Per-(country, food_group) loss/waste overrides feeding
|
Configuration parameters:
config.countries— list of countries.config.food_groups.included— food groups to process.config.baseline_year— reference year for GDD-IA and GBD. GDD-IA uses the closest available five-year release while retaining this as the model reference year.config.diet.baseline_age— age label written to NHANES rows (default"All ages").config.diet.fbs_override_foods— foods anchored to FBS supply. See Why animal products use FBS.config.diet.source_basisandconfig.weight_conversion— per-source native bases and conversion tables.config.diet.gdd_ia.cooked_to_raw— per-group cooked→raw inflation factors for GDD-IA (currentlyred_meat: 1.43).config.diet.gdd_ia.country_proxies— extra proxies beyond the defaults inprepare_gdd_ia_dietary_intake.py.config.diet.nhanes.cycleand.reference_year— FPED release.config.health.risk_factors— drives which food groups are anchored to GBD in Step 1.config.byproducts— foods excluded from share calculation.
Output:
processing/{name}/gdd_ia_dietary_intake.csv— GDD-IA group-level intake.processing/{name}/gdd_ia_kcal_target.csv— per-country kcal accounting (total dietary energy, out-of-scope subtotal, in-scope target, refined / whole-grain cereal energy split).processing/{name}/nhanes_dietary_intake.csv— USA NHANES override.processing/{name}/dietary_intake.csv— merged GDD-IA + NHANES.processing/{name}/gbd_food_group_intake.csv— GBD exposure.processing/{name}/baseline_diet.csv— per-food, per-country baseline diet.
Scripts:
workflow/scripts/prepare_gdd_ia_dietary_intake.pyworkflow/scripts/prepare_nhanes_dietary_intake.pyworkflow/scripts/merge_dietary_sources.pyworkflow/scripts/prepare_gbd_food_group_intake.pyworkflow/scripts/estimate_baseline_diet.pyworkflow/scripts/diet/food_group_projection.py— within-group pooled-projection helpers (FBS-code pools, production-share blends).
Springmann M. Global dietary estimates for conducting health, environmental and economic impact assessments. Nature Food (2026). https://doi.org/10.1038/s43016-026-01388-z. Dataset: https://doi.org/10.5281/zenodo.20818140