# K8 control – hoang2023 (UK Biobank, diet × PRS; BMC Cancer 23:993)

Full text: /home/claude/drive/post2015/hoang2023.txt. Rows in estimates.csv: 72 (hoang2023_001–072).

## Method
- All 72 rows were checked by script (`hoang_check.py`, parsing Table 2, Table 3 and Table 4 of the txt). Fields checked: category_label, n_cases, n_in_category (No. participants), person_years, point, ci_low, ci_high and p_trend. **0 numeric mismatches.**
- Exposure definitions, models, flags, adjustments.csv and studies.csv were checked by reading.

## Category case sums (KODEBOK check 5)
| Set | Sum of cases | Paper total |
|---|---|---|
| Table 2, red meat | 4,681 | 4,686 |
| Table 2, processed | 4,680 | 4,686 |
| Table 2, poultry | 4,678 | 4,686 |
| Table 2, fish | 4,679 | 4,686 |
| Table 3, low-PRS column (red/proc/poultry/fish) | 1,038 / 1,037 / 1,039 / 1,037 | n/a |

The shortfalls of 5–8 cases match the paper's complete-case approach ("complete-case analysis approach", Methods). studies.csv notes this correctly. Reference categories are correct: Table 2 uses the lowest intake. Table 3 uses the "healthy" category as reference, which is the HIGHEST intake for poultry (≥2) and fish (>2).

## Discrepancies
| estimate_id | field | in database | in paper | severity |
|---|---|---|---|---|
| hoang2023_031–033 (poultry), _034–036 (fish) | category_rank / dose order | rank 1 = "≥ 2" / "> 2" (highest intake), so doses fall with rank | Table 3 reference is the highest-intake category. Coding as printed is fine, but it breaks KODEBOK check 4 (doses rise with rank) | minor (already explained in notes; mark it so GL scripts skip these sets or re-rank them) |
| adjustments hoang2023_m2 | covariates_text | follows Table 2 footnote (no household income) | Methods say income was adjusted in "the multivariable analysis"; the Table 2 footnote omits it, while the Table 3/4 footnotes include it | minor (the paper is ambiguous; m2 should say this in notes; NOTES already mention it) |

No critical or major discrepancies.

## Flags and definitions
- exposure `red_undefined` with `exposure_includes_processed = unclear`: I agree. The paper says only "We grouped single items to obtain the consumption of red meat". The items are beef, lamb/mutton and pork, with processed meat a separate item and exposure. Unprocessed is very likely but not stated.
- is_main_model: Table 2 adjusted = yes and crude = no. Table 3 and Table 4 rows = no. Correct.
- adjustments: adj_age = unclear is correct, because age appears in no covariate list and the time scale is not stated. No energy adjustment (frequency questionnaire) is correct.
- studies.csv: n = 374,004, median follow-up 12.4 y, 2006–2010, age 39–73, cases 4,686/3,131/1,555 and ICD codes are all confirmed. outcome_ascertainment = unclear is acceptable, since the paper does not describe linkage.

## Missing estimates
- None codeable from the main text. Sex-specific and subsite estimates are in Additional file 1 (Tables S4, S5, S7–S10), which is not available. The text gives only directions ("in men only").
- Table 3 intermediate- and high-PRS joint cells were not coded by design: they mix the PRS effect with diet. Table 4 already gives the within-tertile diet HRs. I accept this.
- Table 4 cumulative risks (CR %) are not HRs, so they are correctly not coded.

## Confirmed
All 72 rows are numerically confirmed. Rows 001–030 and 037–072 are confirmed in all fields. Rows 031–036 are confirmed except for the rank-order caveat above.

## Internal inconsistencies in the paper
- Results text: WCRF score "HR = 1.12, 95% CI = 1.05–1.09". Table 2 prints 1.05–1.19. This is not a meat row.
- Household income is listed as a covariate in Methods but is missing from the Table 2 footnote (see above).
- Log-symmetry flags on 014 "1.03 (0.97–1.11)" and 024 "0.96 (0.89–1.05)" are consistent with rounding, not misprints.

## Verdict
Fit for use. Every number matches. Note that the exposure is frequency only (times/week, no portion sizes), so no dose conversion is possible. The study can enter only high-vs-low or frequency analyses, never per-100 g pooling.
