# K16a – independent recomputation of the 2026 update (and wcrf2007 Fig 4.3.3)

Checker: `kontroll/K16a/meta_check2.py` (own DerSimonian–Laird, FE, HKSJ, REML, Egger and Greenland–Longnecker code;
no pipeline scripts read or imported). Inputs: `update2026.json`, `all.json`, `cup2016.json` (two CUP rows for the
multiverse), `database/estimates.csv` (rows the json does not carry). Tolerance for "4 dp" = |diff| < 5e-5.
Run: `python3 meta_check2.py` – the tables below are its output.

## Summary

| Item | Verdict |
|---|---|
| 0. Main pool (baseline) | Exact (RE, FE, τ², Q, I², all 20 weights). |
| 1. Subgroups (11) | **All exact to 4 dp.** Membership rebuilt independently from region/sex/year/cases/exposure: identical for all 11. |
| 2. Sensitivity (6) | **All 6 exact to 4 dp** from the json rows. The Wang 2020 row rebuilt from estimates.csv is exact; the Vulcan 2017 row rebuilt by my GL is 1.02 (0.75–1.38) vs 1.0150 (0.7491–1.3754) – 2 dp match, not 4 dp (GL implementation detail, see item 6). |
| 3. Negative controls | **Not fully verifiable**: json gives study ids only, no per-study rows. Using the main-model continuous row per cohort (per 100 g by exponentiation): fish 0.76 (0.65–0.90) – match at 2 dp, not 4 dp; poultry 0.90 (0.74–1.09) vs published 0.89 (0.74–1.08) – **no 2-dp match**. An exhaustive search over all candidate continuous rows (incl. calibrated, minimally adjusted, sex-combined) and GL-from-categories for Bradbury/Spencer/Gilsing found no combination reproducing either control exactly. The pipeline's row choice/conversion for the controls is therefore undocumented. All rows are poultry/fish colorectal rows in estimates.csv (checked). |
| 4. LOO / Egger / HKSJ / FE / REML | **All exact**: 20 LOO runs (point+CI), range 1.0875–1.1114 (= 1.09–1.11); Egger intercept 0.3263, p 0.4044; HKSJ 1.10 (1.04–1.16) (q<1 not truncated; truncation would make no difference here); FE 1.10 (1.06–1.14); REML 1.10 (1.04–1.15), τ² 0.001576. |
| 5. Multiverse (1 152) | The json documents the 8 dimensions + model and the option names, **but not the per-option rows**. I rebuilt every alternative row from estimates.csv / cup2016.json and enumerated all 1 152 combinations: n = 1 152, **1 152/1 152 with lower CI > 1 (100 %)**, median 1.11, range 1.09–1.13 – all published 2-dp figures reproduced. **Finding: the NIH-AARP "at 1800 kcal"/"at 2200 kcal" options appear to use inverted exponents.** With the correct conversion (per 50 g/1000 kcal → per 100 g/day at E kcal: exponent 100/(0.05·E) = 1.111 at 1800, 0.909 at 2200) the by-choice medians are 1.1130 (1800) and 1.1052 (2200), vs published 1.1046 and 1.1127. With the exponents reversed (0.9 / 1.1) they reproduce to ≤ 0.0001. Either the labels are swapped or the exponent is inverted; effect on the overall result is nil (median 1.1088 vs 1.1085; still 100 % significant). Remaining 4-dp residuals (≤ 0.0004) come from alternative rows I could only approximate (Wada GL, Bradbury). |
| 6. Linear two-stage slope | **Not recomputable from the json**: the json carries the 12 sets' doses only (no RR/CI/cases/denominators). Approximate recomputation pulling the category rows from estimates.csv: 1.23 (1.05–1.44) vs 1.24 (1.06–1.44) – close, no 2-dp match. 6 of 12 sets lack cases and/or denominators (Larsson, Al Rajabi ×2: cases assumed; Pietinen, Mehta, Norat 2005: no denominators), so GL needs assumptions the pipeline does not document. Cross-check: of my GL slopes for the 7 GL rows in the main pool, only 2 match at 2 dp (Ollberding, Knuppel) and none at 4 dp; Pietinen 0.80 vs 0.83, Larsson 1.17 vs 1.23, Yiannakou 1.68 vs 1.63 (the latter has full cases + person-years, so the difference is not a missing-data assumption). Impact if my GL rows replaced the json's: main pool 1.0956 (1.0433–1.1505) vs 1.0967 (1.0447–1.1513) – same at 2 dp. RCS spline not attempted (as instructed). |
| 7. wcrf2007 Fig 4.3.3 (all.json) | **Exact** to 4 dp vs json (RE 1.2888 (1.0391–1.5985), FE 1.2887 (1.0466–1.5869), Q, τ², I², 3 LOO). Against the printed values: FE = 1.29 (1.05–1.59) (figure) and RE = 1.29 (1.04–1.60) (text) both match at 2 dp. |

