# K6 control – spencer2010 (UK Dietary Cohort Consortium, Cancer Causes Control 2010;21:1417–1425)

Controller: K6 · 2026-10-30 · Sources: `post2015/spencer2010.txt`. Table 2 continued (fatty fish, p. 1423) is scrambled in the txt because the page is rotated. It was read from `pdf_in/spencer2010.pdf` rendered with pdftoppm (p. 7 of the PDF, rotated). Page 1423's text (fibre-stratified and subset analyses) was also read from the rendering.

## Method
- Table 2 (p. 1422) was parsed by script from the txt. The fatty-fish block was transcribed from the rendered PDF.
- For all 90 Table 2 rows, the script compared:
  - point, CI and p_trend (on the top category and the continuous row);
  - median dose;
  - cases;
  - controls (n_in_category, `n_controls`).
- The 3 text rows (total meat per 50 g) were checked by reading.
- Case and control sums per exposure × outcome were computed.

## Results of the number check
- **90/90 Table 2 rows match exactly. 0 mismatches.** All three text rows match p. 1420: 0.90 (0.79–1.03), 0.94 (0.80–1.11), 0.82 (0.65–1.03).
- **Control counts per category are correct on every row.** Every exposure block sums to:
  - colorectal: 579 cases / 1996 controls;
  - colon: 380 / 1316;
  - rectum: 199 / 680.

  This is consistent across all six exposures. It also agrees with:
  - Results: 266 men + 313 women = 579; 980 + 1016 = 1996;
  - Table 1 per-cohort cases (318+121+28+7+31+25+49 = 579) and controls (1272+280+55+28+70+100+191 = 1996).
- **The reference category** (lowest intake, OR 1.00, empty CI) is correct in all 18 sets.
- **Medians in dose_point and dose_conversions are correct.** This includes 0.6 in the red + processed reference category, and fatty fish 0/8.6/21.4/44.3 (from the PDF).
- **Fatty-fish rows (076–090) match the rendered PDF, and source_page = 1423 is correct.**
  - Colorectal 0.81/1.08/0.73, P = 0.33, per 50 g 0.89 (0.70–1.13).
  - Colon 0.77/1.24/0.73, P = 0.21, 0.82 (0.61–1.11).
  - Rectum 0.86/0.78/0.68, P = 0.95, 0.99 (0.68–1.44).
- **All printed CIs contain the point estimate.**

## Discrepancies

| estimate_id | field | in database | in paper | severity |
|---|---|---|---|---|
| spencer2010_061–090 (white fish and fatty fish, 30 rows) | is_main_model | `yes` on both fish variables for the same exposure (`fish`) × outcome × sex | KODEBOK 4.2 asks for one main row per exposure × outcome × sex. The paper has no combined fish variable, so two parallel "main" fish series exist. The category_set_id suffix (`_whitefish` / `_fattyfish`) distinguishes them, but a script filtering on exposure + is_main_model gets two rows | major (flag), low impact: negative-control exposure |
| studies.csv | diet_instrument | `mixed` | 4-, 5- or 7-day food diaries. `food_record` has since been added to the vocabulary extension (KODEBOK 3.1 footnote) | minor |
| spencer2010_m1 | adj_bmi | `no` | Height and weight are adjusted in sex-specific categories (p. 1420). Not BMI, but body size is adjusted. The note explains this; an adjustment-gradient script would undercount | minor |

## Checked by reading
- **Exposure definitions, p. 1419:**
  - **Red meat** = beef, pork, lamb and burgers; it "excluded processed red meat" and offal. So `red_unprocessed`, includes_processed = no. Correct.
  - **Processed meat** = ham, bacon and sausage meat. `processed`. Correct.
  - **Red and processed meat** → `red_total`. Correct.
  - **Poultry** includes the "flesh component of products made with poultry". includes_processed = unclear is reasonable.
  - **Total meat** (text) = red + processed + poultry → `total_meat`, includes_processed = yes. Correct.
- **Outcome.** Colon = ICD 153.0–153.9/C18; rectum = 154.0–154.1/C19–20. Correct.
- **Model.** Table 2 footnote \* plus the Methods match spencer2010_m1:
  - age, height, weight, smoking, energy, alcohol, fibre;
  - matching on cohort, sex, age ±3 y and diary month ±3 mo, plus the diary-coding program.
  - adj_stratified_center = yes (matching on cohort) is acceptable.
  - Subset models with education, SES, physical activity, family history and aspirin have no numbers (p. 1423: "no material difference"). Correctly not coded.
- **effect_measure = OR** with conditional logistic regression; design `nested_cc`. Correct.
- **p_trend from the continuous variable** (footnote \*\*) sits on both the top-category row and the continuous row. That is acceptable under KODEBOK 3.3.
- **studies.csv.** n = 2575, cases 579 / 380 / 199, diaries 1985–2003, registry follow-up, in_cup2016 = no. All consistent with the paper.

## Missing estimates
None with numbers.
- The fibre-stratified analyses (<18 / ≥18 g/day, p. 1423) report only "P values for trend test 0.18 to 0.89", with no ORs.
- The subset re-adjustment and the OVS-exclusion sensitivity analysis have no numbers either.

## Confirmed rows
All 93 rows are confirmed on the numbers. The is_main_model issue applies only to the 30 fish rows.

## Internal inconsistencies in the paper
None found. The abstract, the Results text and Table 2 agree, for example on 0.73 (0.54–0.98) and 0.50 (0.29–0.85). Fatty-fish p-trend is 0.33 in both the text and the table.

## Verdict
**Fit for use.** The numbers, case counts and control counts are all exact. The only fix needed is for the analyst to resolve the double `is_main_model = yes` on fish before running negative-control pools.
