What is wrong
whep::nourishment_thresholds lifts the raw protein floor and target
(46 and 63 g/cap/day) to the shipped supply-side thresholds (62.1 and 85.05)
by a factor of 1.35:
# data-raw/sjos_n_coefficients.R:65,69,81
"protein", "floor", 46 * 1.35, "g/cap/day",
"protein", "target", 63 * 1.35, "g/cap/day",
"waste_inequality", "factor", 1.35, "ratio",
Those thresholds decide the Under / Adequate / Over classification on the
SJOS-N "just" axis, so 1.35 moves published classifications directly.
The factor has no source
- Its origin is an inline assumption in the upstream Global code, flagged as
unchecked by its own author:
Global/R/sjos_n.r:66 — Low_World = 46 * 1.35, # Minimum protein intake (check AdT) assuming 35% (unavoidable) waste and inequality-driven risk.
"AdT" appears nowhere else in that repository.
- Global's own manuscript restates the thresholds
(documentation/sjos_n/SJOS_N_Paper.qmd:187-188) citing only FAOSTAT for the
data, never for the numbers, and references_sjos_n.bib has no protein entry.
git log -S "46 * 1.35" in Global returns a single commit ("Reorganizing
repo"), so there is no earlier history to mine.
- Targeted literature searching across the nitrogen, food-system and
safe-and-just boundary literature found no published 1.35 waste-and-inequality
factor.
whep's own @source (R/datasets_sjos_n.R:80-86) is honest about this — it
cites Springmann et al. 2018 for the framing and states the values are
transcribed from the Global analysis pending verification. This issue is about
closing that gap, not about a mis-citation.
Two substantive problems beyond the missing citation
1. It double-counts variability. The 46 g/cap/day floor is the WHO/FAO/UNU
(2007) TRS 935 safe level of protein intake for a 55 kg adult
(0.83 g/kg/day, PDCAAS 1.0; Table 46, report p.243,
https://iris.who.int/handle/10665/43411). That safe level is defined as a
97.5th-percentile individual requirement — exp(4.654 + 1.96 x 0.12) =
133 mg N/kg/day — not a population mean, which is 0.66 g/kg/day. Using it as a
population floor already embeds an inequality allowance; multiplying by a
further inequality factor counts the same variability twice. Only the waste
component of 1.35 is conceptually free of that double count.
2. A single scalar is not how this conversion is done. FAO's own
undernourishment method takes dietary energy supply straight from the FBS and
handles waste and inequality through a lognormal distribution with a
survey-derived coefficient of variation against a minimum requirement — no
scalar at all. The closest published analogue that does use a scalar-like
uplift is O'Neill et al. 2018 (doi 10.1038/s41893-018-0021-4, SI section 3.3),
which lifts an individual minimum of 2500 kcal to a population-wide floor of
2700 "to allow for some inequality in distribution" — roughly 1.08, and with
no waste term, because FBS supply already includes retail and consumer
waste (FAO, New Food Balances, section II, p.4).
Options
- Decompose into a sourced household/retail waste factor and a sourced
inequality uplift, each with its own sensitivity — but note both risks above.
- Replace with a distribution-based treatment on FAO's PoU pattern,
classifying on prevalence of inadequacy rather than a mean crossing a scalar.
Different estimand; needs a CV input the package does not carry
(calculate_food_gini() is between-country and cannot substitute).
- Keep 1.35 as an explicitly labelled unsourced assumption with a
sensitivity band, and report classification transitions under alternatives.
Related: the 63 g/cap/day target is also unsourced (TRS 935 Table 46 gives 62
at 75 kg and 66 at 80 kg, and section 14.2 explicitly declines to set an upper
limit, so no requirement table can supply a ceiling). Split out here because
the multiplier and the target need different resolutions.
What is wrong
whep::nourishment_thresholdslifts the raw protein floor and target(46 and 63 g/cap/day) to the shipped supply-side thresholds (62.1 and 85.05)
by a factor of 1.35:
Those thresholds decide the Under / Adequate / Over classification on the
SJOS-N "just" axis, so 1.35 moves published classifications directly.
The factor has no source
unchecked by its own author:
Global/R/sjos_n.r:66—Low_World = 46 * 1.35, # Minimum protein intake (check AdT) assuming 35% (unavoidable) waste and inequality-driven risk."AdT" appears nowhere else in that repository.
(
documentation/sjos_n/SJOS_N_Paper.qmd:187-188) citing only FAOSTAT for thedata, never for the numbers, and
references_sjos_n.bibhas no protein entry.git log -S "46 * 1.35"in Global returns a single commit ("Reorganizingrepo"), so there is no earlier history to mine.
safe-and-just boundary literature found no published 1.35 waste-and-inequality
factor.
whep's own
@source(R/datasets_sjos_n.R:80-86) is honest about this — itcites Springmann et al. 2018 for the framing and states the values are
transcribed from the Global analysis pending verification. This issue is about
closing that gap, not about a mis-citation.
Two substantive problems beyond the missing citation
1. It double-counts variability. The 46 g/cap/day floor is the WHO/FAO/UNU
(2007) TRS 935 safe level of protein intake for a 55 kg adult
(0.83 g/kg/day, PDCAAS 1.0; Table 46, report p.243,
https://iris.who.int/handle/10665/43411). That safe level is defined as a
97.5th-percentile individual requirement —
exp(4.654 + 1.96 x 0.12)=133 mg N/kg/day — not a population mean, which is 0.66 g/kg/day. Using it as a
population floor already embeds an inequality allowance; multiplying by a
further inequality factor counts the same variability twice. Only the waste
component of 1.35 is conceptually free of that double count.
2. A single scalar is not how this conversion is done. FAO's own
undernourishment method takes dietary energy supply straight from the FBS and
handles waste and inequality through a lognormal distribution with a
survey-derived coefficient of variation against a minimum requirement — no
scalar at all. The closest published analogue that does use a scalar-like
uplift is O'Neill et al. 2018 (doi 10.1038/s41893-018-0021-4, SI section 3.3),
which lifts an individual minimum of 2500 kcal to a population-wide floor of
2700 "to allow for some inequality in distribution" — roughly 1.08, and with
no waste term, because FBS supply already includes retail and consumer
waste (FAO, New Food Balances, section II, p.4).
Options
inequality uplift, each with its own sensitivity — but note both risks above.
classifying on prevalence of inadequacy rather than a mean crossing a scalar.
Different estimand; needs a CV input the package does not carry
(
calculate_food_gini()is between-country and cannot substitute).sensitivity band, and report classification transitions under alternatives.
Related: the 63 g/cap/day target is also unsourced (TRS 935 Table 46 gives 62
at 75 kg and 66 at 80 kg, and section 14.2 explicitly declines to set an upper
limit, so no requirement table can supply a ceiling). Split out here because
the multiplier and the target need different resolutions.