## Not recomputable / open points

1. **Negative controls** – per-study rows (estimate_id, conversion) absent from update2026.json; my best reading reproduces fish at 2 dp but not poultry. Recommendation: write the 7 + 5 rows with provenance into the json, as for the main set.
2. **Multiverse alternative rows** – only option names in the json; rows reconstructed here. Recommendation: store each option's (rr, lo, hi, provenance). Check the NIH-AARP kcal exponent (above).
3. **Linear slope / spline** – category data not in the json; GL for 6 sets requires undocumented assumptions (missing cases or denominators). The GL rows of the main pool could not be reproduced exactly even where data are complete (Yiannakou, Knuppel, Ollberding, Tiemersma, Vulcan), so the pipeline's GL variant differs from the textbook Greenland–Longnecker (closed form for person-time; fitted pseudo-counts for case-control) used here.
4. **Data note** – BWHS (Yiannakou 2022) row says 347 cases; the three category rows in estimates.csv (yiannakou2022_025–027, colorectal, women, main model) sum to 564. Does not change any subgroup (both < 1000) but the case count should be checked.

## Assumptions used by this checker where data were missing (GL)

- Person-time sets: A_j = A₀·RR_j·PT_j/PT₀ with Σ A_j = observed total; cov = 1/A₀.
- `n_participants` sets (Knuppel, Ollberding): treated as person-time (ir); the "ci" variant differs by < 0.001.
- Case-control (Tiemersma): B_j = controls fixed; cov = 1/A₀ + 1/B₀.
- No denominators (Pietinen, Mehta, Norat 2005, Larsson, Al Rajabi): equal denominators of 10⁶ per category.
- No cases: Larsson 733 split equally across 4 categories; Al Rajabi 232 split by the model-1 sex ratio (118:147), then equally across quartiles.
- Doses: the json `doses` for each set (not recomputed).

## Full output
## 0. Main pool (k=20) - baseline
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| DL random effects | 1.0967 (1.0447-1.1513) | 1.0967 (1.0447-1.1513) | yes | yes |  |
| Fixed effect | 1.0973 (1.0555-1.1408) | 1.0973 (1.0555-1.1408) | yes | yes |  |
| tau2 | 0.0014 | 0.0014 | yes | yes |  |
| Q | 21.8230 | 21.8230 | yes | yes |  |
| I2 (%) | 12.9357 | 12.9357 | yes | yes |  |
| per-study RE weights (20) | json `w` | recomputed | | yes | max diff 1.07e-14 |

