PRS Pipeline — Stage 0 Findings

Date: 2026-05-07 Status: Stage 0 complete; falling back to zero-PRS for Track A.

Question being answered

Can we obtain a UKB-shaped sample patient (CSV row + biomarker values + comorbidity PRS scalars) to use as the Track A pipeline burn-in input for build_pdr1_input_csv.py and build_pdr2_input_pickle.py, before Maureen’s genome-wide genotype data arrives?

Sources checked

Local snapshots

PathWhat’s thereSample patient?
docs/References/PDR1/LICENSE, README, code/, figures/, patient_merge.py, preprocessing_utils.py, split_GPKG.py, requirements.txt, Supplementary_Material/No
docs/References/PDR1/Supplementary_Material/Baseline_Patient_Characteristics.csv, _Read_Me.txt, supp_clusters/ (PDFs + interactive HTML cluster plots)No — Baseline_Patient_Characteristics.csv is a 127-line TriNetX cohort aggregate table (ketamine vs antidepressants in the AD validation cohort), not a per-patient feature row.
docs/References/PDR2/LICENSE, README, supplementary.pdf, the paper PDF, reasoning/ (config + script + ultra), split_KG.py, requirements.txtNo
docs/References/PDR2/.gitignoreStandard Python boilerplate plus *.txt, *.tsv, *.pkl, *.ptThe data formats are explicitly excluded from the repo.

Live GitHub

  • github.com/ceragoguztuzun/PrecisionDrugRepurposing — same structure as our local snapshot. README references {patients_data_filepath}.csv as a placeholder; no actual example file. References data/ and test_data/ folders but they aren’t shipped.
  • The same is true for the PDR2 paper’s repo (it’s the ULTRA fork — code only, no patient pickles).

UK Biobank

  • Resource 5202 readme PDF confirms 28 binary disease traits + 25 quantitative traits in the Standard PRS Release, Field IDs in 26200-26285. Pre-computed scoring is not publicly downloadable — the PRS values themselves are access-controlled UKB data. Only trait definitions are public.
  • Genomicsplc/ukb-pret/src/ukb_pret/data/traits.yaml — full trait code list. No Field-ID mapping in this YAML; it’s just (code, full_name, sex, scale, follow_up_months). The exact code→Field-ID mapping is in UKB Showcase per-trait pages and is not trivially extractable in batch.
  • The 28 binary disease trait codes (relevant subset for PDR’s PRS slot): AD, AF, AMD, AST, BC, BD, CAD, CD, CED, CRC, CVD, EOC, HT, ISS, MEL, MS, OP, PC, PD, POAG, PSO, RA, SCZ, SLE, T1D, T2D, UC, VTE. (CRC = “Bowel cancer”; relevant for Maureen.)

Email path (deferred)

The PDR paper authors were already contacted previously, per an internal memory note, re: the original split files. We could append a request for a sample patient pickle to that thread, but per user policy emails require explicit approval — flagged as a follow-up the user can choose to send.

Conclusion

No usable sample patient data is obtainable through automated channels. Falling back to the planned zero-PRS placeholder for Track A:

  • prs_values = numpy.zeros(len(disease_names)) — after PDR2’s z-score normalization, this becomes 0 everywhere; PersonalizedRepurposingLoss’s tanh(weight · prs_values) term becomes tanh(0) = 0, contributing nothing to the loss.
  • expr_values is real (from Caris WTS via mods_gene_expression).
  • This makes Track A a controlled baseline: the zero-PRS run is the foundation-model-with-expression-only baseline, against which Track B’s real-PRS run can be A/B’d to measure PRS contribution.

Implications for downstream stages

  1. Stage 1 (PGS Catalog connector): still needed — once Maureen’s genotypes arrive, we map UKB trait codes (AD, CRC, T2D, ...) → UMLS CUIs → PGS Catalog scoring files. The trait code list above is our default disease_names set. PGS Catalog has scoring files for all 28 UKB diseases.
  2. Stage 4 (PDR2 pickle builder): --source synthetic_zeros becomes the default invocation for Track A. Generates a pickle with real expr_values + zeros prs_values.
  3. Stage 5 (PDR1 CSV builder): emit the CSV with Standard PRS for alzheimer's disease (AD) = 0 and PRS_{CUI} = 0 for each comorbidity column.
  4. Stage 6 (Track B): when genotype data arrives, swap the PRS source by re-running the builders with --source maureen. No code change needed beyond Stages 1-3.

CUI mapping (preliminary, will be finalized in Stage 1)

These are the trait-code → UMLS CUI mappings we’ll use to populate disease_names. UMLS CUIs taken from standard mappings; final list will be cross-checked against GP-KG entity names at Stage 1.

UKB codeTraitLikely CUIIn GP-KG?
CRCBowel cancer (colorectal)C1527249TBD
ADAlzheimer’s diseaseC0002395Yes (paper-confirmed)
T2DType 2 diabetesC0011860TBD
CADCoronary artery diseaseC1956346TBD
HTHypertensionC0020538TBD
AFAtrial fibrillationC0004238TBD
ISSIschaemic strokeC0948008TBD
BCBreast cancerC0006142TBD
PCProstate cancerC0376358TBD
PDParkinson’s diseaseC0030567TBD
RARheumatoid arthritisC0003873TBD
ASTAsthmaC0004096TBD
MSMultiple sclerosisC0026769TBD

13 entries here = CRC + 12 comorbidities — matches the user’s choice in the planning question (“CRC + ~12 PDR-paper comorbidities”).