# K1 control – norat2005 (EPIC, JNCI 97:906–916)

Controller: K1, 2026-10-30. Source read: `norat2005.txt` (Table 1 p. 908, Table 2 p. 910, Table 3 p. 911, Table 4 p. 912, Figs 1–3, text pp. 909–914).

## Method
- **Table 3 (150 rows).** A script parsed it: 5 exposures × 6 columns (†/‡ CRC, ‡ colon, right, left, rectum) × 5 categories. It compared point, CI, p_trend, N* and labels: 736 exact matches. The 14 remaining differences are trailing-zero formatting only (see below).
- **Table 4 (30 rows).** A script parsed it, observed and calibrated: 116 exact matches and 4 trailing-zero differences.
- **Fig 2 (26 rows).** A script parsed it: 0 mismatches.
- **Text rows 181–197 (17 rows).** Checked by hand against pp. 909–912: all match.
- **Case sums.** N* per exposure sums to 1,329 in all 5 blocks (re-derived). Subsite category sets correctly have empty `n_cases`, because N* is CRC cases only.
- **Page numbers.** Verified from the page footers in the text: Table 3 = p. 911, Table 4 = p. 912, Fig 2 = p. 913, Results text = p. 910. All correct.

## Discrepancies

| estimate_id | field | in database | in paper | severity |
|---|---|---|---|---|
| norat2005_007, 014, 015, 017, 018, 019, 023, 025, 027, 029, 038, 040, 043, 045 | point / ci_low / ci_high | trailing zero dropped, e.g. `1.0`, `0.9`, `1.3` | printed `1.00`, `0.90`, `1.30` (Table 3) | minor (R2 "alle desimaler"; numerically identical) |
| norat2005_033, 034, 036, 049 | point / ci_high | `1.2`, `2.5`, `3.3`, `0.7` | `1.20`, `2.50`, `3.30`, `0.70` (Table 4) | minor (same) |
| norat2005_031, 033, 035, 047–049, 160, 162, 164, 167, 169, 172, 174, 177, 179 (Table 4 observed) | is_main_model | `no` | Table 4 model = same covariates as Table 3 ‡ (footnotes); it is the paper's headline per-100 g estimate | major (flag). Under KODEBOK 4.2 the observed Table 4 model is the fully adjusted, non-calibrated main model for the continuous contrast. Larsson's equivalent continuous rows are coded `yes`, so the convention is inconsistent across studies. A script that selects `is_main_model = yes` and `contrast_type = continuous` would find **no** EPIC row, although rows 031/033/035 are exactly what CUP used. Recommend `yes` on the observed rows. |
| norat2005_037, 050, 055, 060, 065, 070 (R&P rank 1) | dose_high | `10` (label "<10") | printed "<10", but the abstract says "lowest [<20 g/day]"; the next category is 20–40, so the reference must be <20 | major (dose) if dose_high is used directly. dose_conversions c7–c13 already assign midpoint 10 (i.e. <20), so the GL inputs are right. Recommend dose_high = 20 with a note "printed <10". |
| (studies.csv) norat2005 | diet_instrument | `ffq` | self-administered FFQ at most centres; interview in Greece, Spain and Ragusa; questionnaire + food record in Malmö (p. 907) | minor (`mixed` fits better) |

## Key points verified
- **Red meat** → `red_unprocessed`, `exposure_includes_processed = no`. Correct. It is defined as fresh, minced and frozen beef, veal, pork and lamb, with processed meat a separate group (p. 907).
- **Red and processed meat** → `red_total`, `yes`. Correct.
- **CUP-relevant rows.** CUP used observed per 100 g red meat:
  - CRC **031**: 1.21 (1.02–1.43), p .03
  - colon **033**: 1.20 (0.96–1.48)
  - rectum **035**: 1.23 (0.94–1.62)

  All exact. The calibrated counterparts are 032 (1.49, 0.91–2.43), 034 (1.36, 0.74–2.50) and 036 (1.75, 0.93–3.30), all exact and `is_calibrated = yes`. Which of the two sets is "rule-conform" is a project decision: KODEBOK §7 says EPIC calibrated, while §4.2 excludes calibrated rows from the main model.
- **is_main_model.** The Table 3 ‡ sets are `yes` and the † sets are `no`. Correct. See the discrepancy above for Table 4.
- **Doses.** No medians are printed, and `dose_point` is correctly empty. The c1 conversion has been corrected to an open-top midpoint of 100 (5;15;30;60;100), in line with KODEBOK 4.3.
- **Denominators.** Table 4 rows carry the cohort's total person-years 2,279,075 and the outcome totals 1,329 / 855 / 474. Correct.
- **adjustments.**
  - m1 (†) and m2 (‡) match the Table 3 footnotes.
  - m3 matches the Table 4 footnote.
  - m4 is folate + multivitamin.
  - m5 (Fig 3: fibre not listed in the legend) and m6 are correct.
  - Height and weight tertiles are used instead of BMI, so `adj_bmi = no` with a note. Acceptable.
- **studies.csv:** n 478,040; mean 4.8 y; 2,279,075 py; 1,329 / 855 / 474 cases; 1992–1998; calibration sample 36,994. All correct.

## Missing estimates
- None required. Every Table 3 and Table 4 cell has a row.
- **Optional:** Fig 3A/3B cell HRs printed without CIs (3A: 1.28, 1.20, 1.46, 1.33, 1.56, 1.63, 1.12; 3B: 1.30, 0.93, 1.22, 1.00, 1.09, 1.20, 1.38, 1.50). Only the cells with a CI in the text were coded. They are cross-classified cells, not dose contrasts, so they have low value.
- Not coded, with reason (agreed):
  - mutually adjusted continuous model (p-values only)
  - pork mutually adjusted (p-trend only)
  - absolute 10-year risks
  - sex-specific results (not presented)

## Rows confirmed
All 223 rows are numerically correct. All rows except those listed in the discrepancy table are confirmed without remarks.

## Internal inconsistencies in the paper
All are recorded as printed and noted by the extractor; confirmed:
- Red meat ≥80, model †: "1.28 (1.1 to 1.64)". The lower limit is probably 1.01 (row 005).
- R&P reference "<10" in Table 3 vs "<20" in the abstract.
- Fig 2 "All EPIC" n = 1,389. The centres sum to 1,263, and the cohort total is 1,329.
- The Fig 2 header says "for 10 g/day" while the legend says "per 100-g". The R&P All-EPIC value 1.02 (0.99–1.06) per 10 g does not match Table 4 calibrated 1.55 per 100 g; fish does match.
- Heidelberg (48 cases) is shown in Fig 2 although the legend excludes centres with fewer than 50 cases.
- The abstract lists folate among the covariates, but the Table 3/4 footnotes do not. Folate is only in the subset analysis.
- The Discussion says "high red meat and low fish" for a figure that cross-classifies red **and processed** meat.
- Folate subset non-cases: 407,959 (Results) vs 409,135 (Methods).

## Verdict
Fit for use. Every published number is exact (formatting aside), and the CUP rows 031/033/035 are correct. Two fixes are recommended before pooling scripts run:
1. Set `is_main_model = yes` on the Table 4 observed rows, or document that continuous rows are selected by id.
2. Make the R&P reference category's upper bound 20 (or flag it machine-readably).