## 1. Subgroups (membership from json `studies`)
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| region: Europe (k=9) | 1.1503 (1.0428-1.2688) | 1.1503 (1.0428-1.2688) | yes | yes | I2 pub 27.46 / rec 27.46 |
| region: N America (k=6) | 1.0682 (0.9760-1.1690) | 1.0682 (0.9760-1.1690) | yes | yes | I2 pub 37.89 / rec 37.89 |
| region: Asia (k=3) | 1.0375 (0.8797-1.2235) | 1.0375 (0.8797-1.2235) | yes | yes | I2 pub 0.00 / rec 0.00 |
| women-only cohorts (k=5) | 1.2225 (1.0484-1.4256) | 1.2225 (1.0484-1.4256) | yes | yes | I2 pub 0.00 / rec 0.00 |
| mixed/men cohorts (k=15) | 1.0849 (1.0330-1.1395) | 1.0849 (1.0330-1.1395) | yes | yes | I2 pub 12.33 / rec 12.33 |
| explicitly unprocessed (database flag = no; excludes partial/undefined rows) (k=14) | 1.1056 (1.0269-1.1904) | 1.1056 (1.0269-1.1904) | yes | yes | I2 pub 0.00 / rec 0.00 |
| partial / undefined exposure rows only (k=6) | 1.0874 (1.0059-1.1755) | 1.0874 (1.0059-1.1755) | yes | yes | I2 pub 44.51 / rec 44.51 |
| published ≥ 2015 (k=13) | 1.1078 (1.0528-1.1657) | 1.1078 (1.0528-1.1657) | yes | yes | I2 pub 13.25 / rec 13.25 |
| published < 2015 (k=7) | 1.0395 (0.9108-1.1864) | 1.0395 (0.9108-1.1864) | yes | yes | I2 pub 9.64 / rec 9.64 |
| ≥ 1000 cases (k=10) | 1.0928 (1.0291-1.1605) | 1.0928 (1.0291-1.1605) | yes | yes | I2 pub 38.29 / rec 38.29 |
| < 1000 cases (k=10) | 1.1485 (0.9932-1.3281) | 1.1485 (0.9932-1.3281) | yes | yes | I2 pub 0.00 / rec 0.00 |

Membership audit (subgroup lists rebuilt from the row attributes region/sex/year/cases):
- region: Europe: identical
- region: N America: identical
- region: Asia: identical
- women-only cohorts: identical
- mixed/men cohorts: identical
- published ≥ 2015: identical
- published < 2015: identical
- ≥ 1000 cases: identical
- < 1000 cases: identical
- partial/undefined (rebuilt from exposure text + NIH-AARP 'partial' flag in estimates.csv): identical
- unprocessed + partial lists are complementary and cover all 20: True

