# K11: Independent check of `database/synthesis_extraction.csv`

Controller: Opus (independent). Date: 30.10.2026. The CSV was not edited.

Sources read, in the order the brief sets:
- Norat 2002 txt: Tables I–II p244 and Appendix III pp255–256. Rendered pages norat_p-03/05/06.
- Larsson 2006 txt: Tables I–III and the text pp2658–2662. Rendered page lars_p-4.
- WCRF 2007 txt, lines 10180–10320, and the ch 4.3 reference list.
- rm2010.txt (SLR 2010 pp155–177) and slr2010.txt. The figure values in the two files are identical where they overlap.
- chan.txt (Table 1, text pp4–7), Chan S1 and S2, and the rendered Chan Fig 4 (chan_p-07).

I read the NOTES files only at step 4.

Files:
- Script: `/home/claude/db/kontroll/meta_check.py`
- Output: `/home/claude/db/kontroll/K11/meta_check_output.txt`

## Summary

- **170 rows checked**: norat2002 17, larsson2006 50, wcrf2007 27, cup2010 76.
- **No transcription error in any rr, ci_low, ci_high or weight_pct value.** Every printed value I compared matches the source exactly.
- **147 rows are `ok`. 23 are flagged:**

| flag | rows |
|---|---|
| transcription | 0 values. 13 rows have a *contrast-field* problem (see below) |
| misattributed | 4 |
| unverifiable | 6 |
| missing | 12 analysed entries with no row of their own |

