# K7 control – bradbury2020 (Bradbury, Murphy & Key, Int J Epidemiol 2020;49:246–258)

Full text: `drive/post2015/bradbury2020.txt`. Figure 1 is not in the text file; I rendered `pdf_in/dyz064.pdf` page 4 (journal p. 249) with pdftoppm at 220 dpi and transcribed it independently.
Rows checked: 50 (bradbury2020_001–050). Figure 1 rows (001–025) were compared by script with my transcription: 0 mismatches. Table 3 (p. 255) and the text estimates (p. 252, 255) were checked by reading.

## Discrepancies

| estimate_id | field | in database | in paper | severity |
|---|---|---|---|---|
| bradbury2020 (studies) | n_participants | 475581 (whole cohort) | The meat-analysis populations in Fig 1 are 468,323 (red+processed), 468,910 (red), 473,436 (processed). The codebook asks for the analysis population. | minor (the notes give 468,910) |
| 047, 048 | exposure | `red_total` ("text says 'red-meat intake'") | The sentence opens with heterogeneity for "red and processed meat (P = 0.008)", then gives "HR for each 50-g/day increment in red-meat intake = 1.39"; the next sentence gives P = 0.008 for red meat too. | minor: genuinely ambiguous. The database reading is the more natural one, but it cannot be resolved without Suppl Table 4. Keep the flag in exposure_text. |

## Number check (Figure 1, rendered PDF)
Every cell matches: mean intake, participants, cases, HR, CI and Ptrend, for all five food groups (red+processed, red, processed, poultry, fish). Category cases sum to the printed totals:
- red+processed: 2575 = 2575, participants 468,323
- red: 2576 = 2576, participants 468,910
- processed: 2597 = 2597, participants 473,436
- fish: 2576 = 2576, participants 470,091
- poultry: the total case count is not printed; categories sum to 2595, participants 473,599 match. n_cases empty on row 020 is correct.

The reference categories are the lowest intake categories, printed as 1.00 (1.00, 1.00). p_trend is placed on the top category and on the trend row; the duplication is harmless.

## Table 3 and text
- 026–040: the Table 3 sequential adjustment values (1.26 (1.12–1.42) → … → 1.17 (1.04–1.32)) and their order all match. 026 = minimally adjusted (m1); 040 = fully adjusted (m2).
- 041–043: further adjusted for milk, cheese and fibre from bread/cereals: 1.18 (1.05–1.33), 1.19 (1.00–1.41), 1.20 (1.03–1.40) (p. 252). Confirmed.
- 044: red meat + processed meat 1.12 (0.94–1.34). 045: processed per **50 g** 1.40 (1.04–1.88). 046: processed + red meat 1.33 (0.98–1.83) (p. 255). All confirmed. Note that 045/046 are per 50 g, unlike Fig 1's per 25 g.
- 047/048: men 1.39 (1.17–1.64) and women 0.99 (0.83–1.19). Confirmed.
- 049/050: oily fish 0.87 (0.74–1.02) and non-oily fish 0.94 (0.76–1.17) per 25 g. Confirmed.

## Calibrated flags
- The per-increment trend rows (005, 010, 015, 020, 025, 026–050) have is_calibrated = yes and is_main_model = no. The methods say that re-measured mean intakes from the 24-h assessments were assigned to the baseline categories to estimate trends, an approach that "reduces the impact of regression dilution bias". The flag is a defensible reading of codebook 4.2.
- Caution for users: this is a re-measurement/regression-dilution approach, not EPIC-style regression calibration. The category HRs and the trend come from the same Cox model, and **the per-increment estimate is the paper's own headline dose-response**. Any dose-response pool will have to use these "calibrated" rows (or reconstruct the trend from the categories with the printed means), so `is_calibrated = yes` must not be read as "exclude".
- Category rows (is_calibrated = no, is_main_model = yes) are correct. Their dose_point values are the re-measured means (`paper_mean`), which is also correct.

## Adjustments
- m2 matches the Figure 1 footnote and Methods. Waist circumference is coded as adj_bmi = no, which is defensible and noted; BMI was used only as a sensitivity analysis. adj_energy = no is correct because total energy was not available. adj_screening = no is correct. adj_folate = yes refers to supplements only, as noted.
- m3, m4 and m5 match their text descriptions. 044 has is_mutually_adjusted_processed = yes, which is correct.
- Sequential sets s01–s13 match the cumulative order of Table 3.

## Missing estimates
None in the main text. Sex-specific category results, colon/rectum/proximal/distal results, minimally adjusted Fig 1 equivalents and the "no diet change" sensitivity analyses are in Supplementary Tables 3, 4, 5, 8 and 9, which are not available. bradbury2019.txt is the advance-access version of the same paper and is correctly not coded.

## Confirmed rows
All 50 rows are confirmed numerically. 047/048 carry an exposure-reading caveat.

## Internal inconsistencies in the paper
None for meat. The total of 2609 CRC cases (text) vs 2575–2597 in the Fig 1 analyses reflects missing exposure data, as the paper explains.