## 2. Sensitivity analyses
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| Wang 2020 row (rebuilt from wang2020_075/086, ^1.944, fixed-combined) | 1.0564 (0.9572-1.1659) | 1.0564 (0.9572-1.1659) | yes | yes |  |
| Vulcan 2017 row (rebuilt: GL per sex from 'Full model' categories, fixed-combined) | 1.0150 (0.7491-1.3754) | 1.0189 (0.7514-1.3815) | yes | NO (max diff 0.00611) | ids used: vulcan2017_096;vulcan2017_102;vulcan2017_108;vulcan2017_114;vulcan2017_120;vulcan2017_094;vulcan2017_100;vulcan2017_106;vulcan2017_112;vulcan2017_118 |
| without Million Women (calibrated) (k=19) | 1.0887 (1.0385-1.1414) | 1.0887 (1.0385-1.1414) | yes | yes | I2 pub 9.41 / rec 9.41 |
| without NIH-AARP (energy-density assumption) (k=19) | 1.0875 (1.0263-1.1524) | 1.0875 (1.0263-1.1524) | yes | yes | I2 pub 11.81 / rec 11.81 |
| without nested case-control (Tiemersma) (k=19) | 1.0942 (1.0445-1.1461) | 1.0942 (1.0445-1.1461) | yes | yes | I2 pub 9.94 / rec 9.94 |
| without the two largest (MWS, NIH-AARP) (k=18) | 1.0706 (1.0133-1.1312) | 1.0706 (1.0133-1.1312) | yes | yes | I2 pub 4.94 / rec 4.94 |
| with Malmö DCS (Vulcan 2017) added despite EPIC overlap (k=21) | 1.0943 (1.0452-1.1457) | 1.0943 (1.0452-1.1457) | yes | yes | I2 pub 9.39 / rec 9.39 |
| NHS/HPFS → Wang 2020 (NHS+NHSII+HPFS, per 3 servings/wk → pe (k=20) | 1.1027 (1.0586-1.1487) | 1.1027 (1.0586-1.1487) | yes | yes | I2 pub 3.06 / rec 3.06 |

## 3. Negative controls (rows rebuilt from estimates.csv; json lists study ids only)
Row choice: the main-model continuous (per-increment) row per cohort, converted to per 100 g/day by exponentiation (per 50 g ^2, per 25 g ^4, per serving/week ^(700/120)=5.833 at 120 g/serving, per 100 g ^1).

| Control | Study | estimate_id | exposure | as printed | per 100 g |
|---|---|---|---|---|---|
| poultry | dankner2024 | dankner2024_040 | poultry | per_100g 1.06 (0.89-1.26) | 1.0600 (0.8900-1.2600) |
| poultry | english2004 | english2004_035 | poultry | per_serving_week 0.92 (0.85-0.99) | 0.6148 (0.3875-0.9431) |
| poultry | gilsing2015 | gilsing2015_256 | poultry | per_50g 0.89 (0.64-1.25) | 0.7921 (0.4096-1.5625) |
| poultry | mejborn2021 | mejborn2021_018 | poultry | per_100g 1.39 (0.69-2.77) | 1.3900 (0.6900-2.7700) |
| poultry | norat2005 | norat2005_048 | poultry | per_100g 0.92 (0.68-1.25) | 0.9200 (0.6800-1.2500) |
| poultry | spencer2010 | spencer2010_050 | poultry | per_50g 0.80 (0.65-1.00) | 0.6400 (0.4225-1.0000) |
| poultry | bradbury2020 | bradbury2020_020 | poultry | per_25g 1.01 (0.91-1.12) | 1.0406 (0.6857-1.5735) |
| fish | english2004 | english2004_050 | fish | per_serving_week 0.99 (0.91-1.08) | 0.9431 (0.5769-1.5666) |
| fish | gilsing2015 | gilsing2015_316 | fish | per_25g 0.95 (0.82-1.09) | 0.8145 (0.4521-1.4116) |
| fish | norat2005 | norat2005_049 | fish | per_100g 0.7 (0.57-0.87) | 0.7000 (0.5700-0.8700) |
| fish | spencer2010 | spencer2010_065 | fish | per_50g 0.92 (0.70-1.21) | 0.8464 (0.4900-1.4641) |
| fish | bradbury2020 | bradbury2020_025 | fish | per_25g 0.96 (0.86-1.07) | 0.8493 (0.5470-1.3108) |

| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| poultry (k=7) | 0.8929 (0.7388-1.0793) | 0.8993 (0.7442-1.0867) | NO | NO (max diff 0.00743) | I2 pub 39.64 / rec 40.56 |
| fish (k=5) | 0.7640 (0.6493-0.8991) | 0.7636 (0.6493-0.8980) | yes | NO (max diff 0.00106) | I2 pub 0.00 / rec 0.00 |

## 4. Leave-one-out, Egger, HKSJ, fixed effect, REML
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| LOO, all 20 runs (point and CI) | json `loo` | recomputed | yes | yes, max diff < 5e-5 | |
| LOO range of point estimates | 1.09-1.11 | 1.0875-1.1114 | yes | | |
| Egger intercept | 0.3263 | 0.3263 | yes | yes |  |
| Egger p | 0.4044 | 0.4044 | yes | yes |  |
| HKSJ (Hartung-Knapp, t df=19) | 1.0967 (1.0412-1.1551) | 1.0967 (1.0412-1.1551) | yes | yes | truncated max(1,q) variant: 1.0967 (1.0412-1.1551) |
| Fixed effect | 1.0973 (1.0555-1.1408) | 1.0973 (1.0555-1.1408) | yes | yes |  |
| REML | 1.0970 (1.0440-1.1526) | 1.0970 (1.0440-1.1527) | yes | yes | tau2 pub 0.001576 / rec 0.001576 |

## 6a. GL slopes per study vs the per-study rows in the main pool (same category sets)
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| GL ATBC (Pietinen 1999) | 0.8338 (0.4313-1.6119) | 0.7955 (0.4110-1.5398) | NO | NO (max diff 0.07215) | ir denominators missing -> equal per category |
| GL Netherlands MP (Tiemersma 2002) | 1.9195 (0.8541-4.3141) | 1.9205 (0.8524-4.3269) | NO | NO (max diff 0.01283) | cc  |
| GL SMC (Larsson 2005) | 1.2252 (0.8978-1.6721) | 1.1653 (0.8631-1.5731) | NO | NO (max diff 0.09898) | ir denominators missing -> equal per category; cases missing -> total 733 split equally |
| GL MEC (Ollberding 2012) | 0.9665 (0.8292-1.1264) | 0.9657 (0.8274-1.1271) | yes | NO (max diff 0.00183) | ir  |
| GL UK Biobank (Knuppel 2020) | 1.4956 (1.0964-2.0402) | 1.4977 (1.0969-2.0449) | yes | NO (max diff 0.00472) | ir  |
| GL BWHS (Yiannakou 2022) | 1.6262 (0.8412-3.1436) | 1.6815 (0.8688-3.2545) | NO | NO (max diff 0.11087) | ir  |
| GL Alberta's Tomorrow (Al Rajabi 2021), sexes fixed-combined | 1.2506 (0.6845-2.2848) | 1.2421 (0.6843-2.2547) | NO | NO (max diff 0.03011) | cases assumed: 232 split by model-1 sex ratio, then equally across quartiles |

## 6b. Linear two-stage slope on the 12 spline sets (GL per set, DL pooling)
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| linear slope per 100 g, 12 sets | 1.2363 (1.0603-1.4415) | 1.2262 (1.0476-1.4352) | NO | NO (max diff 0.01267) | Q 17.12, I2 35.8; assumptions for missing data listed in RAPPORT |
| per-set slopes (per 100 g) | | pietinen1999/men 0.796; tiemersma2002/all 1.920; larsson2005/women 1.165; norat2005/all 1.218; ollberding2012/all 0.966; knuppel2020/all 1.498; mehta2020/women 1.072; wada2017/men 2.171; wada2017/women 1.062; alrajabi2021/men 1.386; alrajabi2021/women 0.960; yiannakou2022/women 1.681 | | | |
## 6c. Impact: main pool with this checker's GL rows in place of the json GL rows
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| main pool, 7 GL rows replaced | 1.0967 (1.0447-1.1513) | 1.0956 (1.0433-1.1505) | yes | NO (max diff 0.00139) | I2 13.4 |
| BWHS cases: json row 347 vs sum of category cases in estimates.csv 564 | | | | | data note |

## 5. Multiverse (alternative rows rebuilt from estimates.csv / cup2016.json; json gives option names only)
CUP rows found in cup2016.json: tiemersma2002 [(1.69, 0.88, 3.23)]; ollberding2012 [(1.01, 0.9, 1.14)]

| Dimension | Option | Row used (per 100 g) | Source |
|---|---|---|---|
| Netherlands MP (Tiemersma 2002) | main | 1.9195 (0.8541-4.3141) | json main row |
| Netherlands MP (Tiemersma 2002) | CUP value | 1.6900 (0.8800-3.2300) | cup2016.json CUP row |
| MCCS (English 2004) | main | 1.1882 (0.8888-1.5666) | json main row |
| MCCS (English 2004) | adjusted for processed meat | 1.1225 (0.8888-1.5666) | english2004_076 ^5.833 |
| EPIC (Papadimitriou 2022) | main | 1.0562 (0.9457-1.1443) | json main row |
| EPIC (Papadimitriou 2022) | Norat 2005 observed | 1.2100 (1.0200-1.4300) | norat2005_031 |
| EPIC (Papadimitriou 2022) | Norat 2005 calibrated | 1.4900 (0.9100-2.4300) | norat2005_032 |
| SMC (Larsson 2005) | main | 1.2252 (0.8978-1.6721) | json main row |
| SMC (Larsson 2005) | total red meat per 100 g (paper) | 1.2000 (0.9900-1.4500) | larsson2005_085 |
| MEC (Ollberding 2012) | main | 0.9665 (0.8292-1.1264) | json main row |
| MEC (Ollberding 2012) | total red meat (CUP's row) | 1.0100 (0.9000-1.1400) | cup2016.json CUP row |
| JPHC + Takayama (Islam 2019) | main | 1.0879 (0.9062-1.3060) | json main row |
| JPHC + Takayama (Islam 2019) | Wada 2017 (Takayama only) | 1.7078 (1.0741-2.7153) | GL wada2017_013-016 / 085-088, sexes fixed-combined |
| UK Biobank (Knuppel 2020) | main | 1.4956 (1.0964-2.0402) | json main row |
| UK Biobank (Knuppel 2020) | Bradbury 2020 (same cohort) | 1.3924 (1.0000-1.9321) | bradbury2020_010 ^2 |
| NIH-AARP (Zouiouich 2025) | main | 1.1300 (1.0600-1.2000) | json main row |
| NIH-AARP (Zouiouich 2025) | at 1800 kcal | 1.1454 (1.0669-1.2246) | zouiouich2025_134 ^(100/90) |
| NIH-AARP (Zouiouich 2025) | at 2200 kcal | 1.1175 (1.0544-1.1803) | zouiouich2025_134 ^(100/110) |

### A. NIH exponents as derived (1800 kcal ^1.111, 2200 kcal ^0.909)
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| n combinations | 1152.0000 | 1152.0000 | yes | yes |  |
| n with lower CI > 1 | 1152.0000 | 1152.0000 | yes | yes |  |
| median RR | 1.1085 | 1.1088 | yes | NO (diff 0.00029) |  |
| min RR | 1.0908 | 1.0912 | yes | NO (diff 0.00036) |  |
| max RR | 1.1338 | 1.1339 | yes | NO (diff 0.00011) |  |
| by_choice Netherlands MP (Tiemersma 2002) = main median (n 576/576, sig 576/576) | 1.1083 | 1.1087 | yes | NO (diff 0.00033) |  |
| by_choice Netherlands MP (Tiemersma 2002) = CUP value median (n 576/576, sig 576/576) | 1.1086 | 1.1089 | yes | NO (diff 0.00037) |  |
| by_choice MCCS (English 2004) = main median (n 576/576, sig 576/576) | 1.1092 | 1.1097 | yes | NO (diff 0.00041) |  |
| by_choice MCCS (English 2004) = adjusted for processed meat median (n 576/576, sig 576/576) | 1.1075 | 1.1077 | yes | NO (diff 0.00021) |  |
| by_choice EPIC (Papadimitriou 2022) = main median (n 384/384, sig 384/384) | 1.0987 | 1.0989 | yes | NO (diff 0.00022) |  |
| by_choice EPIC (Papadimitriou 2022) = Norat 2005 observed median (n 384/384, sig 384/384) | 1.1138 | 1.1140 | yes | NO (diff 0.00019) |  |
| by_choice EPIC (Papadimitriou 2022) = Norat 2005 calibrated median (n 384/384, sig 384/384) | 1.1106 | 1.1108 | yes | NO (diff 0.00020) |  |
| by_choice SMC (Larsson 2005) = main median (n 576/576, sig 576/576) | 1.1071 | 1.1074 | yes | NO (diff 0.00036) |  |
| by_choice SMC (Larsson 2005) = total red meat per 100 g (paper) median (n 576/576, sig 576/576) | 1.1097 | 1.1101 | yes | NO (diff 0.00036) |  |
| by_choice MEC (Ollberding 2012) = main median (n 576/576, sig 576/576) | 1.1092 | 1.1095 | yes | NO (diff 0.00032) |  |
| by_choice MEC (Ollberding 2012) = total red meat (CUP's row) median (n 576/576, sig 576/576) | 1.1078 | 1.1082 | yes | NO (diff 0.00036) |  |
| by_choice JPHC + Takayama (Islam 2019) = main median (n 576/576, sig 576/576) | 1.1055 | 1.1059 | yes | NO (diff 0.00043) |  |
| by_choice JPHC + Takayama (Islam 2019) = Wada 2017 (Takayama only) median (n 576/576, sig 576/576) | 1.1135 | 1.1137 | yes | NO (diff 0.00017) |  |
| by_choice UK Biobank (Knuppel 2020) = main median (n 576/576, sig 576/576) | 1.1103 | 1.1104 | yes | NO (diff 0.00016) |  |
| by_choice UK Biobank (Knuppel 2020) = Bradbury 2020 (same cohort) median (n 576/576, sig 576/576) | 1.1067 | 1.1071 | yes | NO (diff 0.00035) |  |
| by_choice NIH-AARP (Zouiouich 2025) = main median (n 384/384, sig 384/384) | 1.1091 | 1.1091 | yes | NO (diff -0.00007) |  |
| by_choice NIH-AARP (Zouiouich 2025) = at 1800 kcal median (n 384/384, sig 384/384) | 1.1046 | 1.1130 | NO | NO (diff 0.00838) |  |
| by_choice NIH-AARP (Zouiouich 2025) = at 2200 kcal median (n 384/384, sig 384/384) | 1.1127 | 1.1052 | yes | NO (diff -0.00758) |  |
| by_choice model = random median (n 576/576, sig 576/576) | 1.1101 | 1.1104 | yes | NO (diff 0.00028) |  |
| by_choice model = fixed median (n 576/576, sig 576/576) | 1.1069 | 1.1074 | yes | NO (diff 0.00044) |  |

### B. NIH exponents reversed (1800 kcal ^0.9, 2200 kcal ^1.1) - diagnostic
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| n combinations | 1152.0000 | 1152.0000 | yes | yes |  |
| n with lower CI > 1 | 1152.0000 | 1152.0000 | yes | yes |  |
| median RR | 1.1085 | 1.1086 | yes | NO (diff 0.00009) |  |
| min RR | 1.0908 | 1.0910 | yes | NO (diff 0.00013) |  |
| max RR | 1.1338 | 1.1335 | yes | NO (diff -0.00027) |  |
| by_choice Netherlands MP (Tiemersma 2002) = main median (n 576/576, sig 576/576) | 1.1083 | 1.1084 | yes | NO (diff 0.00009) |  |
| by_choice Netherlands MP (Tiemersma 2002) = CUP value median (n 576/576, sig 576/576) | 1.1086 | 1.1087 | yes | NO (diff 0.00014) |  |
| by_choice MCCS (English 2004) = main median (n 576/576, sig 576/576) | 1.1092 | 1.1093 | yes | NO (diff 0.00008) |  |
| by_choice MCCS (English 2004) = adjusted for processed meat median (n 576/576, sig 576/576) | 1.1075 | 1.1075 | yes | yes |  |
| by_choice EPIC (Papadimitriou 2022) = main median (n 384/384, sig 384/384) | 1.0987 | 1.0987 | yes | yes |  |
| by_choice EPIC (Papadimitriou 2022) = Norat 2005 observed median (n 384/384, sig 384/384) | 1.1138 | 1.1138 | yes | yes |  |
| by_choice EPIC (Papadimitriou 2022) = Norat 2005 calibrated median (n 384/384, sig 384/384) | 1.1106 | 1.1106 | yes | NO (diff 0.00005) |  |
| by_choice SMC (Larsson 2005) = main median (n 576/576, sig 576/576) | 1.1071 | 1.1072 | yes | NO (diff 0.00007) |  |
| by_choice SMC (Larsson 2005) = total red meat per 100 g (paper) median (n 576/576, sig 576/576) | 1.1097 | 1.1098 | yes | NO (diff 0.00010) |  |
| by_choice MEC (Ollberding 2012) = main median (n 576/576, sig 576/576) | 1.1092 | 1.1093 | yes | NO (diff 0.00009) |  |
| by_choice MEC (Ollberding 2012) = total red meat (CUP's row) median (n 576/576, sig 576/576) | 1.1078 | 1.1079 | yes | NO (diff 0.00012) |  |
| by_choice JPHC + Takayama (Islam 2019) = main median (n 576/576, sig 576/576) | 1.1055 | 1.1056 | yes | NO (diff 0.00009) |  |
| by_choice JPHC + Takayama (Islam 2019) = Wada 2017 (Takayama only) median (n 576/576, sig 576/576) | 1.1135 | 1.1135 | yes | yes |  |
| by_choice UK Biobank (Knuppel 2020) = main median (n 576/576, sig 576/576) | 1.1103 | 1.1102 | yes | yes |  |
| by_choice UK Biobank (Knuppel 2020) = Bradbury 2020 (same cohort) median (n 576/576, sig 576/576) | 1.1067 | 1.1069 | yes | NO (diff 0.00017) |  |
| by_choice NIH-AARP (Zouiouich 2025) = main median (n 384/384, sig 384/384) | 1.1091 | 1.1091 | yes | NO (diff -0.00007) |  |
| by_choice NIH-AARP (Zouiouich 2025) = at 1800 kcal median (n 384/384, sig 384/384) | 1.1046 | 1.1047 | yes | NO (diff 0.00007) |  |
| by_choice NIH-AARP (Zouiouich 2025) = at 2200 kcal median (n 384/384, sig 384/384) | 1.1127 | 1.1127 | yes | NO (diff -0.00008) |  |
| by_choice model = random median (n 576/576, sig 576/576) | 1.1101 | 1.1102 | yes | NO (diff 0.00013) |  |
| by_choice model = fixed median (n 576/576, sig 576/576) | 1.1069 | 1.1070 | yes | NO (diff 0.00007) |  |

## 7. wcrf2007 'Per 100 g/day - Fig 4.3.3' (all.json)
| Item | Published | Recomputed | Match 2 dp | Match 4 dp | Note |
|---|---|---|---|---|---|
| run: Per 100 g/day – Fig 4.3.3 (3 studies; Larsson's upper limit read off the figure as 1.94) | | | | | |
|   json re | 1.2888 (1.0391-1.5985) | 1.2888 (1.0391-1.5985) | yes | yes |  |
|   json fe | 1.2887 (1.0466-1.5869) | 1.2887 (1.0466-1.5869) | yes | yes |  |
|   Q | 2.1189 | 2.1189 | yes | yes |  |
|   tau2 | 0.0021 | 0.0021 | yes | yes |  |
|   I2 | 5.6100 | 5.6100 | yes | yes |  |
|   published figure 1.29 (1.05-1.59) vs FE | 1.2900 (1.0500-1.5900) | 1.2887 (1.0466-1.5869) | yes | NO (max diff 0.00341) | 2-dp target only |
|   published text 1.29 (1.04-1.60) vs RE | 1.2900 (1.0400-1.6000) | 1.2888 (1.0391-1.5985) | yes | NO (max diff 0.00153) | 2-dp target only |
|   LOO without pietinen1999 | 1.4466 (1.1151-1.8767) | 1.4466 (1.1151-1.8767) | yes | yes |  |
|   LOO without norat2005 | 1.2388 (0.9159-1.6755) | 1.2388 (0.9159-1.6755) | yes | yes |  |
|   LOO without larsson2005 | 1.1957 (0.8584-1.6656) | 1.1957 (0.8584-1.6656) | yes | yes |  |