- **Every published pooled estimate in the brief is reproduced exactly by DerSimonian–Laird (DL), with two qualifications:**
  - **Norat 2002 cohort HvL** is reproduced exactly, but only after adding the single Thun 1992 entry plotted in Fig 2. I digitised it from the page pixels as ≈1.14 (0.93–1.39). Without it the result is 1.38 (1.16–1.64).
  - **Chan 2011 proximal and distal HvL** (not in the brief's list) do **not** reproduce from the rows that claim them.

## 1. Per-row findings

### 1a. Rows that are not ok

| CSV line | synth / study / outcome / analysis | flag | finding (page/line reference) |
|---|---|---|---|
| 4, 5 | norat2002 / thun1992 / colon / hvl | **unverifiable** | Appendix III p255 (txt l.1101–1109) prints only Q5 men 1.21 and women 1.05, with no CIs. Fig 2 p245 plots **one** Thun line: box ≈1.14, CI ≈0.93–1.39 (pixels of norat_p-05.png; axis calibrated on tick marks, null line at x=559, 1.0 RR = 107.6 px). The 9-study pool reproduces 1.27 (1.11–1.45) only with that single entry. In that pool it carries ≈41% of the weight. Neither CSV row is the entry Norat analysed. |
| 16 | norat2002 / singh1998 / colorectal / hvl | **unverifiable** (low confidence) | Appendix III p256 prints red meat ≥1/wk 1.41 (0.9–2.21), and the row matches it. The Fig 2 box sits at ≈1.50 with a line from ≈0.95 to ≈2.36, which does not fit 1.41 (0.90–2.21). All other Fig 2 lines fit their Appendix values to ±0.04. The pool reaches 1.27 with 1.41 and 1.28 with ≈1.50, so it cannot decide between them. |
| 24 | larsson2006 / singh1998 / colon / hvl | **misattributed** (subgroup, inferred) | Correct as a member of the 15-study main HvL. It is **not** in the Table II colon subgroup (n=9) p2661. Leaving Singh out of the 10 colon rows gives exactly 1.21 (1.05–1.40), Q=2.35, as printed. Leaving out any other study does not reproduce Q. The `outcome=colon` coding will pull Singh into a colon pool. |
| 69 | wcrf2007 / phillips1975 / colon / hvl | **unverifiable** (outcome) | Fig 4.3.1 p120 (txt l.10224) prints only "Philips 1975 2.70 (1.60–4.55)", with no site. rm2010 p157, Table 35 fn, calls it a case-control study. RR and CI are ok; the outcome `colon` is not printed. |
| 96, 97, 102, 103, 106, 107, 110, 111, 113, 114, 117, 121, 122 | cup2010 / various / dose_response per_100g | **transcription (contrast field)** | Figs 70, 74 and 78 (rm2010 pp166, 170, 174) print "per 100 g/day". These rows' `contrast` fields hold the HvL category contrast from Fig 73/77/81, Table 34 or S1. Examples: L102 "Q4 vs Q1 (Fig 73)", L103 "99 vs 35 g/day (Fig 73)", L114 ">3 vs <1 servings/week". The RR, CI and weight values are all correct. |
| 165, 166, 167 | cup2010 / english2004 / CRC, colon, rectum / dose_response per_time_week | **misattributed** | Chan S1 (s001 l.133ff) prints these as the primary paper's per-1-time/week estimates: 1.03 (0.98–1.08), 1.00 (0.94–1.07), 1.08 (0.99–1.16). The values are correct. But neither SLR 2010 nor Chan 2011 pooled anything per time/week; both used the per-100 g conversions (Figs 70/74/78; Chan Fig 4). The notes do not mark the rows explicitly as not-in-analysis. |
| 170, 171 | cup2010 / chao2005 / proximal_colon, distal_colon / hvl | **unverifiable** | The values match Chan S1 (l.236ff): 1.27 (0.91–1.76) and 0.71 (0.47–1.07). S1 labels them **red *and processed* meat**. Pooling them with Larsson 2005 (L168/169) gives proximal 1.20 (0.93–1.54) against the printed 1.13 (0.83–1.54), and distal 1.18 (0.43–3.25) with I² 91% against the printed 1.57 (0.98–2.49) with I² 53% (Chan T1 p4). No pair from Larsson, Chao and Norat 2005 reproduces either figure (see the meta_check output). Chan S2 (s002 l.394–420) also says no subsite meta-analysis was done because Larsson 2005 was "the only study". So which rows sit behind Chan's red-meat proximal/distal HvL is unresolved. |

Global note on `cases`. Many cup2010 rows cite a figure or T37 for `cases`, but those pages do not print per-study cases. Only Table 34 does, for Cross, Nöthlings, Lee, Butler and Oba. The values match **Chan S1/S2**, for example:
- English 452 (Larsson 2006 prints 451)
- Wei NHS colon 670 (Larsson 2006: 672) and rectum 203 (Larsson 2006: 204)
- Singh 127 (Larsson 2006: 157 including 22 rectosigmoid)
- Chan 2005 183 (S2)

L155 cites "T1 p4" for 389, but Chan T1 has no per-study cases; 389 is Larsson 2006 Table I. These are citation problems, not wrong numbers, so they are not counted as flags.

### 1b. ok counts per group

| synthesis × outcome × analysis | rows | ok | flagged |
|---|---|---|---|
| norat2002 HvL (colorectal + colon) | 16 | 13 | 3 (L4, L5, L16) |
| norat2002 colon DR per 5 g (Goldbohm, primary-study value) | 1 | 1 | 0 |
| larsson2006 HvL CRC/colon/rectum/proximal/distal (Table I) | 36 | 35 | 1 (L24) |
| larsson2006 DR per 120 g (membership only, rr blank, values not printed) | 14 | 14 | 0 |
| wcrf2007 HvL Fig 4.3.1 | 13 | 12 | 1 (L69) |
| wcrf2007 per time/week Fig 4.3.2 | 9 | 9 | 0 |
| wcrf2007 per 100 g Fig 4.3.3 (L93 upper CI correctly blank, printed "1.05–0.95") | 3 | 3 | 0 |
| wcrf2007 Fig 4.3.4 Kinlen M/W (graph only, values blank) | 2 | 2 | 0 |
| cup2010 DR CRC Fig 70 + Fig 71 sex rows | 10 | 6 | 4 (contrast) |
| cup2010 DR colon Fig 74 + Fig 75 sex rows | 11 | 5 | 6 (contrast) |
| cup2010 DR colon, Chan Fig 4 | 10 | 10 | 0 |
| cup2010 DR rectum Fig 78 | 7 | 4 | 3 (contrast) |
| cup2010 HvL CRC Fig 73 | 12 | 12 | 0 |
| cup2010 HvL colon Fig 77 | 12 | 12 | 0 |
| cup2010 HvL rectum Fig 81 | 7 | 7 | 0 |
| cup2010 per time/week (S1) | 3 | 0 | 3 (L165–167) |
| cup2010 proximal/distal HvL (S1/S2, Chan T1) | 4 | 2 | 2 (L170, L171) |
| **Total** | **170** | **147** | **23** |

Value checks against the print:
- **Norat**: every rr/ci matches Appendix III. The txt column misalignment for Giovannucci was resolved correctly. The CI misprints were handled correctly (Goldbohm "1.51–1.37" left blank). I digitised the 9 Fig 2 lines. Willett, Chen, Giovannucci, Bostick, Kato, Hsing and Pietinen each agree with their row to ±0.04.
- **Larsson**: all 36 HvL rows match Table I pp2658–2659 and Fig 1 p2660 exactly, including cases.
- **WCRF**: all 24 numeric rows match the Figs 4.3.1–4.3.3 printed values.
- **CUP/Chan**: all 69 numeric rows match Figs 70, 71, 73, 74, 75, 77, 78, 81, Chan Fig 4 and S1/S2, including every printed weight.

## 2. Completeness

| synthesis × outcome × analysis (source) | studies or lines printed | rows in CSV | verdict |
|---|---|---|---|
| Norat Table I/Fig 2 cohort HvL | 9 lines: Willett, Chen ("92", = Chen 1998), Thun, Giovannucci, Bostick, Kato, Singh, Hsing, Pietinen | All 9 studies present. Thun is present as 2 Appendix M/F rows, not as the single plotted entry. Plus 6 extra rows (Phillips, Hirayama, Goldbohm, Gaard ×2, Knekt), all explicitly marked "NOT among the 9" | **1 missing** (Thun as analysed) |
| Norat Table II cohort DR (n=9) | not named, no per-study values | 1 row (Goldbohm per 5 g, a primary value; notes say it is not Norat's slope) | not printable |
| Larsson HvL main (Fig 1) | 15 | 15 | complete |
| Larsson HvL colon (Table II, n=9) | 9 (inferred: Table I colon rows minus Singh) | 10 colon rows | 1 extra by coding (L24) |
| Larsson HvL rectum / proximal / distal | 7 / 3 / 3 | 7 / 3 / 3 | complete (exact Q reproduction) |
| Larsson DR per 120 g (text p2662, refs 4,5,8–13,18–20,23,24) | 14 | 14 (blank rr) | complete. Kato correctly absent |
| WCRF Fig 4.3.1 HvL | 13 lines | 13 | complete |
| WCRF Fig 4.3.2 per time/week | 9 lines (7 studies) | 9 | complete |
| WCRF Fig 4.3.3 per 100 g | 3 | 3 | complete |
| WCRF Fig 4.3.4 DR graph | Kinlen M, Kinlen W, Giovannucci, Bostick, English (no values) | 2 Kinlen rows; the other 3 are noted on their Fig 4.3.2 rows | acceptable |
| SLR Fig 70 / Chan Fig 4 CRC | 8 | 8 | complete |
| SLR Fig 71 by sex | F: Lee 35.70, Larsson 55.60, Tiemersma 8.71; M: Tiemersma 43.79, Pietinen 56.21 | Only Tiemersma F/M (L104/105). Lee, Larsson and Pietinen exist only as Fig 70 rows carrying Fig 70 weights | **3 missing** (Lee F, Larsson F, Pietinen M with their Fig 71 weights) |
| SLR Fig 74 colon | 9 | 9 | complete |
| SLR Fig 75 by sex | F: Lee 26.64, Oba 4.66, Wei 50.94, Bostick 17.76; M: Oba 7.54, Wei 92.46 | Only Oba F/M (L115/116) | **4 missing** (Lee F, Wei NHS, Bostick, Wei HPFS with Fig 75 weights) |
| Chan Fig 4 colon | 10 | 10 (L155–164) | complete |
| SLR Fig 78 / Chan Fig 4 rectum | 7 | 7 | complete |
| SLR Fig 79 rectum by sex | F: Lee 25.51, Larsson 51.93, Wei NHS 22.57 (subtotal 0.90 (0.60–1.35)); M: Wei HPFS 100 (0.95 (0.47–1.89)) | none | **4 missing** |
| SLR Fig 73 / Chan T1 HvL CRC | 12 | 12 | complete |
| SLR Fig 77 / Chan T1 HvL colon | 12 lines (10 studies) | 12 | complete |
| SLR Fig 81 / Chan T1 HvL rectum | 7 | 7 | complete |
| Chan T1 proximal/distal HvL, n=2 each | refs [34,54] in text; values not printed | 4 (L168–171) | membership not reproducible (see 1a) |
| (extras) cup2010 per time/week | not an analysis | 3 (L165–167) | extras, not marked |

## 3. meta_check.py output (summary)

The full output is in `meta_check_output.txt`. DL random effects, SE = (ln hi − ln lo) / 3.92. Each published analysis has its rows selected explicitly by line number, guarded by study_id.

| analysis | published | recomputed (RE) | Q / I² / τ² | weights vs printed |
|---|---|---|---|---|
| Norat cohort HvL: 8 rows with CI | 1.27 (1.11–1.45), p-het 0.45 | **1.38 (1.16–1.64)** | Q 5.40, I² 0 | – |
| Norat + Thun digitised 1.14 (0.93–1.39) | 1.27 (1.11–1.45) | **1.27 (1.11–1.45)** | Q 7.34 (p 0.50), I² 0 | – |
| Norat + Thun digitised + Singh ≈1.50 (0.95–2.36) | 1.27 (1.11–1.45) | 1.28 (1.12–1.46) | Q 7.64 | – |
| Larsson HvL 15 | 1.28 (1.15–1.42), Q 4.86, I² 0 | **1.28 (1.15–1.42)** | Q 4.86, I² 0 | not printed |
| Larsson colon (10 rows) | 1.21 (1.05–1.40), n 9, Q 2.35 | 1.23 (1.07–1.41) | Q 2.75 | – |
| Larsson colon without Singh | 1.21 (1.05–1.40), Q 2.35 | **1.21 (1.05–1.40)** | **Q 2.35** | – |
| Larsson rectum 7 | 1.56 (1.25–1.95), Q 4.82 | **1.56 (1.25–1.95)** | Q 4.81 | – |
| Larsson proximal 3 / distal 3 | 1.15 (0.91–1.47) / 1.31 (0.62–2.79), I² 83.8 | **1.15 (0.91–1.47) / 1.31 (0.62–2.79)** | Q 0.72 / 12.36, I² 83.8 | – |
| WCRF per time/week 9 | 1.43 (1.05–1.94), I² 58% | **1.43 (1.05–1.94)** | Q 19.00, I² 57.9, τ² 0.092 | not printed |
| WCRF per 100 g, 2 usable rows | 1.29 (1.05–1.59) fig / (1.04–1.60) text / (0.94–1.78) T36 | 1.20 (0.86–1.67) | – | – |
| WCRF per 100 g, Larsson upper CI imputed as 1.43²/1.05 = 1.95 | as above | **RE 1.29 (1.04–1.60) = text; FE 1.29 (1.05–1.59) = figure** | I² 5% (T36 says 32%) | – |
| CUP DR CRC Fig 70 | 1.17 (1.05–1.31), I² 0, p 0.483 | **1.17 (1.05–1.31)** | Q 6.59, p 0.47 | all within 0.39 pp |
| Fig 71 F / M | 1.05 (0.78–1.42) / 1.28 (0.49–3.35), I² 21.9 / 64.3 | 1.05 (0.78–1.43) / **1.28 (0.49–3.35)** | I² 23.6 / 64.5 | within 0.36 pp |
| CUP DR colon Fig 74 | 1.12 (0.97–1.29), p 0.888 | **1.12 (0.97–1.29)** | Q 3.66, p 0.886 | within 0.24 pp |
| Fig 75 F / M | 1.00 (0.72–1.38) / 1.06 (0.75–1.50) | **1.00 (0.72–1.38)** / 1.07 (0.76–1.51) | – | within 0.13 pp |
| Chan DR colon Fig 4 | 1.17 (1.02–1.33), p 0.646 | 1.17 (1.02–1.34) | Q 6.93, p 0.644 | within 0.22 pp |
| CUP DR rectum Fig 78 | 1.18 (0.98–1.42), p 0.666 | 1.18 (0.98–1.43) | Q 4.09, p 0.664 | within 0.12 pp |
| Chan HvL CRC 12 | 1.10 (1.00–1.21), I² 22%, p 0.22 | **1.10 (1.00–1.21)** | Q 14.18, I² 22.4, p 0.22 | not printed |
| Chan HvL colon: 12 separate lines | 1.18 (1.04–1.35), n 10, I² 0, **p 0.70** | 1.18 (1.04–1.35) | Q 10.69, **p 0.47** | – |
| Chan HvL colon: Oba M+F and Larsson prox+dist FE-combined within study (10) | as above | **1.18 (1.04–1.35)** | **Q 6.42, p 0.70** | – |
| Chan HvL rectum 7 | 1.14 (0.83–1.56), I² 38%, p 0.14 | **1.14 (0.83–1.56)** | Q 9.69, I² 38.1, p 0.14 | – |
| Chan HvL proximal (L168+L170) | 1.13 (0.83–1.54), p 0.83 | **1.20 (0.93–1.54)**, p 0.58 | – | – |
| Chan HvL distal (L169+L171) | 1.57 (0.98–2.49), I² 53% | **1.18 (0.43–3.25)**, I² 91% | – | – |

Conclusions:
- Every printed weight is reproduced within 0.4 percentage points, which is rounding in the inputs.
- Chan's colon HvL "n=10, p=0.70" requires within-study combination of Oba and of Larsson's two subsites. Pooling the 12 plotted lines gives the right RR but the wrong Q/p.

## 4. Comparison with the NOTES files (read after steps 1–3)

Where I agree:
- All value transcriptions, the Chan Fig 4 colon set including Larsson 1.68 (1.11–2.55), and the reproduction of CUP/Chan DR, CUP HvL CRC/colon/rectum, Larsson 15-study and WCRF per time/week.
- The Fig 2 cohort list, and Chen "92" being Chen 1998.
- That WCRF Fig 4.3.4 is unreadable.

Where my findings differ from or go beyond the NOTES claims:
1. **Norat 2002 is reproducible.** The figures NOTES §5 call it "not reproducible" and suggest Norat "probably used different contrasts, derived CIs (Thun) and/or a fixed-effect model". My results:
   - With one Thun entry read off Fig 2, ≈1.14 (0.93–1.39), and the Appendix III values unchanged for the other 8, DL gives exactly 1.27 (1.11–1.45).
   - The Fig 2 positions confirm the Appendix values for 7 of the 8 other cohorts. Singh is the uncertain one.
   - So the gap is caused by Thun (≈40% weight), not by different contrasts or model choice. That conclusion rests on a digitised value, which the figure pass deliberately did not do.
2. **Larsson colon subgroup (n=9) = the Table I colon rows minus Singh 1998.** I reproduced this exactly (1.21 (1.05–1.40), Q=2.35). The NOTES do not identify it, and L24 is unmarked.
3. **WCRF per 100 g is reproducible.** The NOTES call it "not reproducible". Imputing Larsson's upper CI symmetrically (1.95) reproduces the figure value as fixed effect and the text value as random effects. The CUP T36 version, 1.29 (0.94–1.78) with I² 32%, is not reproduced.
4. **Chan HvL colon.** The NOTES say the 12 rows reproduce 1.18 (1.04–1.35). That is true for the RR and CI, but n=10 and p=0.70 require within-study combination (see §3).
5. **Chan proximal/distal HvL.** The NOTES present Larsson + Chao (refs [34,54]) as the n=2 sets. These rows **do not reproduce** Chan T1: 1.20 vs 1.13, and 1.18 with I² 91% vs 1.57 with I² 53%. The NOTES do not test this.
6. **Missing sex-strata rows.** The NOTES list the Fig 71/75/79 summaries but do not say that most of those analyses' per-study weights are absent (11 entries; Fig 79 entirely).
7. **Group structure.** The extraction NOTES say to "filter on source_page" to separate the SLR and Chan colon sets. The table's own columns (synth_id × outcome × analysis × increment) merge:
   - Fig 70 with the Fig 71 sex rows: naive CRC DR has k=10, giving 1.18 instead of 1.17.
   - Fig 74 with Fig 75 and Chan Fig 4: naive colon DR has k=21, giving 1.14.

   See Part A of the output. This is a structural problem the NOTES understate.
8. **Cases.** The NOTES do not mention that the cup2010 `cases` are cited to pages that do not print them (§1a global note).

## 5. Recommended corrections (not applied)

1. **Add an `analysis_set` column**, e.g. `SLR2010_Fig70`, `SLR2010_Fig71_F`, `SLR2010_Fig74`, `Chan2011_Fig4_colon`, `Larsson2006_TII_colon`, `Norat2002_Fig2_cohort`, `WCRF2007_Fig4.3.2`. Alternatively, give Chan 2011 rows (L155–171) their own synth_id `chan2011`. Without one of these, the naive groups mix analyses.
2. **L96, 97, 102, 103, 106, 107, 110, 111, 113, 114, 117, 121, 122**: set `contrast` = "per 100 g/day" and move the HvL category text into `extraction_notes`.
3. **L4, L5 (Thun)**: add to notes "Fig 2 plots one combined Thun entry ≈1.14 (0.93–1.39) (K11 digitisation of norat_p-05.png); these M/F Appendix rows are not the analysed entry". Optionally add one approximate row flagged `digitised`. The owner needs to decide this, because the figure pass's rule is no estimation from positions.
4. **L16 (Norat Singh)**: add a note that the Fig 2 box sits at ≈1.50 (≈0.95–2.36), not 1.41 (0.90–2.21). Low confidence.
5. **L24 (Larsson Singh)**: add a note "not in Table II colon subgroup (n=9); exclusion reproduces 1.21 (1.05–1.40), Q 2.35 exactly".
6. **L165–167**: mark them explicitly `not in any pooled analysis (Chan S1 primary per-time estimate)`, or move them out of cup2010.
7. **L170–171**: add a note "Chan T1 red-meat proximal 1.13 (0.83–1.54) and distal 1.57 (0.98–2.49) are NOT reproduced by Larsson + Chao (1.20; 1.18); Chao values are red+processed (S1); S2 states no subsite meta-analysis". Keep them flagged until the Chao 2005 primary paper has been checked.
8. **Add the missing sex-strata rows** with their own weights:
   - Fig 71: Lee F 35.70, Larsson F 55.60, Pietinen M 56.21
   - Fig 75: Lee F 26.64, Wei NHS 50.94, Bostick 17.76, Wei HPFS 92.46
   - Fig 79: Lee 0.74 (0.33–1.66) 25.51, Larsson 0.98 (0.55–1.72) 51.93, Wei NHS 0.91 (0.39–2.15) 22.57, Wei HPFS 0.95 (0.47–1.89) 100
9. **L93 (WCRF Larsson 2005 per 100 g)**: keep `ci_high` blank. Add to notes that an imputed 1.95 reproduces both printed summaries (FE = figure, RE = text).
10. **L69 (Phillips 1975, WCRF)**: change the outcome note to "site not printed (colorectal or colon); rm2010 T35 calls it case-control".
11. **`cases` source citations in cup2010**: cite Chan S1/S2 (or Larsson 2006 Table I for L155 389, L135 100) instead of the figure or T37 pages that do not print cases.
12. **Chan HvL colon**: add a note that n=10 and p=0.70 imply within-study FE combination of Oba M/F and Larsson proximal/distal.

## 6. Material I would need

- **Chao 2005 (JAMA 293:172), primary paper.** Needed for the red-meat-only proximal/distal estimates, to resolve L170/171 and Chan T1.
- **A higher-resolution rendering or the native image of Norat Fig 2** (norat_img-00x). Needed to firm up the Thun and Singh digitisation. I used only norat_p-05.png.
- **The WCRF 2007 Second Expert Report PDF, pp120–121.** Needed for the Fig 4.3.3 Larsson CI and Fig 4.3.4.
