Phase 3 gate: decisions

Recorded 16 October 2026. This is the pre-specification record — it is written before any genetic result exists and should not be revised once results are in view.


D1. Primary genotype — settled: recipient primary, donor secondary in the allo-HSCT stratum

Agreed 16 October 2026. Recipient genotype is the primary exposure. Donor genotype enters as a pre-specified secondary analysis restricted to the allogeneic HSCT stratum, which carries 33% of all IMD events on 7% of admissions, and which gives Aim 3b a second host-context contrast alongside the neutropenia split. The reasoning that forced the revision is kept below for the record.

Originally stated: donor genotype as the primary exposure.

The biology supports you, the cohort does not. After allogeneic transplant the reconstituted innate immune system is donor-derived, so for PTX3, dectin-1 and the TLR genes the donor is arguably the right genome — that is the Cunha 2014 NEJM argument. But two facts block donor as the primary exposure:

  1. The baseline cohort is overwhelmingly not transplanted. In Stanzani’s Table 1, allogeneic HSCT is the reason for admission in 248 of 3,994 non-IMD admissions and 44 of 133 IMD admissions — 292 of 4,127 admissions, 7.1%. Donor genotype is undefined for the other 93%. A donor-genotype term cannot enter a model whose denominator is all haematology admissions.
  2. The evidence base cannot parameterise it. Of 970 usable variant rows, only 90 are donor-stratified. Per panel variant, the number of studies contributing a donor-specific usable estimate is at most one, and rs4804800 and rs1840680 have none. No panel variant reaches two donor studies, let alone three.

Donor-as-primary would therefore shrink the analysis to a 7% subgroup — 292 admissions, 44 events — parameterised from single studies.

Proposed instead: recipient genotype as the primary exposure, with donor genotype as a pre-specified secondary analysis restricted to the allogeneic HSCT stratum. That stratum carries 33% of all IMD events despite being 7% of admissions, so it is where a genetic effect has the most room to show, and it is where the donor-genome argument actually applies. This also gives Aim 3b a second natural contrast alongside the neutropenia split.

☑ Revision confirmed.

D2. PTX3 and TLR4 as haplotypes — accepted

Consistent with the evidence and with the thesis’s central methodological correction.

  • PTX3 enters as a single h1/h2 haplotype term, not three SNPs. In 1000 Genomes EUR, rs2305619 and rs1840680 sit at r² = 0.996 and are interchangeable; rs3816527 is at r² ≈ 0.79 with both; D′ ≈ 1 throughout. The trio collapses to two haplotypes at roughly 0.40–0.46 (h2) and 0.54 (h1). Simulating the three independently is what inflated the predecessor’s result.
  • TLR4 enters as a single rs4986790–rs4986791 haplotype term. D′ = 0.981, r² = 0.945, GT haplotype frequency 0.056 in EUR, with about 0.3% recombinant chromosomes.

Parameter cost: these two blocks contribute 2 terms rather than 5.

☑ E1. Settled 16 October 2026 (arithmetic check): coupling confirmed. haplotype_frequencies.csv assumes the minor alleles are in coupling (D > 0). The reported r² and the allele frequencies fix |D| independently of that assumption, and for every pair |D| exceeds the largest value a negative D could take given those frequencies. For example, for rs2305619 x rs3816527 the r² of 0.787 requires |D| = 0.216, but a negative D cannot exceed 0.181. TLR4 (rs4986790 x rs4986791) needs 0.0524 against a negative-phase ceiling of 0.0033. CLEC7A and CD209 are likewise consistent only with D > 0. The check assumes r² and D′ were taken from the 1000G source and not back-calculated from the assumed D. Phased 1000G haplotypes remain the route for the three-locus PTX3 frequencies, but the sign is no longer an open question.

D3. Final panel — settled, with the within-gene structure corrected

The panel chosen was: PTX3 haplotype, TLR4 haplotype, CLEC7A rs16910526, CLEC7A rs7309123, CD209 rs4804800 and/or rs7248637, with IL10 rs1800896 and IFNG rs2069705 as possibles.

Two of those terms had to be collapsed. The panel as listed carries two CLEC7A SNPs and two CD209 SNPs as separate additive terms, which is structurally the same error the thesis exists to correct — the predecessor’s mistake was treating linked SNPs within one gene as independent. Pairwise linkage disequilibrium in 1000 Genomes EUR:

pair gene r² D′ haplotypes present
rs16910526 × rs7309123 CLEC7A 0.104 1.000 3
rs4804800 × rs7248637 CD209 0.413 0.671 4

CLEC7A: D′ = 1 means no recombination between the two sites, so the rare Y238X allele (rs16910526, MAF 0.071) sits entirely on one rs7309123 background. The low r² reflects the frequency difference, not independence. Three haplotypes exist — CG 0.071, majG 0.352, majmaj 0.578 — and the Cmaj haplotype is absent. Entering both SNPs as independent additive terms double-counts the 7% of chromosomes carrying Y238X.

CD209: D′ = 0.671 means recombination has occurred and all four haplotypes are present — GA 0.082, Gmaj 0.042, majA 0.033, majmaj 0.843. The two SNPs are correlated at r² = 0.41, so again not independent.

Final panel: four core haplotype terms, with two optional single SNPs.

term variants contributing studies independent cohorts
PTX3 haplotype (h1/h2) rs2305619, rs3816527, rs1840680 7 7
CLEC7A haplotype (3 haplotypes) rs16910526, rs7309123 11 9
TLR4 haplotype rs4986790, rs4986791 5 5
CD209 haplotype (4 haplotypes) rs4804800, rs7248637 5 4
IL10 rs1800896 (optional) rs1800896 3 3
IFNG rs2069705 (optional) rs2069705 3 3

That is four core terms, six with the optional pair — comfortably inside the roughly ten-parameter ceiling that 133 events supports, and it leaves room for the Aim 4 sweep to add synthetic loci without the baseline panel already being overfitted.

CLEC7A is now the best-evidenced term in the panel at nine independent cohorts, ahead of PTX3 at seven.

Three sub-decisions remain:

☑ D3a. Settled 16 October 2026: drop TLR9 rs352140 — reported by three studies, usable in one. ☑ D3b. Settled 16 October 2026: excluded from the primary analysis and run as a sensitivity analysis. The reasoning follows. Herrero-Sanchez 2018 in or out. Its supplementary rows use Candida/Aspergillus detection or colonisation as the endpoint, not proven or probable invasive mould disease. It contributes a cohort to the PTX3 and CLEC7A terms; excluding it takes PTX3 from 7 to 6 and CLEC7A from 9 to 8. ☑ D3c. Settled 16 October 2026: carrier (dominant) model, with a continuity correction. The reasoning follows. TLR4 pooling model. Both SNPs are usable only through genotype counts, and every contributing cohort has zero minor homozygotes in cases and controls, so only a dominant or carrier model is estimable and a continuity correction is required.

D4. Minimum clinically important difference — settled: 20% more true cases, no extra false positives

Stated: a 20% improvement in prediction.

Net benefit is measured in true positives per patient, not in percent, so “20%” needs saying of what before it can be tested. Three defensible readings, with what each requires numerically. The figures come from the synthetic cohort at an exchangeable latent correlation of 0.30 (N = 400,000, prevalence 3.25%, aROC 0.852) and should be re-derived once the calibrated cohort of section A2 exists.

Baseline clinical model, net benefit:

threshold NB (model) NB (treat all) % flagged true positives / 1000 false positives / 1000
5% 0.01514 −0.01843 13.3% 21.0 111.7
10% 0.01007 −0.07501 6.0% 15.1 44.9
20% 0.00571 −0.20939 2.5% 9.5 15.4

What the genetic layer would have to add:

reading at the 5% threshold at the 20% threshold
(a) 20% relative increase in net benefit +0.00303 +0.00114
(b) 20% more true cases detected at no increase in false positives +0.00420 +0.00191
(c) 20% relative increase in standardised net benefit +0.00303 +0.00114

For scale: a net-benefit increment of 0.00100 is one extra true case found per 1,000 admissions, which across the 4,127-admission Bologna registry is about four extra cases over the decade.

Recommendation: reading (b). It is the one a clinician can state in a sentence — “the genetic layer must find 20% more cases of invasive mould disease without treating anyone extra unnecessarily” — and it is the strictest of the three. Reading (a) is simplest to compute and is the conventional decision-curve formulation. Avoid framing the MCID in terms of reclassification: a “20% improvement” expressed as NRI is precisely the predecessor thesis’s 22.5% figure, and moving off that metric is one of the reasons for redoing the work.

☑ Settled: reading (b). The genetic layer must find 20% more cases of invasive mould disease without treating anyone extra unnecessarily. In net-benefit terms that is +0.00420 at the 5% threshold and +0.00191 at the 20% threshold, on the indicative cohort. Re-derive both on the calibrated cohort before locking; the ratios will hold, the absolute values may move.

☑ Settled 16 October 2026: the 5% threshold is primary. The MCID of +0.00420 is tested at 5%, which is the Youden cut-off Stanzani used to define high risk. The 20% threshold (+0.00191) is reported as secondary and does not enter the headline conclusion, which avoids a multiplicity problem.

☑ Re-derived 17 October 2026 on the calibrated cohort. The predictor correlation structure (D7) was fitted to all 16 published targets, and the MCID recomputed exactly from the fitted profile distribution. These values replace the indicative figures above:

threshold indicative cohort calibrated cohort ensemble 90% range
5% (primary) +0.00420 +0.00428 0.00397 to 0.00460
20% (secondary) +0.00191 +0.00140 0.00117 to 0.00167

At 5% the baseline net benefit is 0.01478, with 21.4 true and 125.7 false positives per 1,000 admissions and 14.7% flagged. The primary value moved by 2% from the indicative one; the secondary value fell by 27%. The ensemble range reflects the unpublished correlation structure, and the 5% value sits on a plateau of the decision curve because the baseline has only 128 clinical profiles. The pre-specification lock (git tag) is still to be made.


D7. Predictor correlation structure — settled: version 2, nine parameters

Settled 17 October 2026. The joint distribution of the seven clinical predictors is not published, so a Gaussian-copula latent correlation matrix is a model assumption. The first version (eight parameters) left uncontrolled malignancy in cases 2.3 standard errors too high and two parameters at their upper bound, because the chemotherapy-lymphopenia correlation was tied to the block baseline that also set malignancy’s links. Version 2 gives chemotherapy-lymphopenia its own parameter and allows the three block extras to reach 0.7.

v1 v2
Parameters 8 9
Chi-square, 16 targets 8.6 0.36
Largest miss (standard errors) 2.3 (malignancy in cases) 0.4
Prevalence, aROC 3.25%, 0.848 3.22%, 0.849

The fit is saturated: about nine independent constraints for nine parameters, so a near-zero chi-square is expected and does not validate the structure. In the fitted matrix, malignancy is almost uncorrelated with the rest of the block (0.04), which is what the published figures imply under this structure and should be checked against the Bologna cross-tabulation of malignancy by chemotherapy. The decisions that depend on it are carried through an ensemble of 150 near-optimal matrices, not one point estimate.


D5. How the genetic term enters the baseline model — settled: recentred; superseded for the primary analysis by D27 (addendum 24)

Settled 16 October 2026. The genetic linear predictor is recentred (equivalently, the intercept is adjusted) so that marginal IMD prevalence stays at the calibrated baseline value of 3.3%. Any change in net benefit therefore reflects discrimination and risk redistribution, not a shift in overall event rate.

Addendum 24 (20 October 2026): a single global intercept holds the overall prevalence but not the risk within each clinical profile, so the claim in the last sentence is not guaranteed. D27 makes an intercept per profile primary and keeps this construction as a sensitivity analysis (“global-intercept truth”).

D6. Baseline aROC calibration target — settled: 0.85

Settled 16 October 2026. The correlation structure of section A2 is fitted to the published derivation aROC of 0.85, together with the 3.3% prevalence and the per-predictor case and non-case prevalences. The bootstrap-validated 0.83 is recorded in baseline_validation_targets.csv but is not a fitting target.


Record of what is now fixed

decision status
Primary genotype fixed — recipient primary; donor secondary, restricted to the allo-HSCT stratum
PTX3 as h1/h2 haplotype fixed
TLR4 as rs4986790–rs4986791 haplotype fixed
CLEC7A as a 3-haplotype term fixed — collapsed from two SNPs after LD check
CD209 as a 4-haplotype term fixed — collapsed from two SNPs after LD check
IL10 rs1800896, IFNG rs2069705 optional, include or drop at the analyst’s discretion
MCID fixed — 20% more true cases at no increase in false positives; +0.00420 at 5%, +0.00191 at 20%
MCID threshold fixed — 5% primary; 20% secondary
MCID values re-derived 17 October 2026 on the calibrated cohort: +0.00428 at 5%, +0.00140 at 20%
D7 correlation structure fixed — version 2, nine parameters
D3a drop TLR9 rs352140 fixed — dropped
D5 genetic term recentred to hold prevalence fixed; superseded for the primary analysis by D27 (profile-preserving truth), kept as sensitivity
D6 baseline aROC target fixed — 0.85
D3b Herrero-Sanchez fixed — excluded from primary; sensitivity analysis only
D3c TLR4 pooling model fixed — carrier model with continuity correction
E1 haplotype phase sign fixed — coupling, confirmed arithmetically

No Phase 3 decision is outstanding. The next step is to tag this commit as the pre-specification lock.


Addendum, 17 October 2026

Written after the prespec-lock tag. No decision above is changed.

Haplotype frequencies were derived directly from phased 1000 Genomes phase 3 European genotypes (503 samples, 1,006 chromosomes; data/haplotype_frequencies_phased.csv) and rescaled to gnomAD v4 non-Finnish-European allele frequencies by iterative proportional fitting, which keeps the odds-ratio structure of the observed table and moves only the allele frequencies.

  • E1 is confirmed directly from phased chromosomes. In every pair the minor alleles are in coupling (D > 0), as the arithmetic check showed.
  • The earlier pairwise table is reproduced. Haplotype frequencies agree to within 0.0014, and r² agrees for PTX3, TLR4 and CLEC7A. For CD209, r² is 0.431 from phased data against 0.414 in the earlier table.
  • The PTX3 trio has three common haplotypes, not two. In 1000G EUR: G-A-G 54.4%, A-C-A 39.8%, A-A-A 5.8%, and a single A-A-G chromosome (alleles in the order rs2305619, rs3816527, rs1840680). Rescaled to gnomAD NFE: 51.8%, 42.4%, 5.6% and 0.1%. rs2305619 A and rs1840680 A mark the same haplotype class (r² = 0.996), which is A-C-A plus A-A-A (45.6% in 1000G, 48.2% in gnomAD NFE). rs3816527 C splits that class, and A-C-A is about 87% of it.

D2 stands as settled: PTX3 enters as a single h1/h2 term. The evidence mapping will need an explicit definition of “h2”. Studies that report rs2305619 or rs1840680 identify the whole class (A-C-A and A-A-A); studies that report rs3816527 identify only A-C-A. A three-haplotype term would be a sensitivity analysis, not a change to D2.


Addendum 2, 18 October 2026: baseline cohort switched to the empirical profile distribution (D8)

Written after the prespec-lock tag. No genetic-layer result exists. The pre-specified MCID rule and every decision above except the primary status of D7 are unchanged.

What prompted it. The admission-level derivation data (bs.xlsx, 4,127 admissions) became available. It reproduces the published Table 2 counts apart from two non-case counts that are one lower than published (high-risk chemotherapy 776 against 777, prolonged neutropenia 1,097 against 1,098). A refit recovers the published coefficients to within 0.0063, and the apparent aROC is 0.853. It is the cohort the model was derived on, and it gives the joint distribution of the seven predictors that D7 had to assume.

What the real joint shows. Only 75 of the 128 predictor profiles occur, 35 of them in fewer than 5 admissions. The fitted copula (D7) is 0.098 away from the real distribution in total variation distance, against 0.188 for the exchangeable copula and 0.274 for independence. Several of its correlations are wrong, including some in sign (four of the 21 pairs are negative in the data, and D7 allowed none):

pair latent correlation in the data fitted copula
malignancy and CMV -0.15 +0.23
steroids and lymphopenia 0.33 0.03
steroids and prior mould disease -0.10 0.18
lymphopenia and CMV 0.49 0.23

The saturated fit reproduced the 16 published targets without recovering the structure, as D7 warned.

D8. Baseline cohort: settled

  1. The baseline cohort is the observed distribution of the 128 clinical profiles in the 4,127 admissions. Each profile’s outcome risk is the fixed Stanzani equation’s predicted risk, as before. The observed outcomes give a cross-check on that assumption.
  2. Sampling uncertainty comes from bootstrapping the admissions (2,000 resamples). Clustering of admissions within patients is ignored until the patient link is available.
  3. The fitted copula (D7) is demoted from primary to a sensitivity analysis. It smooths the 53 profiles that are not observed and stress-tests the joint distribution. It is not used for headline results.
  4. The MCID rule is unchanged: 20% more true cases of invasive mould disease at no increase in false positives, with 5% as the primary threshold and 20% secondary. The numeric values are a function of the baseline cohort, so they are re-derived on the new one and replace the copula-based values:
threshold copula, at the lock empirical cohort (adopted) observed outcomes (cross-check)
5% (primary) +0.00428 (ensemble 0.00397 to 0.00460) +0.00445 (bootstrap 90% 0.00412 to 0.00478) +0.00436
20% (secondary) +0.00140 (ensemble 0.00117 to 0.00167) +0.00142 (bootstrap 90% 0.00116 to 0.00170) +0.00141

On the empirical cohort the baseline net benefit at 5% is 0.01501, with 22.3 true and 137.9 false positives per 1,000 admissions and 16.0% flagged. The two sets of MCID values differ by 4% at 5% and 1% at 20%, and each lies inside the other’s uncertainty range, so the switch does not change what the primary test asks for.

Disclosure. The MCID under both cohorts was seen before this switch was adopted. The rule and the threshold were fixed first, and the new values follow mechanically from the data, but the choice of cohort was made after seeing that they were close. No genetic result was in view.

Still open, both from Bologna: the rule that defines the 4,127 admissions out of the full BOSCORE database (no date filter reproduces it), and the key linking bs.xlsx rows to patients, which is needed for admissions per patient. Until then the bootstrap treats admissions as independent. The empirical cohort is re-derived if the file changes.

decision before now
D7 predictor correlation structure primary baseline sensitivity analysis
D8 baseline cohort (none) empirical 128-profile distribution
MCID values +0.00428 at 5%, +0.00140 at 20% +0.00445 at 5%, +0.00142 at 20%
MCID rule, primary threshold, D1 to D6, E1 fixed unchanged

Code and outputs: scripts/07_empirical_baseline.R, output/dca_empirical_summary.csv, output/empirical_vs_copula_summary.csv, output/empirical_vs_copula_correlations.csv.


Addendum 3, 18 October 2026: base dataset, twin correction and patient-level bootstrap (D9)

Written after the prespec-lock tag and after addendum 2. No genetic-layer result exists. The MCID rule, the primary threshold, the fixed published equation and every decision above except the baseline cohort and the bootstrap are unchanged.

What prompted it. boscore.xlsx, the parent file of bs.xlsx, became available. It reconciles with bs.xlsx exactly (scripts/08_reconcile_boscore.R checks this and stops if anything changes):

  • The seven bs.xlsx predictors are the BOSCORE_* columns: BOSCORE_8 uncontrolled malignancy, _9 high-risk chemotherapy, _6 high-dose steroids, _11 severe lymphopenia, _15 CMV, _10 prolonged neutropenia and _4 prior mould disease, with 100% agreement on all 4,127 rows. The outcome matches, and id in bs.xlsx is the row number.
  • The paper’s analysis set is the 4,127 of the 4,694 rows with complete data on those seven items. All 567 excluded rows have a missing item.
  • 49 admission numbers appear on two rows. In every pair the patient and the predictor profile are identical and exactly one row is an event. So the 4,127 rows are 4,078 unique admissions, and 133 events in 4,078 is 3.26%, the paper’s stated 3.3% (133 in 4,127 is 3.22%). The published equation reproduces only from the rows with the twins in, so it appears to have been fitted with them.

D9. Base dataset and baseline cohort: settled

  1. The base dataset is boscore.xlsx, restricted by the inclusion rule above to the 4,127 rows of the analysis set.
  2. The baseline cohort is the 4,078 unique admissions. For each of the 49 duplicated admission numbers the event row is kept and the non-event twin is dropped. The cohort has 4,078 admissions in 1,945 patients (2.10 per patient) and all 133 events. It replaces the 4,127-row cohort of D8. The 4,127 rows stay as a sensitivity analysis.
  3. The bootstrap resamples patients, with all their admissions, 2,000 resamples. This replaces the admission-level bootstrap of D8, which ignored clustering. The admission-level intervals are kept for comparison.
  4. The MCID rule is unchanged (20% more true cases at no increase in false positives; 5% primary, 20% secondary). Its values are a function of the baseline cohort, so they are re-derived on the new one:
threshold copula, at the lock 4,127 rows (D8) base cohort, 4,078 (adopted) observed outcomes (cross-check)
5% (primary) +0.00428 +0.00445 +0.00404 (patient bootstrap 90% 0.00370 to 0.00438) +0.00441
10% not recorded +0.00276 +0.00239 (0.00207 to 0.00269) +0.00265
20% (secondary) +0.00140 +0.00142 +0.00113 (0.00090 to 0.00137) +0.00142

On the base cohort the baseline net benefit at 5% is 0.01327, with 20.2 true and 131.8 false positives per 1,000 admissions and 15.2% flagged. With the twins in, the patient-level intervals are about 25% wider than the admission-level ones (5% MCID: 0.00404 to 0.00488 against 0.00412 to 0.00477). On the base cohort they are 3 to 12% wider (0.00370 to 0.00438 against 0.00373 to 0.00435), because the twins were adding within-patient correlation. 5. The outcome risk stays the published equation’s. The equation was fitted with the twins in, and on the corrected cohort it under-predicts slightly: mean predicted risk 3.06% against 3.26% observed, aROC 0.858. A refit on the unique admissions gives larger coefficients (CMV 1.42 against 1.14, prior mould disease 1.99 against 1.64, intercept -5.59 against -5.45). The model is not refitted, as before. Because the observed-outcome cross-check gives a higher MCID at 5% (+0.00441, 9% above the model-implied value) and at 20% (+0.00142, 25% above), the choice of outcome risk matters. A “truth equals the refit” scenario is recorded as a sensitivity analysis for the genetic layer and has not been run. 6. D6 is consistent with the correction. The 3.3% prevalence target is the corrected prevalence (3.26%); the 3.22% noted earlier came from counting the twin rows. 7. Data handling. The cohort is stored as data/restricted/base_cohort_pseudonymised.csv (gitignored): random patient and admission codes, admission year, the seven predictors, the outcome and a twin flag. read_boscore() skips names, birth dates and every column it does not need when it reads the file.

Disclosure. The MCID on the rows and on the unique admissions was seen before this decision was taken, and the correction lowers the primary threshold by 9% (+0.00445 to +0.00404) and the secondary by 20%. A lower threshold is easier to meet. The correction is made because the twin rows are duplicate records of event admissions, not because of its effect on the MCID. To keep the primary test honest, results will be reported against both the base-cohort MCID and the 4,127-row MCID (+0.00445 at 5%).

Still open. Bologna should confirm that the 49 pairs are a recording artefact, and explain the two Table 2 non-case counts that exceed the file’s by one (high-risk chemotherapy 777 against 776, prolonged neutropenia 1,098 against 1,097). If the pairs turn out to be legitimate, the 4,127-row cohort becomes the baseline again.

decision before (addendum 2) now
Baseline cohort 4,127 rows of bs.xlsx (D8) 4,078 unique admissions of boscore.xlsx (D9)
Bootstrap admissions patients
MCID at 5% / 20% +0.00445 / +0.00142 +0.00404 / +0.00113
D7 copula, MCID rule, primary threshold, fixed equation, D1 to D6, E1 as stated unchanged

Code and outputs: scripts/08_reconcile_boscore.R, scripts/09_baseline_cohort.R, R/boscore_data.R, output/boscore_reconciliation.csv, output/boscore_predictor_mapping.csv, output/boscore_cohort_summary.csv, output/admissions_per_patient.csv, output/dca_baseline_summary.csv, output/dca_baseline_sensitivity.csv.


Addendum 4, 18 October 2026: how the MCID depends on the outcome risk (no decision changed)

Written after the tag. D9 item 5 recorded a “truth equals the refit” scenario as a sensitivity analysis. It has now been run on the base cohort (4,078 admissions in 1,945 patients), resampling patients 2,000 times with the refit repeated inside each resample, so its uncertainty is included. The decision rule is the published equation’s, except in scenario C.

MCID (90% patient-bootstrap interval) A: published truth (adopted) B: refit truth, published rule C: refit truth and rule D: observed outcomes
5% (primary) +0.00404 (0.00368 to 0.00439) +0.00452 (0.00380 to 0.00529) +0.00458 (0.00386 to 0.00564) +0.00441 (0.00367 to 0.00519)
10% +0.00239 (0.00208 to 0.00271) +0.00277 (0.00222 to 0.00333) +0.00285 (0.00239 to 0.00454) +0.00265 (0.00205 to 0.00328)
20% (secondary) +0.00113 (0.00090 to 0.00138) +0.00137 (0.00100 to 0.00175) +0.00160 (0.00121 to 0.00301) +0.00142 (0.00100 to 0.00188)
  • The adopted value is the lowest of the four readings at every threshold. The alternatives raise it by 9 to 13% at 5%, 11 to 19% at 10% and 21 to 41% at 20%.
  • The data cannot separate them. The intervals overlap, and the published coefficient lies inside the refit’s 90% bootstrap interval for every term. The refit coefficients are larger (CMV 1.42 against 1.14, prior mould disease 1.99 against 1.64, intercept -5.59 against -5.45), but not detectably so.
  • Why the direction is upward. The published equation under-predicts on the corrected cohort (3.06% against 3.26% observed), so the people it flags contain more true cases than the model implies, and the MCID is 0.2 times the true positives.
  • Scenario C at 20% is unstable (interval 0.00121 to 0.00301): few profiles sit near the threshold, so the refit rule changes which profiles it flags from one resample to the next.

No decision changes. Treating the published equation as truth is the most permissive reading for the primary test, and that is stated here. The D9 commitment to report against the 4,127-row MCID also brackets the other readings: at 5% it is +0.00445 against +0.00441 to +0.00458, and at 20% it is +0.00142 against +0.00137 and +0.00142 (scenario C, +0.00160, is above it). The genetic layer itself has not been scored against a refit truth, because that needs genotype effects.

Code and outputs: scripts/10_outcome_risk_sensitivity.R, R/outcome_risk.R, output/mcid_outcome_risk_sensitivity.csv, output/refit_coefficients.csv.


Addendum 5, 18 October 2026: the 49 duplicate pairs are confirmed as an artefact

Written after the tag. The 49 admission numbers that appear on two rows (same patient, identical predictor profile, one event row and one non-event twin) have been confirmed as a recording artefact. This settles the condition left open in D9 and in addendum 3, which said the 4,127-row cohort would become the baseline again if the pairs proved legitimate.

  • D9 stands. The baseline cohort is the 4,078 unique admissions, and the bootstrap resamples patients. The revert condition no longer applies.
  • The 4,127-row cohort is now a sensitivity analysis only, which was its role in D9. It is a record of how the paper’s analysis set was built, not an alternative baseline. The D9 commitment to report results against the 4,127-row MCID (+0.00445 at 5%, +0.00142 at 20%) is unchanged. It still brackets the outcome-risk readings of addendum 4, and any decision to drop it should be taken and recorded separately.
  • Set aside, not pursued: the two Table 2 non-case counts that exceed the file’s by one (high-risk chemotherapy 777 against 776, prolonged neutropenia 1,098 against 1,097), and whether the published equation was fitted with the twin rows in. The analysis uses the counts in the file, and the equation stays fixed at its published coefficients either way, so neither question affects any result. Addenda 3 and 4 mention them as open; this addendum retires them. No request to Bologna remains outstanding.

Addendum 6, 18 October 2026: the baseline model is refit on the base cohort (D10)

Written after the tag and after addendum 5. No genetic-layer result exists. This amends the design rule that the clinical block is “kept fixed, never refitted” at its published values, and item 5 of D9 (“the outcome risk stays the published equation’s”). It was decided to use the data in hand to estimate the baseline directly.

Background. On the corrected base cohort the published equation under-predicts slightly (mean predicted risk 3.06% against 3.26% observed), and its coefficients reproduce from the 4,127 rows but not from the 4,078 unique admissions. A refit on the 4,078 gives larger coefficients, but every published coefficient lies inside the refit’s 90% interval (addendum 4), so the refit is a better-fitting baseline for this cohort and not a correction of a detectable error.

D10. The baseline model: settled

  1. The baseline is a maximum-likelihood logistic refit of the seven predictors on the 4,078 unique admissions in 1,945 patients. It is fixed from here on: genetic terms are added to it and fitted, the clinical block is not refitted again in the simulation.
term published refit robust SE bootstrap 90% interval odds ratio
intercept -5.45 -5.591 0.275 -6.129 to -5.220
uncontrolled malignancy 0.68 0.764 0.201 0.438 to 1.111 2.15
high-risk chemotherapy 0.79 0.862 0.237 0.490 to 1.263 2.37
high-dose steroids 0.80 0.803 0.252 0.341 to 1.205 2.23
severe lymphopenia 0.89 0.933 0.226 0.562 to 1.323 2.54
CMV 1.14 1.421 0.324 0.854 to 1.960 4.14
prolonged neutropenia 1.52 1.575 0.292 1.130 to 2.095 4.83
prior mould disease 1.64 1.985 0.281 1.499 to 2.465 7.28
  1. Uncertainty. Standard errors are clustered by patient, and the bootstrap resamples patients and repeats the refit in every resample (2,000 resamples). The intervals are available for a sensitivity analysis of the baseline coefficients; the main analysis treats the refit as fixed.
  2. Optimism is reported and not subtracted (a bootstrap refit in each resample, Harrell’s method). aROC is 0.858 apparent and 0.853 corrected (optimism 0.005). The calibration slope is 0.97 (optimism 0.029). The model is calibrated in the large by construction (3.26% predicted and observed). Observed net benefit at 5% is 0.0152 apparent and 0.0148 corrected, at 10% 0.0086 and 0.0079, and at 20% 0.0040 and 0.0033.
  3. The published equation becomes a sensitivity analysis, with the 4,127-row cohort and the copula (D7), which keeps the published coefficients. D6 (the 0.85 aROC target) applies to those published-equation analyses only.
  4. The MCID rule is unchanged (20% more true cases at no increase in false positives; 5% primary, 20% secondary). Its values are re-derived on the refit baseline and replace D9’s. They equal scenario C of addendum 4.
threshold refit baseline (adopted) published equation, base cohort (D9) 4,127 rows (D8)
5% (primary) +0.00458 (patient bootstrap 90% 0.00387 to 0.00566) +0.00404 +0.00445
10% +0.00285 (0.00236 to 0.00460) +0.00239 +0.00276
20% (secondary) +0.00160 (0.00122 to 0.00301) +0.00113 +0.00142

On the refit baseline the net benefit at 5% is 0.01584, with 22.9 true and 133.8 false positives per 1,000 admissions and 15.7% flagged. The 20% interval is wide because few profiles sit near the threshold, so the refit rule flags different profiles from one resample to the next. 6. Aim 2 changes from reproducing the published baseline to estimating the baseline on the base cohort and comparing it with the published equation. 7. Reporting. Results are reported against the refit MCID (primary) and against +0.00404 (published equation) and +0.00445 (4,127 rows) as sensitivity thresholds. The commitment in D9 to report against the 4,127-row value stands.

Disclosure. The MCID under every reading was seen before this decision. The refit gives the highest value of the four readings in addendum 4, so adopting it makes the primary test harder for the genetic layer, by 13% at 5% and 41% at 20% compared with the published reading. The change is made to use the data in hand, not for its effect on the MCID. The baseline’s own performance is apparent, since it is evaluated on the data it was fitted on; the optimism above is small.

decision before now
Baseline model published equation, never refitted refit on the 4,078 admissions (D10)
Published equation the baseline sensitivity analysis
MCID at 5% / 20% +0.00404 / +0.00113 +0.00458 / +0.00160
Aim 2 reproduce the published baseline estimate the baseline and compare
Base cohort (D9), patient bootstrap, MCID rule, primary threshold, D1 to D5, D7 as a sensitivity analysis, E1 as stated unchanged

Code and outputs: scripts/11_refit_baseline.R, R/refit_baseline.R, output/baseline_refit_parameters.csv, output/baseline_refit_performance.csv, output/dca_baseline_refit_summary.csv.


Addendum 7, 18 October 2026: PTX3 h2 defined, and the evidence-to-parameter mapping started (D11)

Written after the tag. No genetic-layer result exists. Nothing in D1 to D10 changes. This settles the meaning of “h2” that addendum 2 left open, and records the rules for turning extracted evidence into model parameters, with PTX3 as the pilot.

D11. The PTX3 term, and what “h2” means: settled

  • h2 is the chromosome class that carries the A allele at rs2305619 (forward strand). In the phased 1000G EUR data that is A-C-A (39.8%), A-A-A (5.8%) and A-A-G (0.1%), 45.6% in all; rescaled to gnomAD NFE it is 48.2%. h1 is G-A-G (54.4%, or 51.8% rescaled). The model term is an additive per-copy effect of h2 in the recipient: dosage 0, 1 or 2, on the log-odds scale. The single A-A-G chromosome goes to h2 by the rs2305619 rule.
  • rs1840680 A marks the same class (r2 = 0.996), so it is an interchangeable tag. The h2 dosage is the number of A alleles at either SNP.
  • rs3816527 C is not interchangeable. It marks only A-C-A, about 87% of h2. Evidence reported on rs3816527 is mapped to h2 through the haplotype structure, which attenuates a per-copy effect by about 12% at a log OR of 0.8, and is used as a cross-check, not as primary evidence.
  • A three-haplotype term that separates A-C-A from A-A-A is a sensitivity analysis. It has not been run.

The mapping rules

# rule status
1 The target is the log OR per h2 copy, recipient genotype settled earlier (D1, D2)
2 Every study contrast (dominant, recessive, allelic, counts) is converted to that one scale by solving a haplotype model: additive on the log-odds per h2 copy, Hardy-Weinberg haplotype pairs, case-control sampling. Standard errors by the delta method proposed
3 The contrast is read from the comparison text, including which side is the reference. If the text cannot be read, the model label is used and flagged proposed
4 Primary evidence is recipient genotype, on the odds-ratio scale (counts are converted), from whole-cohort analyses. Herrero-Sanchez 2018 is excluded (D3b). Donor genotype is the secondary analysis (D1), described and not pooled. Hazard ratios are excluded from the primary analysis D3b and D1 earlier; HR rule proposed
5 One effect per study, from rs2305619 and then rs1840680; within a SNP the best of counts (additive trend), allelic, dominant, recessive, other. A study with several independent cohorts is combined by fixed-effect inverse variance proposed
6 Pooling is Bayesian random effects: mu ~ N(0, 1), tau ~ half-normal(0.5), on a grid, with a 90% credible interval and a prediction interval proposed
7 Haplotype frequencies are the gnomAD NFE rescaled ones for every cohort, including non-European ones proposed, a limitation
8 The extraction is round 1 and unverified, so every number below is provisional fact

Rules 2 to 7 are my proposals and are open to change before the genetic layer uses them.

Pilot results (PTX3, provisional)

Of 162 usable PTX3 rows, 104 map to a per-copy h2 effect. The others are 39 three-group genotype comparisons, 18 heterozygote-only contrasts (no single effect explains them) and 1 estimate that lies outside its own interval.

study evidence used log OR as reported per-copy h2 effect (SE) OR per h2 copy
Tang 2020 (S026) dominant estimate 0.495 0.364 (0.265) 1.44
Brunel 2018 (S029) 2x2 counts, homozygotes; allele inferred as the minor allele 0.803 0.625 (0.353) 1.87
Schnetzke 2024 (S045) two cohorts combined (they disagree, Q = 5.5) 0.049 0.441 (0.257) 1.55
Kalkanci 2020 (S056) 2x3 counts, additive trend 0.046 -0.046 (0.342) 0.96
Tanpaibule 2020 (S077) dominant estimate, G carriers against A/A 0.226 -0.165 (0.569) 0.85
analysis studies log OR per h2 copy (90% interval) OR tau
primary 5 0.300 (-0.010 to 0.591) 1.35 (0.99 to 1.81) 0.17 (0.01 to 0.56)
with Herrero-Sanchez 2018 6 0.141 (-0.166 to 0.442) 1.15 (0.85 to 1.56) 0.30
European-ancestry cohorts only 3 0.335 (-0.099 to 0.758) 1.40 (0.91 to 2.13) 0.24
rs3816527 as the tag SNP 4 0.363 (0.006 to 0.727) 1.44 (1.01 to 2.07) 0.20
with hazard-ratio studies 5 0.304 (-0.004 to 0.599) 1.36 (1.00 to 1.82) 0.17

The primary prediction interval for a new study’s per-copy effect is an OR of 0.81 to 2.21, and the probability that the pooled effect is below zero is 5.5%.

  • The evidence is weak. The primary interval just reaches 1. Two of five studies are near null.
  • Herrero-Sanchez 2018 points the other way (-0.43 per copy) and raises the heterogeneity (tau 0.17 to 0.30). Its direction should be checked against the source in round 2.
  • Mapping through rs3816527 agrees with the h2 tag SNP within 0.15 for every study, which supports the h2 definition.
  • The donor-genotype evidence (Fisher 2017, one study, allo-HSCT, hazard ratio) gives 1.24 per h2 copy (SE 0.08 on the log scale). It is the largest study and secondary by D1, so it is described and not pooled.
  • Limits: the rows are unverified, Brunel’s allele is inferred, the Chinese and Thai cohorts use European haplotype frequencies, there are only five studies, and the priors on mu and tau are mine. The 2x3 additive trend is mapped as an allelic effect, an approximation.

The draws of (mu, tau) from the primary analysis are in output/ptx3_h2_posterior_draws.csv, for the genetic layer.

Next. Repeat for CLEC7A, TLR4, CD209, and the optional IL10 and IFNG terms. Verify the PTX3 rows in round 2, starting with Herrero-Sanchez and Brunel. Decide how donor evidence should inform the allo-HSCT stratum.

Code and outputs: R/evidence_mapping.R, R/ptx3_evidence.R, scripts/12_map_ptx3_evidence.R, output/ptx3_row_effects.csv, output/ptx3_study_effects.csv, output/ptx3_h2_pooled.csv, output/ptx3_snp_crosscheck.csv, output/ptx3_donor_effects.csv, output/ptx3_h2_posterior_draws.csv.


Addendum 8, 18 October 2026: PTX3 rows checked against sources, and the mapping extended to CLEC7A and TLR4 (D12)

Erratum (addendum 16, section 0): the CLEC7A figures below (Y238X OR 0.98, 1.36 with hazard ratios) used Fischer 2016 with its direction reversed; corrected they are 0.84 (0.48 to 1.48) and 1.23 (0.70 to 1.77).

Written after the tag. No genetic-layer result exists. Nothing in D1 to D11 changes, but one statement in addendum 7 is retracted (below). The source checks are read-throughs by the assistant. They are not the human round-2 check, which is still pending, and the two papers were read differently: Herrero-Sanchez 2018 as full text from PMC, Brunel 2018 from a summary of the article page returned by the fetch tool, so its figures and quotes are not verbatim and should be re-read.

Herrero-Sanchez 2018 (S035): corrected, and addendum 7 was wrong about its direction

Addendum 7 said this study “points the other way” (-0.43 per h2 copy) and raised the heterogeneity. That was an artefact. In every table of the paper the reference group is labelled 1.00, but the printed odds ratio belongs to that group against the others. The genotype counts show it: for rs2305619 and the Candida or Aspergillus detection endpoint (Table 3), AA is the “reference”, yet AA has the higher share of cases (23 of 41 against 66 of 157) and the printed 1.83 is the crude 1.76 for AA against the rest, not its reciprocal 0.57. All 18 dominant and recessive odds ratios in Tables 3, 4 and 5 (three SNPs) agree with that reading: 16 decisively, 2 too close to 1 to tell, none contradicting. The paper’s text agrees, calling AA (rs2305619, rs1840680) and CC (rs3816527) the risk genotypes and A-C-A the risk haplotype.

The extraction copied the table faithfully and my parser followed its “(ref)” marker. 30 dominant and recessive rows are now corrected (data/extraction_corrections.csv, each with its evidence and a check that the value it replaces is unchanged). Corrected, the study’s per-copy h2 effect is +0.47 (SE 0.29) on the detection endpoint and +1.16 (SE 0.55) on invasive aspergillosis (Table 5: 12 patients with EORTC/MSG invasive disease), so it agrees in direction with the other studies. Also confirmed: the extracted Table 3 values match the paper, samples were taken before HSCT (a recipient study), and the analysis is adjusted for sex, age and malignancy. The paper prints 1.76 (0.92 to 1.76) for the rs1840680 recessive row, an upper limit equal to the estimate, a printing error in the source. The supplementary CLEC7A tables were not read.

D3b is not changed, but note what it rests on. It excluded this study because its extracted endpoint (Table 3) includes colonisation. Table 5 is an invasive mould endpoint in the whole cohort, and it is in the extraction; it is run as a sensitivity analysis below. Whether the primary analysis should use the Table 5 rows is a question for you.

Brunel 2018 (S029): the design is confirmed, the per-SNP counts cannot be, and one check is worrying

Confirmed from the page: 185 patients and 212 courses (2007 to 2017), 26 probable or proven invasive mould infections (16 probable, 10 proven), all moulds, and an adjusted HR of 5.06 (1.68 to 15.2) without pre-existing neutropenia. The reported minor allele frequencies, 0.48 for rs2305619 and 0.44 for rs3816527, fit A and C as the minor alleles. But the main text gives only a combined exposure (“two copies of the minor allele of rs2305619 and/or rs3816527”); the per-SNP counts are in Online Supplementary Figure S2, an image, so the extracted counts cannot be checked against the text.

A frequency check on the extracted counts raises a doubt. With a minor allele frequency of 0.44 the rs3816527 CC homozygotes should be about 19% of courses, but the extracted “homozygous” group is 30% (z = +4.0 against CC) and fits the major-allele AA homozygotes (31%). It is the same in the two strata (z = +2.7 and +3.1). For rs2305619 the two homozygote shares (23% and 27%) are too close to separate, but the observed 27% fits the major-allele group slightly better. So the extracted groups may not be the minor-allele homozygotes the paper describes, and the sign of Brunel’s effect is not secure. Genotype source is also not stated in the text. This study stays in the primary analysis for now, flagged, and a sensitivity analysis drops it.

Updated PTX3 results

The primary analysis is unchanged, because Herrero-Sanchez is outside it (D3b): OR 1.35 per h2 copy (90% interval 0.99 to 1.81), tau 0.17, five studies. 128 of 162 usable rows now map, up from 104, because the cleaned comparison text is readable.

analysis studies OR per h2 copy (90% interval) tau
primary 5 1.35 (0.99 to 1.81) 0.17
with Herrero-Sanchez, detection endpoint 6 1.40 (1.08 to 1.80) 0.14
with Herrero-Sanchez, invasive aspergillosis endpoint 6 1.45 (1.08 to 1.96) 0.18
without Brunel 2018 4 1.26 (0.87 to 1.79) 0.19
European-ancestry cohorts only 3 1.39 (0.91 to 2.11) 0.23
rs3816527 as the tag SNP 4 1.44 (1.00 to 2.04) 0.20
with hazard-ratio studies 5 1.35 (1.00 to 1.81) 0.18

The h2 effect is positive in every analysis. Its interval includes 1 in the primary analysis and when Brunel is dropped, and excludes 1 once Herrero-Sanchez is added. The other PTX3 studies (Tang, Schnetzke, Kalkanci, Tanpaibule, Fisher) have not been checked against their sources.

Mapping extended (rules proposed, open to change)

The pipeline now takes any haplotype block. New or changed rules: a study reported on the opposite strand has its alleles and the genotypes in its text complemented; “carrier” is read as a dominant contrast; for rare risk alleles (CLEC7A, TLR4) a 2x3 table is mapped as carriers against non-carriers with 0.5 added to a zero cell (D3c), while PTX3 keeps the additive trend; a row’s genotype source is read from its text, then the study, and rows whose source is stated nowhere are left out of the recipient analysis; and three table-specific subgroup labels count as whole-cohort analyses (Ceesay’s “patients tested for SNP” and “HSCT donors”, Fisher’s “recipient (patient) genotype”).

D12. CLEC7A: the Y238X haplotype

The term is the Y238X haplotype, the C allele of rs16910526 on the forward strand, which sits only on the C-G haplotype of rs16910526 and rs7309123 (7.7% in gnomAD NFE; A-G is 34.9% and A-C 57.4%). Strand flips are handled: Kalkanci and Cunha write the allele as G, which is forward-strand C.

analysis studies OR per Y238X copy (90% interval)
primary (Ceesay, Kalkanci, Sainz, Fischer) 4 0.98 (0.56 to 1.72), tau 0.26
with Herrero-Sanchez 4 same four studies: none of its CLEC7A rows maps (they come from the supplementary tables, which were not read)
with hazard-ratio studies (adds Fisher 2017) 5 1.36 (0.81 to 1.88)

Among the small odds-ratio studies Y238X is null. The one large study, Fisher 2017 (483 cases), reports hazard ratios above 1 (allelic 1.69 for recipient genotype), and including it moves the pooled effect up. Whether hazard ratios should join the primary analysis is a decision for you.

The second CLEC7A parameter is not estimated. The three-haplotype structure has two effects, one for Y238X and one for rs7309123 G on the non-Y238X background. rs7309123 is a C/G palindrome, so its strand cannot be settled from the letters, and none of its 26 usable rows from 8 studies records a control allele frequency to settle it. Used anyway, it forces its signal onto the Y238X haplotype, which carries only 18% of the G alleles, and produced an odds ratio of 4.5. Those rows are not used, and the second effect is held at zero until the strand of each study is resolved (round 2, item C2).

D12. TLR4: the G-T haplotype, carrier model

The term is the G-T haplotype of rs4986790 (G) and rs4986791 (T), 6.1% in gnomAD NFE, with no cohort showing minor homozygotes, so every study enters through carriers against non-carriers (D3c).

analysis studies OR per G-T copy (90% interval)
primary (Ceesay, Kalkanci, Grube, Tanpaibule) 4 1.44 (0.77 to 2.69), tau 0.27, P(effect < 0) 16%
with de Boer 2011 (genotype source unstated, treated as recipient) 5 1.78 (1.02 to 3.02)
European-ancestry cohorts only 3 1.57 (0.82 to 3.04)
rs4986791 as the tag SNP 3 0.98 (0.48 to 2.00)
donor genotype (secondary) 2 1.24 (0.46 to 3.00)

The effect is positive but uncertain, and the two SNPs disagree within the large sampling error (differences of 0.3 to 0.9 on the log scale against standard errors of 0.6 to 1.5), which is expected from carrier counts this small. de Boer 2011 analysed donors and recipients and the extraction does not say which genotype its rows use. Tanpaibule’s allele is carried by no case (0 of 33) against 11 of 295 controls, so its estimate rests on the 0.5 correction.

Open for you

  1. Whether the primary analysis should use Herrero-Sanchez’s Table 5 (invasive aspergillosis) rows, which would reopen D3b.
  2. Whether Brunel 2018 stays in the primary analysis while its counts are unverifiable and may be the wrong homozygote group.
  3. Whether hazard-ratio studies, above all Fisher 2017, join the primary analysis. Rule 4 of addendum 7 excluded them.
  4. How to resolve rs7309123 strand for each study, to estimate the second CLEC7A effect.

Code and outputs: R/source_verification.R, scripts/13_verify_ptx3_rows.R, scripts/14_map_clec7a_tlr4_evidence.R, data/source_checks_S035.csv, data/extraction_corrections.csv, output/ptx3_verification_log.csv, output/s035_direction_check.csv, output/s029_genotype_frequency_check.csv, output/clec7a_*.csv, output/tlr4_*.csv.


Addendum 9, 19 October 2026: CD209, IL10 and IFNG mapped (D13)

Written after the tag. No genetic-layer result exists. Nothing in D1 to D12 changes.

Round-2 status. The user reports that the human checks confirmed the extraction against the source PDFs and that none of the flagged items in addendum 8 changed. No verification record is in the repository, so the extraction used here is still the round-1 file plus the 30 Herrero-Sanchez corrections, and the Brunel, de Boer, rs7309123 strand and Herrero-Sanchez Table 5 questions keep their addendum 8 treatment. The record of the checks should be added to data/ so the claim can be traced.

D13. Decisions made on 19 October 2026

  • CD209 risk class: chromosomes carrying G at rs4804800 (G-A and G-G, 12.5% in gnomAD NFE). rs4804800 rows map to it directly; rs7248637 rows (A allele, r2 = 0.41) map through the haplotype structure and are used only where a study has no rs4804800 row. A second CD209 parameter is not estimated.
  • Hazard-ratio rule, per term. Odds-ratio evidence is the primary analysis. If it has fewer than three studies, hazard-ratio studies are added and the scenario is labelled as a fallback. PTX3, CLEC7A and TLR4 are unchanged (all have four or more studies, and their hazard-ratio versions stay sensitivity analyses). The question of Fisher 2017 joining the primary analysis for those terms stays closed.
  • IL10 and IFNG risk alleles (my choice, open to change): the forward-strand allele most studies report as their effect allele, IL10 C (reported as G) and IFNG G (reported as C). A study that reports the other allele maps to the same class with the sign reversed.

Mapping rule changes

Two changes to the shared code, both checked by re-running scripts 12 and 14, which reproduce every earlier output unchanged (the row-effect files gain one column):

  1. Three more subgroup labels count as whole-cohort analyses: Lupianez 2015’s “patient (recipient) genotype” (phase 1 and overall combined) and Fisher 2017’s “recipient (PT) genotype”. Without them, IFNG lost its only odds-ratio study and Fisher’s CD209 rows were dropped.
  2. Within a study, an “overall combined” analysis is preferred to the phase analyses it contains. Before, the phase 1 additive row outranked the combined dominant row only because of the model-type ordering, which would have used the smaller cohort by accident.

Results (provisional)

term primary analysis studies OR per copy of the risk class (90% interval) tau
CD209 G at rs4804800 odds ratios 3 (Schnetzke 2024, Sainz 2012, Tanpaibule 2020) 1.80 (1.14 to 2.73) 0.21
IL10 rs1800896 C fallback, hazard ratios added 1 (Tanpaibule 2020) 2.59 (1.01 to 5.02) 0.33
IFNG rs2069705 G fallback, hazard ratios added 2 (Ceesay 2016, Lupianez 2015) 0.82 (0.49 to 1.69) 0.33
  • CD209 is positive in all three studies. Adding Fisher 2017 (hazard ratios, rs7248637) gives 1.45 (0.85 to 2.22), and the European-ancestry subset 1.91 (1.09 to 3.20). The two rs7248637-mapped studies agree with rs4804800 (differences 0.21 and 0.07 on the log scale). Sainz 2011’s two rows cannot be mapped (an allele is missing and the comparison has more than two groups).
  • IL10 rests on one study with a dominant odds ratio of 5.3 (log 1.67, SE 0.49). The pooled value is that study shrunk by the prior, so it is not a meta-analysis. Treating de Boer 2011 (genotype source unstated) as recipient gives two studies and 1.80 (0.95 to 3.20). Cunha 2017 is donor genotype only.
  • IFNG has two studies that disagree in direction (OR per G copy 1.92 and 0.68). The hazard-ratio fallback adds nothing, because Fisher’s IFNG rows are donor genotype only. The pooled interval is mostly the prior.
  • For IL10 and IFNG the fallback does not reach three studies, so their posterior draws should enter the genetic layer only with that caveat, or the terms should be dropped. This is a decision for you, since both are optional (D3).

Code and outputs: R/term_mapping.R, scripts/15_map_cd209_il10_ifng_evidence.R, tests/testthat/test-term-mapping.R, output/{cd209,il10,ifng}_*.csv. Script 14 now uses the shared run_term().


Addendum 10, 19 October 2026: IL10 and IFNG dropped from the panel (D14)

Written after the tag. No genetic-layer result exists. This uses the discretion D3 left open (“IL10 rs1800896, IFNG rs2069705: optional, include or drop at the analyst’s discretion”), so no pre-specified decision is reversed.

D14. The panel is the four core terms

IL10 rs1800896 and IFNG rs2069705 are dropped. The genetic layer uses four terms: PTX3 (h2), CLEC7A (Y238X), TLR4 (G-T) and CD209 (G at rs4804800).

Reasons (addendum 9): after the hazard-ratio fallback IL10 rests on one study and IFNG on two, so a pooled value is mostly the prior. IFNG’s two studies disagree in direction. Neither term has enough evidence to estimate an effect or its heterogeneity, and using a prior-dominated draw would add a term whose size is set by the prior rather than the literature.

  • The mapping outputs (output/il10_*.csv, output/ifng_*.csv) and the code stay in the repository and are described on the evidence-mapping page. They are not read by the genetic layer.
  • Adding either term back later is a sensitivity analysis, not a change to the primary panel. It needs more studies or an explicit prior for its effect.
  • Four terms is well inside the roughly ten-parameter ceiling that 133 events supports (D3), which leaves room for the Aim 4 sweep.

Addendum 11, 19 October 2026: the genetic layer started (D15)

Erratum (19 October 2026, addendum 16, section 0): the CLEC7A evidence behind this addendum used one study (Fischer 2016) with its direction reversed. The tables below show the values before the correction; the regenerated files in output/ hold the corrected ones, and the differences are small (gains by at most 0.00006, shares reaching the MCID by at most 3 points, Shapley shares by at most 1.6 points). The conclusions do not change.

Written after the tag. This is the first genetic-layer result. It is provisional, because every effect comes from the provisional evidence mapping (addenda 7 to 9), and the design below is my proposal, open to change before the layer is extended.

D15. Design of the first pass (proposed)

element choice
Cohort the base cohort of load_base_cohort(): 4,078 unique admissions, 1,945 patients, empirical profile distribution
Baseline the refit model (D10), as the clinical score and as the clinical part of the truth
Terms PTX3 h2, CLEC7A Y238X, TLR4 G-T, CD209 G at rs4804800 (D14); recipient genotype
Genotype dosage 0, 1 or 2 of each risk class, Hardy-Weinberg, gnomAD NFE class frequencies 48.2%, 7.7%, 6.1%, 12.5%; independent across terms (four chromosomes) and of the clinical profile (an assumption)
Per patient one genotype per patient, shared by all of the patient’s admissions. This does not change the expected net benefit per admission, only its sampling variability
Truth baseline logit + sum of beta x dosage + a, with a chosen so that prevalence stays at the baseline value (D5)
True effects draws from each term’s pooled posterior. “Mean”: the pooled mean effect mu. “Predictive”: mu plus between-study heterogeneity, theta ~ N(mu, tau)
Scores baseline; ceiling (true effects in the score); realised (posterior medians in the score, recentred)
Comparison gain in net benefit over the baseline under the same truth, tested against the pre-specified MCID: +0.00458 at 5%, +0.00160 at 20% (D10)

The calculation is exact over 128 profiles by 81 dosage combinations, not a sample. The exact engine agrees with a patient-level simulation on a 100-fold replicated cohort (gain at 5%: 0.00040 exact, 0.00041 simulated; at 20%: 0.00078 and 0.00071).

Interpretation to confirm. The plan said the realised value uses “published estimates in the score, a shrunk truth”. I read it as the pooled posterior medians in the score and posterior draws as the truth. The pooled values already carry the prior’s shrinkage, so the gap between realised and ceiling comes from posterior uncertainty alone. If “published estimates” means each study’s unshrunk effect (with the winner’s curse that implies), the realised score should use those instead, and the realised gain would be lower.

First results (2,000 draws per reading)

Gain in net benefit over the baseline, median with 90% range, and the share of draws that reach the MCID:

truth score threshold gain 90% range extra true cases per 1,000 reaches MCID
mean ceiling 5% +0.00058 0.00015 to 0.00136 1.2 0%
mean realised 5% +0.00042 -0.00008 to 0.00095 1.3 0%
predictive ceiling 5% +0.00078 0.00017 to 0.00272 1.4 1.1%
predictive realised 5% +0.00044 -0.00029 to 0.00130 1.3 0%
mean ceiling 20% +0.00104 0.00041 to 0.00208 2.7 16%
mean realised 20% +0.00078 -0.00002 to 0.00153 2.2 3.5%
predictive ceiling 20% +0.00130 0.00043 to 0.00371 3.0 36%
predictive realised 20% +0.00078 -0.00039 to 0.00188 2.2 11%
  • At the primary threshold of 5% the MCID is +0.00458, which is 4.6 extra true cases per 1,000 admissions at no extra false positives. The four terms together add about 1 to 1.5 true cases per 1,000 in the median draw, so the gain is a fraction of the MCID in these draws, even when the true effects are in the score.
  • At 20% the MCID is smaller (+0.00160) and the ceiling score reaches it in some draws, more often under the predictive reading. The 20% threshold is secondary (D4) and does not enter the headline conclusion.
  • Expected aROC rises from 0.857 (baseline) to 0.870 (ceiling) and 0.867 (realised).
  • The result is driven by CD209 (pooled log OR 0.59) and TLR4 (0.37), which are rare risk classes with wide intervals. CLEC7A is near zero (-0.02) and PTX3 is 0.30 on a common class.
  • Not yet carried through: the correlation ensemble for the clinical profile distribution, donor genotype in the allo-HSCT stratum, Aim 3b, the CLEC7A second parameter (held at zero), the 4,127-row and published-equation sensitivity cohorts, and the sampling variability of a study of this size (the layer is evaluated as an expectation). The posterior draws of the effects, not the point estimates, set the width of the ranges above.

Code and outputs: R/genetic_layer.R, scripts/16_genetic_layer.R, tests/testthat/test-genetic-layer.R, output/genetic_layer_effects.csv, output/genetic_layer_draws.csv, output/genetic_layer_summary.csv, output/genetic_layer_engine_check.csv.


Addendum 12, 19 October 2026: sampling variability, the correlation ensemble and per-term attribution (D16)

Erratum (19 October 2026, addendum 16, section 0): the CLEC7A evidence behind this addendum used one study (Fischer 2016) with its direction reversed. The tables below show the values before the correction; the regenerated files in output/ hold the corrected ones, and the differences are small (gains by at most 0.00006, shares reaching the MCID by at most 3 points, Shapley shares by at most 1.6 points). The conclusions do not change.

Written after the tag. Provisional, like addendum 11: the effects come from the provisional evidence mapping, and the design below is my proposal. Nothing in D1 to D15 changes. The addendum 11 results reproduce unchanged after the code was extended.

D16. Design (proposed)

  • Correlation ensemble (sensitivity analysis, D8 and D9). Each simulated world draws one of the 150 near-optimal copula matrices (script 02) and uses its exact profile distribution (cached in output/correlation_ensemble_profile_probs.csv; total-variation distance to the empirical distribution 0.08 to 0.19, median 0.12). The refit baseline and the published marginals are unchanged. The MCID is the one of the baseline in that member’s own distribution (+0.00488 at 5% and +0.00188 at 20% at the ensemble median, against +0.00458 and +0.00160 on the empirical cohort). 3,000 worlds per reading, 20 per member.

  • Attribution. Shapley decomposition of the gain into the four terms. The value of a subset of terms is the gain of a score that carries only those effects (recentred), under the full true model. The four contributions sum to the gain of the full score. Net benefit is a threshold rule on a sum of effects, so it is not additive in the terms, and the Shapley split is a fair division of the total, not a separable effect. Run on the empirical cohort for 1,000 draws per reading, for the ceiling and the realised score.

  • Sampling variability. Each simulated study resamples patients with their admissions (so the clinical mix varies: about 4,078 admissions, 1,945 patients, 133 events), gives each patient a genotype, draws outcomes from the true risk, and measures the observed gain in net benefit of a fixed score over the baseline in that sample. Scores are not refitted in the sample. Four runs of 2,000 studies: effects fixed at the pooled medians, effects fixed at the 95th percentile of each term’s pooled effect (a favourable truth), and effects drawn from the posteriors under the two readings. The ensemble and the sampling variability are not combined: the studies resample the real cohort.

  • Sensitivity cohorts (added later on 19 October). The same three analyses on three further settings, with the same effects, seeds and pooled estimates, so the settings differ only in the cohort and the baseline model: the published equation on the 4,078-admission base cohort, the published equation on the 4,127 rows of the paper (twin rows kept; the D8 baseline), and a refit on the 4,127 rows. The last is my addition, to separate the effect of the cohort from the effect of the equation. Each setting uses its own MCID, which reproduces the values in D8 and D9: +0.00404 and +0.00113 (published, 4,078), +0.00445 and +0.00142 (published, 4,127), +0.00440 and +0.00141 (refit, 4,127), against +0.00458 and +0.00160 for the primary setting (refit, 4,078). The ensemble is not repeated on these settings.

Results

Sampling variability. Expected gain from the exact engine against what one study of this size observes:

truth score threshold expected gain observed gain, mean (90% range) SD observed gain > 0 reaches MCID
medians either 5% +0.00040 +0.00039 (-0.00057 to 0.00150) 0.00063 72% 0%
medians either 20% +0.00078 +0.00080 (-0.00062 to 0.00239) 0.00093 80% 20%
95th percentile ceiling 5% +0.00196 +0.00195 (0.00006 to 0.00384) 0.00114 96% 1.1%
95th percentile realised 5% +0.00124 +0.00124 (0.00004 to 0.00258) 0.00078 95% 0%
95th percentile ceiling 20% +0.00280 +0.00278 (0.00066 to 0.00518) 0.00140 98% 79%
95th percentile realised 20% +0.00193 +0.00191 (0.00031 to 0.00370) 0.00105 97% 60%
drawn, mean ceiling 5% +0.00062 (-0.00067 to 0.00217) 0.00088 76% 0%
drawn, predictive ceiling 5% +0.00106 (-0.00050 to 0.00333) 0.00132 83% 2.0%
drawn, mean realised 5% +0.00041 (-0.00075 to 0.00168) 0.00075 69% 0%
drawn, predictive realised 5% +0.00046 (-0.00077 to 0.00201) 0.00084 69% 0%

Across the cohorts, at the 5% threshold (observed gain of one study: mean, SD, share of studies with a gain above zero, share reaching that setting’s MCID):

truth, score refit, 4,078 (primary) published, 4,078 published, 4,127 refit, 4,127
pooled medians, either score +0.00039 (SD 0.00063), >0 72%, 0% +0.00043 (SD 0.00071), >0 72%, 0% +0.00043 (SD 0.00072), >0 72%, 0% +0.00042 (SD 0.00071), >0 72%, 0%
95th percentile, ceiling +0.00195 (SD 0.00114), >0 96%, 1% +0.00208 (SD 0.00113), >0 97%, 5% +0.00214 (SD 0.00112), >0 98%, 2% +0.00212 (SD 0.00110), >0 98%, 2%
95th percentile, realised +0.00124 (SD 0.00078), >0 95%, 0% +0.00147 (SD 0.00083), >0 97%, 0.3% +0.00150 (SD 0.00080), >0 98%, 0% +0.00147 (SD 0.00079), >0 98%, 0%
drawn (mean), ceiling +0.00062 (SD 0.00088), >0 76%, 0% +0.00066 (SD 0.00092), >0 76%, 0.2% +0.00071 (SD 0.00091), >0 78%, 0% +0.00069 (SD 0.00091), >0 77%, 0%
drawn (mean), realised +0.00041 (SD 0.00075), >0 69%, 0% +0.00043 (SD 0.00084), >0 69%, 0.1% +0.00047 (SD 0.00084), >0 70%, 0% +0.00046 (SD 0.00083), >0 70%, 0%
drawn (predictive), ceiling +0.00106 (SD 0.00132), >0 83%, 2% +0.00113 (SD 0.00137), >0 84%, 4% +0.00112 (SD 0.00139), >0 83%, 3% +0.00111 (SD 0.00138), >0 82%, 2%
drawn (predictive), realised +0.00046 (SD 0.00084), >0 69%, 0% +0.00050 (SD 0.00097), >0 68%, 0.1% +0.00052 (SD 0.00098), >0 69%, 0.1% +0.00051 (SD 0.00097), >0 69%, 0.1%

At 20% (the MCID is +0.00160, +0.00113, +0.00142 and +0.00141 in the four settings), the share of studies reaching it, with the mean observed gain:

truth, score refit, 4,078 (primary) published, 4,078 published, 4,127 refit, 4,127
pooled medians, either score +0.00080, 20% +0.00069, 30% +0.00073, 21% +0.00070, 20%
95th percentile, ceiling +0.00278, 79% +0.00257, 84% +0.00279, 85% +0.00273, 83%
95th percentile, realised +0.00191, 60% +0.00160, 67% +0.00176, 61% +0.00173, 61%
drawn (mean), ceiling +0.00112, 31% +0.00097, 39% +0.00107, 36% +0.00103, 35%
drawn (mean), realised +0.00077, 21% +0.00064, 30% +0.00072, 24% +0.00069, 23%
drawn (predictive), ceiling +0.00162, 44% +0.00149, 54% +0.00153, 45% +0.00149, 44%
drawn (predictive), realised +0.00078, 23% +0.00063, 29% +0.00071, 25% +0.00069, 24%

The mean observed gain matches the exact value in every fixed run in every setting (for example +0.00043 against +0.00044 for the published equation on 4,078 at the medians), which checks the simulation. The conclusions do not depend on the cohort or the equation: at 5% the observed gain reaches the MCID in at most 5% of studies in any run, and the SD is again of the same size as the gain. The published-equation settings have lower MCIDs at 20% (+0.00113 on 4,078), so the share of studies reaching it is a little higher there.

Two things follow from the primary setting:

  • The sampling standard deviation of the observed gain (0.0006 to 0.0013 at 5%) is of the same size as the expected gain, or larger. At the pooled medians a study of this size would show a gain above zero in about 72% of repetitions at 5%, and in 69% to 83% across the runs that draw the effects, even though the true gain is positive for the ceiling score by construction.
  • Reaching the 5% MCID of +0.00458 in an observed study is rare: 0% at the medians, 1.1% (ceiling) and 0% (realised) at the 95th-percentile truth, and at most 2% when the effects are drawn. At 20% the MCID of +0.00160 is reached in 20% of studies at the medians and in 60% to 79% at the 95th-percentile truth.

Correlation ensemble. The clinical correlation structure moves the result little. Median gain over the baseline and the share of worlds reaching the member’s own MCID:

truth score threshold gain (90% range) reaches MCID empirical cohort (addendum 11)
mean ceiling 5% +0.00062 (0.00017 to 0.00144) 0% +0.00058, 0%
mean realised 5% +0.00046 (-0.00005 to 0.00102) 0% +0.00042, 0%
predictive ceiling 5% +0.00083 (0.00020 to 0.00272) 1.0% +0.00078, 1.1%
predictive realised 5% +0.00047 (-0.00024 to 0.00139) 0% +0.00044, 0%
mean ceiling 20% +0.00119 (0.00049 to 0.00233) 16% +0.00104, 16%
mean realised 20% +0.00090 (0.00003 to 0.00172) 4.1% +0.00078, 3.5%
predictive ceiling 20% +0.00145 (0.00050 to 0.00377) 34% +0.00130, 36%
predictive realised 20% +0.00090 (-0.00038 to 0.00207) 10% +0.00078, 11%

The standard deviation of the mean gain across members is 0.00007 to 0.00029, small against the width of the 90% ranges, which come mostly from the effect draws. The empirical-cohort values lie inside the ensemble ranges. The ensemble median gain is a little higher than the empirical one (by 0.00003 to 0.00015), and the ensemble MCID is higher too, so the two shifts offset in the share of worlds that reach it.

The exact layer on the sensitivity cohorts. Median gain over the baseline and the share of worlds reaching that setting’s MCID (the primary column is addendum 11):

truth score threshold refit, 4,078 (primary) published, 4,078 published, 4,127 refit, 4,127
mean ceiling 5% +0.00058, 0% +0.00062, 0.1% +0.00063, 0% +0.00062, 0%
mean realised 5% +0.00042, 0% +0.00045, 0% +0.00046, 0% +0.00045, 0%
predictive ceiling 5% +0.00078, 1% +0.00083, 2% +0.00084, 2% +0.00083, 2%
predictive realised 5% +0.00044, 0% +0.00048, 0.1% +0.00048, 0% +0.00047, 0%
mean ceiling 20% +0.00104, 16% +0.00090, 32% +0.00096, 22% +0.00093, 20%
mean realised 20% +0.00078, 3% +0.00066, 11% +0.00071, 5% +0.00068, 5%
predictive ceiling 20% +0.00130, 36% +0.00115, 51% +0.00124, 41% +0.00120, 40%
predictive realised 20% +0.00078, 11% +0.00066, 19% +0.00071, 12% +0.00069, 11%

The gain hardly moves across the four settings (at 5%, +0.00058 to +0.00063 for the ceiling score with the mean effect). What moves is the share that reaches the MCID at 20%, because the published equation’s baseline finds fewer cases and so sets a lower bar (+0.00113 against +0.00160). At 5% the MCID is out of reach in every setting.

Attribution (ceiling score, 5% threshold, effects as the pooled mean). Median contribution to the gain, and each term’s share of the total gain across draws:

term risk class frequency median contribution share, ceiling share, realised
CD209 12.5% +0.00027 51% 67%
PTX3 48.2% +0.00009 23% 18%
TLR4 6.1% +0.00005 19% 14%
CLEC7A 7.7% +0.00001 7% -0.2%

Shares across the cohorts (effects as the pooled mean, 5% threshold):

term score refit, 4,078 (primary) published, 4,078 published, 4,127 refit, 4,127
CD209 ceiling 51% 51% 51% 50%
CD209 realised 67% 65% 65% 66%
PTX3 ceiling 23% 24% 24% 24%
PTX3 realised 18% 19% 19% 19%
TLR4 ceiling 19% 19% 19% 19%
TLR4 realised 14% 16% 16% 15%
CLEC7A ceiling 7% 7% 7% 7%
CLEC7A realised about 0 about 0 about 0 about 0

The ranking and the shares are the same in every setting (CD209 43% to 52% for the ceiling score and 60% to 67% for the realised score, over both readings and both thresholds).

  • CD209 carries about half of the gain or more, at both thresholds and in both readings of the truth (44% to 51% for the ceiling, 60% to 67% for the realised score). It has the largest pooled effect (log OR 0.59) from three studies with a wide interval, so this ranking is the least secure part of the evidence.
  • PTX3 contributes 17% to 26% on a common class with a modest effect. TLR4 contributes 14% to 21%.
  • CLEC7A contributes next to nothing: 6% to 10% for the ceiling (a draw can put a real effect there) and about 0 for the realised score, whose pooled estimate is -0.02. Its negative realised share (-0.3% to 0) means the score sometimes slightly hurts.
  • The same ordering holds at 20%. The per-term “alone” and “leave-one-out” values are in output/genetic_attribution_summary.csv.

Not yet done

The ensemble is not repeated on the sensitivity cohorts. The ensemble combined with the sampling variability and donor genotype in the allo-HSCT stratum are in addendum 13. Aim 3b and the CLEC7A second parameter are still outside the layer. The interpretation of “realised” from addendum 11 is still to be confirmed.

Code and outputs: R/genetic_layer.R, R/genetic_helpers.R, scripts/17_genetic_layer_extensions.R, scripts/19_genetic_sensitivity_cohorts.R, tests/testthat/test-genetic-layer.R, output/genetic_sensitivity_{layer,attribution,sampling}_summary.csv, output/correlation_ensemble_profile_probs.csv, output/genetic_ensemble_{draws,summary}.csv, output/genetic_attribution_{draws,summary}.csv, output/genetic_sampling_{draws,summary}.csv.


Addendum 13, 19 October 2026: the ensemble with the sampling variability, and donor genotype in the allo-HSCT stratum (D17)

Erratum (19 October 2026, addendum 16, section 0): the CLEC7A evidence behind this addendum used one study (Fischer 2016) with its direction reversed. The tables below show the values before the correction; the regenerated files in output/ hold the corrected ones, and the differences are small (gains by at most 0.00006, shares reaching the MCID by at most 3 points, Shapley shares by at most 1.6 points). The conclusions do not change.

Written after the tag. Provisional, like addenda 11 and 12. Nothing in D1 to D16 changes, and the primary results of addenda 11 and 12 reproduce unchanged.

D17. Design (proposed)

Ensemble with sampling variability. Each simulated study draws one of the 150 copula members and builds its clinical mix from it. The patients are resampled from the real admissions-per-patient counts (so the genotype clustering is kept), and each admission’s profile is drawn independently from the member’s distribution. This ignores any covariate correlation within a patient. The truth, the recentring and the MCID are the member’s own (+0.00488 at 5%, +0.00188 at 20%). Two controls: the same simulation with the empirical profile distribution in place of a member, and the real-row resampling of addendum 12. 2,000 studies per run.

Donor genotype in the allo-HSCT stratum (D1, secondary analysis).

  • The stratum. The base cohort has no admission-level allo-HSCT flag (the column names of boscore.xlsx hold only a transplant date, DTMO, and the pseudonymised full BOSCORE file that has allogeneic_hsct cannot be linked to it). I did not read any value from the identified file. The stratum is built from the published Table 1 margins (allo is the reason for admission in 44 of 133 cases and 248 of 3,994 non-cases) under the assumption that allo status depends on the outcome only, given the clinical profile. That gives a stratum of 7.1% of admissions (289 of 4,078, 44 expected events), an event rate of 15.2% (Table 1: 15.1%), a profile mix tilted to higher-risk profiles, and a true risk whose odds are the baseline score’s times 5.3 at every profile.
  • The scores. The Stanzani score has no allo item, so the baseline decides as before and under-predicts in the stratum. In the stratum it flags 22% of admissions at 5%, and finds 107 true cases and 118 false positives per 1,000 allo admissions. The genetic scores add donor genotype, with the donor effects, to the baseline logit and are recentred to the baseline score’s mean risk (D5), so they carry no information about allo status itself.
  • The truth. Baseline logit plus the allo offset plus donor effects, recentred to hold the stratum’s event rate. Donor dosage is Hardy-Weinberg with the same class frequencies (unrelated donors, independent of the recipient’s profile). The recipient effects are not used in the stratum.
  • The gain is per allo admission. The whole-cohort equivalent is the gain times 7.1%, with decisions elsewhere left to the baseline. The stratum MCID is 20% more true cases among its admissions at no extra false positives, from its own baseline: +0.02137 at 5% (21 extra cases per 1,000 allo admissions) and +0.00747 at 20%. The whole-cohort MCID of D10 is also shown.

Donor evidence

term donor studies pooled donor OR per copy (90% interval) recipient OR (addendum 8 and 9)
PTX3 h2 1 (Fisher 2017, hazard ratio) 1.22 (0.60 to 2.25) 1.35
CLEC7A Y238X 1 (Ceesay 2016) 0.70 (0.19 to 2.53) 0.98
TLR4 G-T 2 1.24 (0.46 to 3.00) 1.44
CD209 none not estimable, held at zero 1.80

With one study the random-effects model cannot separate between-study spread from sampling error, so the pooled interval is much wider than the study’s own (Fisher’s PTX3 estimate is 1.24 with a standard error of 0.08 on the log scale, and the pooled 90% interval runs from 0.60 to 2.25). The donor evidence is thinner than the recipient evidence in every term, and CD209, the term that carries most of the recipient gain, has none.

Results: the ensemble with the sampling variability

Observed gain of one study (mean, SD, share with a gain above zero, share reaching the MCID):

truth, score 5%: copula member 5%: empirical profiles, drawn independently 5%: real rows resampled
pooled medians, either score +0.00042 (SD 0.00067), >0 72%, 0% +0.00042 (SD 0.00066), >0 72%, 0% +0.00039 (SD 0.00063), 0%
95th percentile, ceiling +0.00211 (SD 0.00113), >0 97%, 0.9% +0.00199 (SD 0.00111), >0 97%, 1% +0.00195 (SD 0.00114), 1%
95th percentile, realised +0.00138 (SD 0.00079), >0 97%, 0% +0.00127 (SD 0.00078), >0 96%, 0% +0.00124 (SD 0.00078), 0%
drawn (mean), ceiling +0.00070 (SD 0.00089), >0 78%, 0.1% +0.00062 (SD 0.00088), 0%
drawn (mean), realised +0.00045 (SD 0.00074), >0 71%, 0% +0.00041 (SD 0.00075), 0%
drawn (predictive), ceiling +0.00106 (SD 0.00134), >0 82%, 2% +0.00106 (SD 0.00132), 2%
drawn (predictive), realised +0.00047 (SD 0.00085), >0 70%, 0.1% +0.00046 (SD 0.00084), 0%

At 20% the same pattern holds (MCID +0.00188 for a member): at the pooled medians the mean observed gain is +0.00092 (SD 0.00109) with 20% of studies reaching the MCID, against +0.00080 and 20% for the real rows; with the effects drawn, 29% (mean) and 39% (predictive) of studies reach it for the ceiling score, and 20% and 22% for the realised score.

  • The clinical correlation structure adds little to the sampling variability. The independent-profile approximation is harmless (control against real rows: mean gain +0.00042 against +0.00039, SD 0.00066 against 0.00063). A copula member raises the mean observed gain a little (by +0.00003 to +0.00016 at 5%) and the SD by up to 6%, and its MCID is also higher, so the share of studies that reach the MCID is about the same (0% to 2% at 5%).
  • The refit baseline applied to a copula member predicts a higher event rate than on the real cohort, so the simulated studies have about 140 events (median) against 133.

Results: donor genotype in the allo-HSCT stratum

Gain per allo admission, and the whole-cohort equivalent:

truth score threshold stratum gain (90% range) extra cases per 1,000 allo reaches stratum MCID whole-cohort gain reaches whole-cohort MCID
mean ceiling 5% +0.00334 (0.00010 to 0.00744) 3.6 0% (MCID 0.02137) +0.00024 0% (MCID 0.00458)
mean realised 5% +0.00236 (0.00059 to 0.00420) 2.9 0% (MCID 0.02137) +0.00017 0% (MCID 0.00458)
predictive ceiling 5% +0.00398 (0.00030 to 0.01159) 4.1 0.4% (MCID 0.02137) +0.00028 0% (MCID 0.00458)
predictive realised 5% +0.00240 (-0.00009 to 0.00508) 2.9 0% (MCID 0.02137) +0.00017 0% (MCID 0.00458)
mean ceiling 20% +0.00795 (0.00423 to 0.01428) 8.8 55% (MCID 0.00747) +0.00056 0.4% (MCID 0.00160)
mean realised 20% +0.00533 (0.00277 to 0.00719) 6.3 3% (MCID 0.00747) +0.00038 0% (MCID 0.00160)
predictive ceiling 20% +0.00951 (0.00476 to 0.02025) 10.3 66% (MCID 0.00747) +0.00067 4% (MCID 0.00160)
predictive realised 20% +0.00530 (0.00133 to 0.00770) 6.3 7% (MCID 0.00747) +0.00038 0% (MCID 0.00160)

Sampling variability of a study with a stratum’s worth of admissions (289 admissions, 44 events, each with its own donor):

truth, score threshold expected gain observed gain, mean (90% range) SD gain > 0 reaches stratum MCID
pooled medians, either score 5% +0.00247 +0.00243 (-0.00146 to 0.00983) 0.00377 57% 0%
pooled medians, either score 20% +0.00549 +0.00546 (-0.00173 to 0.01471) 0.00535 81% 31%
95th percentile, ceiling 5% +0.01093 +0.01080 (-0.00182 to 0.02459) 0.00812 91% 9%
95th percentile, ceiling 20% +0.01361 +0.01362 (-0.00087 to 0.02941) 0.00948 93% 74%
95th percentile, realised 5% +0.00366 +0.00369 (-0.00346 to 0.01021) 0.00427 70% 0.1%
95th percentile, realised 20% +0.00655 +0.00648 (-0.00173 to 0.01730) 0.00563 85% 38%
drawn (mean), ceiling 5% +0.00332 (-0.00420 to 0.01384) 0.00591 64% 1%
drawn (mean), ceiling 20% +0.00875 (-0.00173 to 0.02336) 0.00801 86% 51%
drawn (predictive), ceiling 5% +0.00489 (-0.00474 to 0.01821) 0.00758 71% 3%
drawn (predictive), ceiling 20% +0.01066 (-0.00173 to 0.02768) 0.00944 88% 59%
  • At the 5% threshold, donor genotype adds about 3 to 4 true cases per 1,000 allo admissions in the median world, against the 21 needed. The gain does not reach the stratum MCID in any scenario (0% to 0.4% of worlds, and at most 9% of simulated studies even when every effect is at its 95th percentile).
  • At 20% the stratum MCID is smaller (+0.00747, about 7.5 extra cases per 1,000) and the ceiling score reaches it in 55% to 66% of worlds. A score that uses the pooled estimates reaches it in 3% to 7%. The gain per allo admission is larger than the recipient gain per admission (+0.0033 against +0.0006 at 5%) because the stratum has a much higher event rate (15%).
  • Spread over the whole cohort the donor gain is small: +0.0002 to +0.0003 at 5% and +0.0004 to +0.0007 at 20%, at most 4% of worlds reach the whole-cohort MCID.
  • A study of 289 admissions and 44 events is very noisy. The SD of the observed gain at 5% (0.0038 at the pooled medians) exceeds the expected gain (+0.0025), and only 57% of studies show a positive gain.

Limits and what would change them

  • The allo flag (superseded by addendum 14, which builds the stratum from the data and finds this assumption does not hold). The stratum’s profile mix and its constant odds multiplier of 5.3 rest on one assumption: that allo status is independent of the clinical profile once the outcome is known. If allo recipients’ excess risk comes mostly through the predictors (more steroids, neutropenia, CMV), the true multiplier would be smaller and the stratum would sit at higher-risk profiles, which changes both the baseline’s performance and the MCID. An admission-level allo flag in the analysis file would replace this assumption. I do not know whether boscore.xlsx carries one (its column names show only DTMO, a transplant date, which would not separate allogeneic from autologous), and I did not read values from it. If you add the flag to the pseudonymised base cohort (script 08) the stratum can be built from the data.
  • The donor evidence is one study each for PTX3 and CLEC7A, two for TLR4, none for CD209, and one of them is a hazard ratio. The pooled donor intervals are wide, and the CLEC7A value (OR 0.70) rests on one study with a wide interval.
  • Donors are taken as unrelated (independent of the recipient’s genotype) and each admission as having its own donor. A matched sibling donor shares half of the recipient’s alleles.
  • Donor and recipient effects are not combined: in the stratum the score uses donor effects only. The Shapley attribution is not repeated for the donor analysis.

Code and outputs: R/genetic_layer.R, R/genetic_helpers.R, scripts/18_genetic_ensemble_sampling.R, scripts/20_genetic_donor_stratum.R, tests/testthat/test-genetic-layer.R, output/genetic_ensemble_sampling_{draws,summary}.csv, output/genetic_donor_{evidence,stratum_summary,baseline_stratum,sampling_summary}.csv, and the donor posterior draws output/{ptx3_h2,clec7a,tlr4}_donor_posterior_draws.csv (written by scripts 12 and 14).


Addendum 14, 19 October 2026: an admission-level allo-HSCT flag, and the donor-genotype stratum rebuilt from the data (D18)

Erratum (19 October 2026, addendum 16, section 0): the CLEC7A evidence behind this addendum used one study (Fischer 2016) with its direction reversed. The tables below show the values before the correction; the regenerated files in output/ hold the corrected ones, and the differences are small (gains by at most 0.00006, shares reaching the MCID by at most 3 points, Shapley shares by at most 1.6 points). The conclusions do not change.

Written after the tag. Provisional, like addenda 11 to 13. Nothing in D1 to D17 changes, and the addendum 11 and 12 results reproduce unchanged. It supersedes the stratum construction of addendum 13, which is kept as a sensitivity analysis.

The flag

boscore.xlsx has no allo-HSCT column. What it has, and what was used (script 08, the identified file read locally; only counts were printed and no date or identifier is kept):

  • SCORE9 (recode2SCORE9, coded 2) is the older item “allo-HSCT, or high-dose cytarabine, FLAI-E or ICE chemotherapy”. The item named allogeneic_hsct in the 2019 file is the same column (862 of the 863 admissions coded 2 are flagged in the 2019 file, and none of the 3,264 coded 0 is). The 2017 high-risk chemotherapy item (BOSCORE_9) is this item: they differ on 2 of 4,127 rows.
  • DTMO is a transplant date, present on 1,124 of the 4,127 rows and always 0 to 365 days after the admission date (mostly 1 to 30). Autologous transplants sit in the other category of SCORE9, so a transplant date on a row of the composite category marks an allo-HSCT admission.
  • The flag is therefore SCORE9 = 2 and a transplant date present (allo_hsct_flag() in R/boscore_data.R). Only whether the date is present is used.

Validation against Table 1 (allo-HSCT as the reason for admission: 292 admissions, 44 events, 248 non-events): the flag gives 292 admissions, exactly, with 43 events and 249 non-events, one admission classed the other way. That is the same size of discrepancy as the two Table 2 counts that are one lower than published (D8), and is recorded as a known difference (BOSCORE_EXPECTED). The flag is added to the pseudonymised base cohort (data/restricted/base_cohort_pseudonymised.csv, column allo_hsct; a file without it still loads, with the flag missing) and the counts are in output/allo_hsct_summary.csv.

In the base cohort of 4,078 unique admissions there are 272 allo-HSCT admissions with 43 events (6.7% of admissions, event rate 15.8%). 20 of the 49 non-event twin rows are allo admissions (41%, against 7% overall), so the duplicate-pair artefact (addendum 5) is concentrated in transplant admissions.

What the data show, and what that does to addendum 13

allo-HSCT admissions all others
high-risk chemotherapy item 99.6% 14.5%
severe lymphopenia 74% 8%
prolonged neutropenia 85% 24%
uncontrolled malignancy 26% 42%
CMV 10% 2%

Allo admissions are the high-risk chemotherapy item (that item contains them), and only 23 of the 128 clinical profiles occur among them (total-variation distance to the whole cohort 0.83). The baseline score predicts a 14.3% event rate in the stratum against 15.8% observed, an odds multiplier of 1.15, not the 5.3 that addendum 13 derived from the Table 1 margins. The assumption of addendum 13 (allo status depends on the outcome only, given the profile) does not hold: allo admissions are riskier almost entirely through their predictors, and the baseline is nearly calibrated in the stratum.

D18. The stratum from the data (primary)

The stratum is the flagged admissions’ own profile distribution (272 admissions, so a sparse one), with a constant recalibration offset on the baseline logit chosen so that the predicted event rate equals the observed one (allo_stratum_data()). Everything else is as in D17: donor effects, donor dosage Hardy-Weinberg and independent of the recipient’s profile, the scores carry no allo information, the stratum MCID is 20% more true cases among its admissions at no extra false positives. The Table 1 construction is kept as the “margins” sensitivity analysis (output/genetic_donor_* files have a stratum column; the margins rows reproduce addendum 13 exactly).

Results (data stratum)

The baseline score flags 77% of allo admissions at 5%, finding 152 true cases and 617 false positives per 1,000, with an aROC of 0.74 in the stratum. The stratum MCID is +0.03032 at 5% (30 extra cases per 1,000 allo admissions) and +0.01189 at 20%.

truth score threshold stratum gain (90% range) extra cases per 1,000 allo reaches stratum MCID whole-cohort gain reaches whole-cohort MCID
mean ceiling 5% +0.00070 (0.00006 to 0.00342) 0.5 0% (MCID 0.03032) +0.00005 0% (MCID 0.00458)
mean realised 5% +0.00021 (-0.00055 to 0.00108) 1.3 0% (MCID 0.03032) +0.00001 0% (MCID 0.00458)
predictive ceiling 5% +0.00114 (0.00013 to 0.00688) 0.4 0% (MCID 0.03032) +0.00008 0% (MCID 0.00458)
predictive realised 5% +0.00024 (-0.00080 to 0.00159) 1.4 0% (MCID 0.03032) +0.00002 0% (MCID 0.00458)
mean ceiling 20% +0.00866 (0.00338 to 0.02176) 23.0 27% (MCID 0.01189) +0.00058 4% (MCID 0.00160)
mean realised 20% +0.00363 (-0.00329 to 0.01042) 14.3 3% (MCID 0.01189) +0.00024 0% (MCID 0.00160)
predictive ceiling 20% +0.01094 (0.00388 to 0.03971) 27.7 44% (MCID 0.01189) +0.00073 14% (MCID 0.00160)
predictive realised 20% +0.00382 (-0.00634 to 0.01374) 14.4 8% (MCID 0.01189) +0.00026 0.4% (MCID 0.00160)

Sampling variability of a study with the stratum’s size (272 admissions, 43 events):

truth, score threshold expected gain observed gain, mean (90% range) SD gain > 0 reaches stratum MCID
pooled medians, either score 5% +0.00024 +0.00034 (-0.00193 to 0.00580) 0.00244 33% 0%
pooled medians, either score 20% +0.00399 +0.00402 (-0.00827 to 0.01838) 0.00784 68% 17%
95th percentile, ceiling 5% +0.00320 +0.00321 (-0.00522 to 0.01162) 0.00516 74% 0%
95th percentile, ceiling 20% +0.02367 +0.02392 (0.00276 to 0.04688) 0.01334 97% 82%
95th percentile, realised 5% +0.00081 +0.00075 (-0.00175 to 0.00639) 0.00276 41% 0%
95th percentile, realised 20% +0.00932 +0.00978 (-0.00368 to 0.02574) 0.00912 85% 40%
drawn (mean), ceiling 5% +0.00116 (-0.00387 to 0.00755) 0.00367 50% 0%
drawn (mean), ceiling 20% +0.01019 (-0.00648 to 0.03309) 0.01249 79% 41%
drawn (predictive), ceiling 5% +0.00204 (-0.00445 to 0.01064) 0.00472 57% 0%
drawn (predictive), ceiling 20% +0.01418 (-0.00643 to 0.04412) 0.01637 84% 50%
drawn (predictive), realised 5% +0.00031 (-0.00193 to 0.00619) 0.00259 31% 0%
drawn (predictive), realised 20% +0.00382 (-0.01103 to 0.02114) 0.00996 62% 21%
  • At 5% there is almost no room. The baseline already flags 77% of the stratum, so donor genotype can only move a few admissions out of the flagged group. The gain is 0.4 to 1.4 extra true cases per 1,000 allo admissions against the 30 needed, and it never reaches the stratum MCID. This is smaller than addendum 13’s +3 to +4 per 1,000, which assumed a stratum where the baseline flagged 22%.
  • At 20% the gain is larger than in addendum 13 (23 to 28 extra cases per 1,000 for the ceiling score, against 9 to 10), because the stratum’s profiles are concentrated at the top of the baseline’s range and the baseline flags only 14% there. The ceiling score reaches the stratum MCID in 27% to 44% of worlds, a score using the pooled estimates in 3% to 8%.
  • Spread over the whole cohort the donor gain is +0.00001 to +0.00008 at 5% and +0.0002 to +0.0007 at 20%, and reaches the whole-cohort MCID in at most 14% of worlds (ceiling, predictive, 20%) and never at 5%.
  • A study of 272 admissions and 43 events is very noisy. At the pooled medians the SD of the observed gain at 5% (0.0024) is ten times the expected gain, and only a third of studies show a positive gain.

Limits

  • The flag is derived, not recorded as an allo indicator. It reproduces Table 1’s 292 exactly but not the event split (43 against 44). Anyone with the source database can replace it with the recorded transplant type.
  • The profile distribution of the stratum rests on 272 admissions and 23 profiles, and a constant offset recalibrates the baseline; the baseline’s predictions within the stratum are otherwise taken as correct.
  • The donor evidence is unchanged and thin (one study each for PTX3 and CLEC7A, two for TLR4, none for CD209), with donors treated as unrelated.
  • The identified file was read to derive the flag. If your data-sharing agreement or ethics approval does not cover use with an AI tool, say so and I will not run script 08 again; the pseudonymised cohort carries only the binary flag, with no date or identifier.

Code and outputs: R/boscore_data.R (allo_hsct_flag, allo_summary), scripts/08_reconcile_boscore.R, R/genetic_layer.R (allo_stratum_data), scripts/20_genetic_donor_stratum.R, tests/testthat/test-boscore-data.R, tests/testthat/test-genetic-layer.R, output/allo_hsct_summary.csv, output/genetic_donor_{strata,stratum_summary,baseline_stratum,sampling_summary}.csv.


Addendum 15, 19 October 2026: Aim 3b started, the expected direction stated before the run (D19)

Written after the tag and before any Aim 3b result exists. This section (prediction and design) was committed and pushed first, so the prediction cannot be adjusted to the results. Results follow in a later section of this addendum. Provisional, like addenda 11 to 14.

What Aim 3b is, and the tension

Aim 3b is a neutropenia-stratified falsification test (project description). Feys and colleagues found that PTX3 and CLEC7A variants do not predispose to influenza- or COVID-associated aspergillosis, and explain it by inflammatory levelling: severe viral pneumonia induces PTX3 as an acute-phase protein, so genotype-determined baseline differences are swamped. Neutropenia is used as a proxy for the non-inflamed host, not as a claim that the effects are neutrophil-dependent. The hypothesis under test, H_F, is therefore that per-copy genetic effects are larger in neutropenic than in non-neutropenic admissions. The only direct stratified evidence, Brunel 2018 (supplementary figure, transcribed by an agent, derived by subtraction and flagged ambiguous), points the other way: the PTX3 homozygote contrast is significant in the non-neutropenic stratum (P = 0.008 and 0.002 for the two SNPs) and not in the neutropenic one (P = 0.7 and 0.6). Its stratum is neutropenia at presentation (ANC below 500), which is not the cohort’s prolonged-neutropenia predictor, so even that evidence is not like for like.

What the simulation can and cannot do

The effect modification is an input of the simulation, so the simulation cannot decide between Feys and Brunel. It can show (i) what each reading would mean for decisions, at the same pooled effect; (ii) what it costs to build a stratified score on the wrong reading; and (iii) whether a study of this size could tell the readings apart, which is the question that matters for a falsification test.

Expected direction (written before the run)

# prediction confidence
E1 The effect-modification ratio estimated from Brunel’s counts (neutropenic over non-neutropenic) has a point estimate below 1, the opposite of H_F, with an interval that includes 1 high for the sign of the point estimate, high that the interval includes 1
E2 With homogeneous effects, the gain per admission is larger in the neutropenic stratum, because it holds most of the events, and the neutropenic stratum contributes more than its share of admissions (about a quarter) to the whole-cohort gain medium
E3 At the same pooled effect, a truth in the H_F direction gives a larger whole-cohort gain than a truth in the Brunel direction at the 20% threshold, because the effects sit where the events are. At 5% the baseline probably already flags most neutropenic admissions (as in the allo stratum), leaving little room, so I do not commit to a direction at 5% low to medium at 20%, none at 5%
E4 A stratified score built on the wrong reading loses gain: under a Brunel-direction truth, a score that assumes H_F does worse than the common-effect score, and the reverse high, qualitatively
E5 The falsification test is underpowered in a study of this size (133 events). Fitting a genotype-by-neutropenia interaction in simulated studies, the estimate has the true sign in at most about 75% of studies under a moderate modification (ratio 4 or 1/4), and the interaction reaches P < 0.05 in at most 15% medium

So the expected headline is: the neutropenia split matters less than the question of whether the whole-cohort pooled effects are right, and a study of this size could not confirm or reject H_F. If E1 holds, the available evidence leans against H_F, but weakly.

D19. Design (proposed; fixed before the run)

  • Strata. The prolonged-neutropenia predictor of the base cohort (4,078 admissions): neutropenic and non-neutropenic. The decision rule is the refit baseline in both. Each stratum has its own profile distribution, share, and event rate.
  • Truth. Stratum-specific per-copy effects, beta_N and beta_NN, with the event-weighted average equal to the pooled effect beta, so the whole-cohort pooled evidence stays consistent: w beta_N + (1 - w) beta_NN = beta, where w is the share of the baseline’s events that fall in the neutropenic stratum. The modification ratio r = beta_N / beta_NN takes the values infinity (all in neutropenic admissions), 4, 1 (homogeneous, as in addenda 11 to 14), 1/4 and 0 (all in non-neutropenic), plus a data-based value: r drawn from the Brunel counts, log r ~ N(estimate, SE). The truth is recentred within each stratum to hold that stratum’s event rate (D5). Effects are drawn from the pooled posteriors as before (mean reading, 1,000 draws).
  • Scores (fixed, not fitted): the baseline; the ceiling (true stratum-specific effects, an oracle that knows the modification); the common score (pooled medians in both strata, the “realised” score of the earlier addenda); and assumed-H_F and assumed-Brunel scores (pooled medians distributed between the strata as ratios of 4 and 1/4 would imply). Each is recentred to its stratum’s baseline mean risk.
  • Outcomes. Net-benefit gain over the baseline in each stratum (per stratum admission) and for the whole cohort (shares times the stratum gains, a single threshold), at 5% (primary) and 20% (secondary), against the whole-cohort MCID (+0.00458, +0.00160) and each stratum’s own MCID (20% more true cases among its admissions at no extra false positives).
  • The falsification test. In each simulated study of 4,078 admissions (patients resampled, genotype per patient, outcomes from the truth), a logistic model with the baseline logit as an offset, outcome ~ offset(logit) + S + S:N, where S is the pooled-median genetic score and N the neutropenia indicator. The interaction coefficient is the estimated modification on the log-odds scale. Reported: the share of studies in which it has the true sign, and the share with P < 0.05 in the true direction. 1,000 studies per truth.
  • Not included: per-term attribution, the correlation ensemble, the sensitivity cohorts, donor genotype, and any link between genotype and neutropenia (genotype is independent of the clinical profile, as before).

Results (written after the run)

Changes to the plan, and one error found.

  • The data-based Brunel scenario was planned as a ratio drawn with log r ~ N(estimate, SE). The estimate is negative (ratio -0.11), so its logarithm does not exist, and holding the pooled effect as the event-weighted average would need an effect 8.6 times the pooled one in the non-neutropenic stratum (the Bologna event share in neutropenic admissions is 0.80, Brunel’s about 0.4). The scenario instead applies Brunel’s stratum effects directly, as fractions of its own whole-cohort effect: -0.21 in neutropenic admissions and +1.87 in non-neutropenic ones, which leaves a whole-cohort effect of about 0.2 of the pooled one.
  • The first run of the interaction fit left the neutropenia main effect out of the model. The truth is recentred within each stratum, so the strata differ in intercept, and the omission pulled the interaction estimate towards zero (it recovered about a third of the true difference). A check against known truths on a large replicated cohort found it. All interaction results below are from the corrected model, and the layer results were not affected.
  • The recentring bracket was widened (an effect several times the pooled one in the small non-neutropenic stratum needs a shift beyond 8 on the logit scale). The earlier results are unchanged.

The strata. Neutropenic admissions are 28% of the cohort (1,157), with a baseline event rate of 9.2% and 106 of the 133 events (80%). Non-neutropenic admissions are 72% (2,921), with an event rate of 0.9% and 27 events. The stratum MCIDs are +0.01516 (5%) and +0.00553 (20%) for neutropenic admissions, and +0.00039 and +0.00004 for non-neutropenic ones, where there are so few events that almost any gain clears them.

E1, the Brunel evidence. Mapped to the per-copy h2 scale, Brunel’s PTX3 effect is +1.17 (SE 0.49) in the non-neutropenic stratum and -0.13 (SE 0.53) in the neutropenic stratum (rs2305619), a difference of -1.30 (SE 0.72; 95% interval -2.71 to +0.12; P = 0.07). Through rs3816527 it is +1.76 (SE 0.86) and -0.24 (SE 0.54), a difference of -1.99 (SE 1.01; 95% interval -3.98 to -0.01; P = 0.049). The point estimates are opposite to H_F, as predicted. The interval includes no difference for rs2305619 but only just excludes it for rs3816527, so “the interval includes 1” holds for one of the two SNPs. The data are 212 courses and 26 events, the stratum is neutropenia at presentation (not the cohort’s prolonged-neutropenia item), and the counts have the doubts recorded in addendum 8.

Net-benefit gain, whole cohort (mean reading, 1,000 draws, median; the 90% ranges, the predictive reading and the stratum results are in output/aim3b_layer_summary.csv). The ceiling score knows the true stratum effects, the common score applies the pooled estimates to everyone, and the assumed scores split the pooled estimates between the strata as a ratio of 4 (assumed H_F) or 1/4 (assumed Brunel) would imply:

truth threshold ceiling common assumed H_F assumed Brunel ceiling reaches the whole-cohort MCID
all in neutropenic (ratio infinity) 5% +0.00081 +0.00047 +0.00060 -0.00019 0%
ratio 4 5% +0.00072 +0.00045 +0.00053 -0.00014 0%
homogeneous 5% +0.00059 +0.00043 +0.00038 +0.00008 0%
ratio 1/4 5% +0.00117 +0.00045 +0.00007 +0.00088 0.4%
all in non-neutropenic (ratio 0) 5% +0.00356 +0.00033 -0.00045 +0.00219 18%
Brunel’s stratum effects 5% +0.00049 -0.00016 -0.00070 +0.00011 0%
all in neutropenic 20% +0.00151 +0.00106 +0.00115 +0.00066 45%
ratio 4 20% +0.00135 +0.00099 +0.00104 +0.00064 37%
homogeneous 20% +0.00106 +0.00082 +0.00078 +0.00062 17%
ratio 1/4 20% +0.00083 +0.00043 +0.00023 +0.00061 11%
all in non-neutropenic 20% +0.00195 -0.00030 -0.00066 +0.00033 62%
Brunel’s stratum effects 20% +0.00023 -0.00055 -0.00092 -0.00029 0%

With homogeneous effects the gain per admission is 11 times larger in the neutropenic stratum (+0.00170 against +0.00015 at 5%, 4.0 extra true cases per 1,000 neutropenic admissions), and that stratum supplies 81% of the whole-cohort gain at 5% and 96% at 20%.

The falsification test in simulated studies of the cohort’s size (1,000 studies per row; patients resampled, genotype per patient, outcomes from the truth; the interaction estimate is the extra effect per unit of the pooled-estimate score in neutropenic admissions; effects at the pooled medians):

truth true interaction median estimate (SD) estimate has the true sign P < 0.05 in the true direction
all in neutropenic +1.25 +1.29 (0.63) 98% 59%
ratio 4 +0.88 +0.89 (0.61) 94% 34%
homogeneous 0 +0.01 (0.57) 2.9% positive, 2.7% negative
ratio 1/4 -1.86 -1.88 (0.52) 100% 95%
all in non-neutropenic -4.93 -5.00 (0.66) 100% 100%
Brunel’s stratum effects -2.08 -2.08 (0.55) 100% 96%

At the 95th-percentile effects the power rises (97% for all-in-neutropenic, 82% for ratio 4). The interaction fit is unbiased and its false-positive rate is about 5%, as it should be. The modifications are not symmetric in size, because holding the pooled effect fixed with 80% of events in the neutropenic stratum means a ratio of 1/4 needs an effect 2.5 times the pooled one in the small non-neutropenic stratum: the true difference for “ratio 1/4” (-1.86) is twice that for “ratio 4” (+0.88), and power differs accordingly.

The predictions against the results

# outcome
E1 Mostly held. Point estimate opposite to H_F for both SNPs; the interval includes no difference for rs2305619 (P = 0.07) but not quite for rs3816527 (P = 0.049)
E2 Held, more strongly than predicted. The neutropenic stratum has 11 times the gain per admission and supplies 81% to 96% of the whole-cohort gain under homogeneous effects
E3 Not borne out in general. At 20% an H_F truth beats a Brunel truth at the moderate setting (ratio 4 against 1/4: +0.00135 against +0.00083) but not at the extreme (all in neutropenic against all in non-neutropenic: +0.00151 against +0.00195). At 5% the Brunel direction wins at both settings. Placing the effect in the low-risk stratum, where it must be large to keep the pooled effect, moves many admissions across the threshold
E4 Held. Under a Brunel-direction truth the assumed-H_F score does worse than the common score (+0.00007 against +0.00045 at ratio 1/4, 5%), and under an H_F truth the assumed-Brunel score does worse (-0.00014 against +0.00045 at ratio 4)
E5 Wrong. I predicted an underpowered test (at most 75% correct sign and 15% significant at a moderate modification). The estimate has the right sign in 94% to 100% of studies and is significant in 34% (ratio 4) to 95% (ratio 1/4)

What this does and does not show

  • The neutropenia split matters for where the decisions are: whichever way the effect modification runs, most of the gain comes from neutropenic admissions unless the effect is placed entirely in non-neutropenic ones.
  • A single score with pooled estimates is the safer choice. It never loses much under an H_F truth (+0.00047 against an oracle +0.00081 at 5%) but loses nearly all of the achievable gain under a Brunel-direction truth (+0.00033 against +0.00356), and it is harmful if Brunel’s stratum effects held here (-0.00016 at 5%, -0.00055 at 20%). A score built on H_F is the most harmful when wrong.
  • The falsification test is feasible in a cohort of this size and is better powered than I predicted, at least for modifications as large as Brunel’s. This is a design result: it assumes genotype is measured, the weights of the score are right, and there is no misspecification, so the real power would be lower. A genotyped Bologna cohort would not be needed to learn that H_F and Brunel’s reading differ by amounts a study of this size can resolve, but it is needed to resolve them.
  • Brunel’s direction (effect larger in non-neutropenic patients) is the opposite of H_F and is borderline significant (P = 0.07 and 0.049). It is one small study with unverified counts and a different neutropenia definition, so it does not settle the question.

Limits

  • Neutropenia is the cohort’s prolonged-neutropenia item (the stratum has 80% of the events); Brunel’s stratum is neutropenia at presentation. The Brunel scenario assumes all four terms follow PTX3’s pattern.
  • The pooled effect is held as the event-weighted average in the ratio scenarios, which makes the scenarios asymmetric in size (see above). Brunel’s stratum effects are applied unconstrained and imply a whole-cohort effect of about 0.2 of the pooled one.
  • Genotype is independent of the clinical profile and of neutropenia. The interaction test takes the score weights as known.
  • One threshold decision per admission, strata combined by their shares, no correlation ensemble, no donor genotype, no Shapley attribution.

Code and outputs: R/aim3b.R, scripts/21_aim3b_neutropenia.R, tests/testthat/test-aim3b.R, output/aim3b_{strata,brunel_modification,layer_summary,interaction_summary}.csv.


Addendum 16, 19 October 2026: an error in one study’s direction, the second CLEC7A parameter, the Aim 4 sweep, and a smoothed allo stratum (D20)

Update (19 October 2026, addendum 19): the full texts of Kalkanci 2020 and Chen 2019 resolved their rs7309123 strands (both forward), which adds Kalkanci to the primary second-parameter analysis (OR 1.86, 1.26 to 2.63, from three studies). The tables in this addendum show the values before that update; the regenerated files in output/ hold the new ones, and the differences are small.

Written after the tag. Provisional, like addenda 11 to 15. Nothing in D1 to D19 changes. One data error found on the way (below) changes the CLEC7A evidence and was propagated through every result that uses it.

0. Erratum: the direction of Fischer 2016 (S073) was reversed

While resolving the strand of rs7309123 I read Table 3 of Fischer 2016 (PLoS One, Europe PMC PMC4786091). Its comparisons are laid out reference group first, then the compared group, and the Results text confirms the direction for rs7309123 (the G/G genotype is an independent risk factor for pulmonary IFD, OR 2.6; G-allele carriers are at increased risk). The extraction kept the row label as written (“Dectin-1 C/C + C/G vs Dectin-1 rs7309123 G/G genotype”), and the pipeline’s rule for a comparison with no reference marker, first group as the numerator, read it backwards. The same layout holds for the Y238X rows (“Dectin-1 wild type (A/A) vs Dectin-1 Y238X carrier”), whose odds ratios (pneumonia 0.8, atypical pneumonia 1.1, pulmonary IFD 0.7) therefore belong to the carriers. For rs7309123 the direction is stated in the text; for Y238X it rests on the table layout, which the text confirms for the other SNP of the same table.

12 rows are corrected in data/extraction_corrections.csv (V1681 to V1684 and V1690 to V1697), each with its evidence. The correction changes one study in the primary CLEC7A analysis:

before after
Fischer 2016, Y238X carriers, per copy OR 1.43 OR 0.70
CLEC7A Y238X, primary pooled OR (90% interval) 0.98 (0.56 to 1.72) 0.84 (0.48 to 1.48)
with hazard-ratio studies 1.36 (0.81 to 1.88) 1.23 (0.70 to 1.77)
European-ancestry cohorts only 0.97 (0.57 to 1.72) 0.83 (0.49 to 1.47)

PTX3, TLR4 and CD209 are unchanged (the mapping files are identical byte for byte except the four CLEC7A files), and so is the donor evidence.

What it did to the results of addenda 11 to 15. Every script that uses the CLEC7A posterior was rerun and the output files regenerated. The conclusions do not change. Compared with the values before the correction: the gain over the baseline moves by at most 0.00006 (for example +0.00058 to +0.00059 at 5% and +0.00104 to +0.00105 at 20%, ceiling, pooled-mean reading), the share of worlds reaching the MCID by at most 3 points for the whole cohort, the extra true cases per 1,000 by at most 0.7, and the Shapley shares by at most 1.6 points (CD209 51.4% to 51.7%, CLEC7A 6.9% to 6.7%). The sampling-variability summaries move by at most 0.0002 in the mean gain (the most at the 95th-percentile truth, because CLEC7A’s upper percentile fell) and 8 points in the share reaching the MCID. The tables in addenda 11 to 14 still show the values before the correction; the regenerated files in output/ hold the corrected ones. The Aim 3b tables of addendum 15 were rewritten with the corrected values. The donor results do not use CLEC7A’s recipient posterior and are unchanged.

The wider question. In the four terms’ analyses, 139 rows were read from a comparison text that carries no reference marker, so the first group was taken as the numerator (Tang S026, Herrero-Sanchez S035 (corrected in addendum 8), Sainz S071, Fischer S073, Chen S074, Tanpaibule S077, Fisher S080). In the primary analyses five rows are of this kind: Tang (PTX3), Tanpaibule (PTX3 and CD209), Sainz (CLEC7A, “A/C vs A/A”) and Fischer (CLEC7A, now corrected). The four others read variant carriers against wild type, the usual convention, but were not checked against their papers. A direction check of those studies’ tables is the next job for the round-2 verification. (Done in addendum 18: Tang and Tanpaibule are correct, one Sainz row was reversed and corrected, Chen and Fisher cannot be confirmed from the open text.)

1. The second CLEC7A parameter: the strand of rs7309123 in each study

Method. The strand of a C/G SNP cannot be read from the letters. For each of the ten studies that report rs7309123, the control frequency of the labelled allele (from printed genotype counts or minor-allele frequencies) was compared with the forward-strand frequency in the matching ancestry (European G 0.426, C 0.574; East Asian G 0.81, C 0.19). The papers were read through five subagents (full text where it is open access; abstracts only for two closed-access papers). The evidence is in data/rs7309123_strand_resolution.csv.

study population labelled G frequency log10 likelihood ratio, forward vs opposite strand grade
Fisher 2017 (S080) European 0.43 (labelled the minor allele) not computed (pooled frequency only) forward A
Schnetzke 2024 (S045) European 0.46 +6.7 forward A
Tanpaibule 2020 (S077) Thai 0.83 +250 forward A
Sainz 2012 (S071) Spanish 0.34 +10.1 forward, below both references B
Fischer 2016 (S073), Fischer 2015 (S023, same Jena cohort) European AML patients (no controls) 0.48 +1.6 forward, weakly C
White 2018 (S042) Welsh no letters printed; non-carriers 35% forward by inference only C
Kalkanci 2020 (S056) Turkish 0.27 undetermined: counts far from Hardy-Weinberg (7 GG observed, 2.4 expected), full text not accessible D
Chen 2019 (S074) Chinese Han none seen; C is the risk allele undetermined (abstract only) D
Zhao 2022 (S081) Chinese Han no letters or frequencies undetermined D

Grades: A resolved with medium-high or high confidence; B low to medium; C low or an inference only; D undetermined. Where the study is Thai or Chinese the European haplotype frequencies do not describe it (rs7309123 G is 0.43 in Europeans and 0.81 in East Asians), so rule 7 of addendum 7 is untenable for this SNP and non-European studies are left out of the primary analysis. The Thai study’s dominant contrast (G carriers against C/C, OR 0.40) cannot even be produced under the European frequencies.

Model. The three CLEC7A haplotypes (gnomAD NFE: A-C 57.4%, A-G 34.9%, C-G 7.7%) have two effects: Y238X (C-G, beta1, from the rs16910526 rows) and the second parameter, beta2, the effect of A-G per copy, with A-C as the reference. Each rs7309123 row is mapped to beta2 by solving the three-haplotype model with beta1 held at its pooled median (now -0.17; C-G carries only 18% of the G alleles, so the plug-in matters little). Primary: strand-resolved (grades A and B), European, odds-ratio, recipient, whole-cohort studies.

analysis studies OR per A-G copy (90% interval) tau
primary (Schnetzke 2024, Sainz 2012) 2 1.78 (1.07 to 2.71) 0.22
adding the Thai study 2 1.80 (1.13 to 2.72) 0.22
adding hazard ratios (Fisher 2017) 2 1.78 (1.08 to 2.76) 0.22
adding the Jena cohort (Fischer 2016, grade C) 3 1.88 (1.31 to 2.62) 0.17
all studies, unresolved taken as forward 5 1.54 (1.03 to 2.25) 0.41
unresolved studies taken as the opposite strand 5 1.60 (1.07 to 2.15) 0.27

(The Thai and Fisher scenarios add no study: the Thai contrast cannot be mapped under European frequencies, and the only usable Fisher row is for donor genotype.) The second parameter is estimated at OR 1.8 per A-G copy, from two studies in the primary analysis. Unlike before the correction of Fischer 2016, it is consistent: the Jena cohort, which has the same direction, raises it to 1.9 with a narrower interval, and the interval excludes 1 in every analysis, including the ones that take all five studies as forward or unresolved ones as the opposite strand (1.5 to 1.6). Its weak points are the number of studies and that one primary study (Sainz) has only a low-to-medium strand grade.

The layer with two CLEC7A parameters (2,000 draws; beta2 from its posterior; the grid has the haplotype-pair structure of CLEC7A; the “held at zero” rows are the four-term panel after the correction):

truth score threshold gain with beta2 gain, beta2 held at zero reaches MCID with beta2 without
mean ceiling 5% +0.00116 (0.00042 to 0.00251) +0.00059 0.2% 0%
mean realised 5% +0.00092 +0.00042 0% 0%
predictive ceiling 5% +0.00145 +0.00079 3.9% 1.3%
mean ceiling 20% +0.00174 (0.00082 to 0.00336) +0.00105 57% 16%
mean realised 20% +0.00141 +0.00080 40% 2.8%
predictive ceiling 20% +0.00210 +0.00129 70% 36%

The second parameter roughly doubles the gain (CLEC7A becomes an active term, because the A-G haplotype is common, 35%), and at 20% moves the MCID from out of reach in most worlds to reached in more than half. At 5% the gain is still a quarter of the MCID (+0.00458). The Aim 3b analysis and the attribution have not been repeated with the second parameter.

2. Aim 4: the genetic-architecture requirements sweep

Design. k independent loci with the same risk-allele frequency and the same per-allele odds ratio (log-additive, Hardy-Weinberg, unlinked); k from 1 to 20, OR from 1.1 to 3.0 by 0.1, frequency from 0.05 to 0.50 by 0.05: 4,000 architectures. The score is the number of risk alleles, whose distribution is the exact convolution of the per-locus genotype distributions (a binomial for identical loci; the code does general loci and the test checks it against enumeration). The truth is the baseline logit plus log(OR) times the score, recentred to hold prevalence (D5), and the score is the ceiling one (true weights, no estimation error): the best an architecture could do. Base cohort, refit baseline, 5% (primary) and 20% (secondary), MCID +0.00458 and +0.00160.

Gain of the ceiling score over the MCID, 5% threshold (white line: gain = MCID)

The same at the 20% threshold

Results (output/aim4_sweep.csv, output/aim4_frontier.csv):

  • 46% of the 4,000 architectures reach the 5% MCID and 77% reach the 20% MCID.
  • Smallest number of loci that reaches the 5% MCID (none within 20 where blank): at OR 3.0, 10 loci at frequency 0.05, 6 at 0.1, 4 at 0.2, and 3 at 0.3 and 0.5; at OR 2.0, 16 loci at 0.1, 9 at 0.2, 8 at 0.3 and 7 at 0.5; at OR 1.8, 13, 11 and 10 loci at 0.2, 0.3 and 0.5; at OR 1.5 or below no number of loci up to 20 reaches it (20 loci at OR 1.5 and frequency 0.5 gives 99.5% of the MCID, and reaches it only at 0.45).
  • Smallest OR that reaches the 5% MCID: one locus never (OR 3.0 and frequency 0.5 gives +0.0018, 39% of it); 4 loci need OR 2.6; 10 loci OR 1.8 to 1.9 at frequencies 0.3 to 0.5 and 2.4 at 0.1; 20 loci OR 1.6 at frequencies 0.3 to 0.5 and 1.9 at 0.1.
  • At 20% the bar is lower: one locus needs OR 2.4 to 2.5 (frequencies 0.3 to 0.5); 4 loci OR 1.6 to 1.9; 10 loci OR 1.4 to 1.6; 20 loci OR 1.3 to 1.4.
  • The panel of addendum 11 (+0.00058 at 5%) is equivalent to about 7 loci of OR 1.3 at frequency 0.3, or 3 loci of OR 1.5. To reach the MCID at 5% it would need to be roughly eight times stronger.
  • For orientation, per-allele odds ratios of 1.1 to 1.3 are the range usually seen for common variants in complex traits (not a result of this project). In that range no architecture of up to 20 loci reaches the 5% MCID, and at 20% only 20 loci of OR 1.3 at common frequencies do so.
  • Robustness. With the published equation as the baseline (MCID +0.00404 and +0.00113) 51% and 80% of architectures reach it (against 46% and 77%). Across the 150 correlation-ensemble members (coarse grid, output/aim4_sweep_ensemble.csv) gain over MCID varies by about 15% around its median: 20 loci of OR 1.5 at frequency 0.3 give 0.77 to 1.03 (median 0.88), 1.3% of members reaching the MCID, while 10 loci of OR 2.0 give 1.13 to 1.49 and every member reaches it. Architectures close to the frontier depend on the unpublished correlation structure; those well inside or outside do not.

Limits. Identical independent loci; the ceiling score (no estimation error, no mis-weighting, no linkage); causal per-allele odds ratios; the baseline’s profile distribution is the empirical one. The Aspergillus-specific pathogen-specificity scenario planned for the Aim 4 surface (scope decision 1) is not run. A realised-score version, with estimated weights of a given precision, would move the frontier outwards.

3. The allo stratum with a smoothed profile distribution

A logistic model of allo status on the seven predictors (main effects) gives each profile a probability of being an allo admission, and the stratum’s distribution is the cohort’s times that probability (allo_stratum_smooth()), recalibrated to the observed stratum event rate as in addendum 14. The model is nearly separated on the high-risk chemotherapy item (coefficient 7.0; allo is part of that item), with lymphopenia (3.0), CMV (1.2) and malignancy (-1.2). Smoothing spreads the stratum over 71 profiles instead of 23, moves the total-variation distance to the cohort from 0.83 to 0.80, and the odds multiplier from 1.15 to 1.19. The baseline flags 76% of the stratum at 5% (77% empirically), and the stratum MCID is +0.02994 and +0.01148.

truth score threshold empirical stratum: gain (extra cases per 1,000 allo), reaches MCID smoothed stratum
mean ceiling 5% +0.00070 (0.5), 0% +0.00098 (1.0), 0%
mean realised 5% +0.00021 (1.3), 0% +0.00036 (1.9), 0%
predictive ceiling 5% +0.00114 (0.4), 0% +0.00151 (1.0), 0%
mean ceiling 20% +0.00866 (23.0), 27% +0.00884 (22.0), 29%
mean realised 20% +0.00363 (14.3), 3% +0.00381 (13.6), 3%
predictive ceiling 20% +0.01094 (27.7), 44% +0.01095 (26.7), 46%

The conclusions of addendum 14 do not depend on the sparsity of the empirical stratum. At 5% donor genotype adds 1 to 2 true cases per 1,000 allo admissions against 30 needed; at 20% it adds 14 to 27 against about 11 needed for the stratum MCID. Whole-cohort equivalents are +0.00007 to +0.00010 at 5% and +0.0003 to +0.0007 at 20%.

Not done

The realised-score version of the Aim 4 sweep and the pathogen-specificity scenario; a repeat of the Aim 3b analysis and the attribution with the second CLEC7A parameter; a direction check of the text-parsed rows of Tang, Tanpaibule, Sainz and the other studies against their tables (section 0); the strand of the three D-grade studies (it needs the full texts of Kalkanci 2020 and Chen 2019, or the authors); and East Asian haplotype frequencies (which would let the Thai and Chinese studies enter the second parameter).

Code and outputs: R/aim4_sweep.R, scripts/23_aim4_sweep.R, scripts/22_clec7a_second_parameter.R, scripts/20_genetic_donor_stratum.R, data/extraction_corrections.csv (12 new rows for S073), R/genetic_layer.R (haplotype_gene_part, joint_grid, allo_stratum_smooth), R/evidence_mapping.R (offset haplotypes), data/rs7309123_strand_resolution.csv, output/clec7a_second_*.csv, output/aim4_*.csv, output/figures/aim4_sweep_*.png, output/genetic_donor_*.csv (a smoothed stratum), and the tests.


Addendum 17, 19 October 2026: Aim 3b and the attribution with the second CLEC7A parameter, and the Aim 4 sweep with a realised score (D21)

Update (19 October 2026, addendum 19): the full texts of Kalkanci 2020 and Chen 2019 resolved their rs7309123 strands (both forward), which adds Kalkanci to the primary second-parameter analysis (OR 1.86, 1.26 to 2.63, from three studies). The tables in this addendum show the values before that update; the regenerated files in output/ hold the new ones, and the differences are small.

Written after the tag. Provisional, like addenda 11 to 16, and conditional on the second CLEC7A parameter of addendum 16 (OR 1.8 per A-G copy, from two strand-resolved European studies). The primary four-term results of earlier addenda are unchanged and stay the headline; this addendum shows what changes when CLEC7A is an active term.

1. Aim 3b with five terms

Same design as addendum 15 (D19): the strata, the six effect-modification scenarios, the five scores, 1,000 draws, and the interaction test in simulated studies of the cohort’s size, now with PTX3, CLEC7A (Y238X), CLEC7A_AG (A-G, with the joint genotype structure of CLEC7A), TLR4 and CD209. The modification applies to every term in the same way (an assumption: Brunel’s pattern is PTX3’s). Outputs: output/aim3b_*_second_clec7a.csv (scripts/21_aim3b_neutropenia.R with AIM3B_SECOND_CLEC7A <- TRUE; the default run reproduces addendum 15 exactly).

Whole-cohort gain over the baseline, pooled-mean reading, median (four terms, five terms); the last column is the share of worlds in which the ceiling score reaches the whole-cohort MCID (five terms):

truth threshold ceiling common ceiling reaches the MCID
all in neutropenic 5% +0.00081, +0.00156 +0.00047, +0.00109 0.3%
ratio 4 5% +0.00072, +0.00140 +0.00045, +0.00104 0.2%
homogeneous 5% +0.00059, +0.00118 +0.00043, +0.00095 0.1%
ratio 1/4 5% +0.00117, +0.00204 +0.00045, +0.00078 1.4%
all in non-neutropenic 5% +0.00356, +0.00438 +0.00033, +0.00002 40%
Brunel’s stratum effects 5% +0.00049, +0.00092 -0.00016, -0.00087 0%
all in neutropenic 20% +0.00151, +0.00260 +0.00106, +0.00195 84%
ratio 4 20% +0.00135, +0.00232 +0.00099, +0.00181 78%
homogeneous 20% +0.00106, +0.00180 +0.00082, +0.00147 60%
ratio 1/4 20% +0.00083, +0.00142 +0.00043, +0.00066 38%
all in non-neutropenic 20% +0.00195, +0.00257 -0.00030, -0.00083 83%
Brunel’s stratum effects 20% +0.00023, +0.00044 -0.00055, -0.00128 0.3%
  • The gain roughly doubles in every scenario, as it does in the unstratified layer (addendum 16), and at 20% the ceiling score reaches the MCID in a majority of worlds in four of the six scenarios (it did in one). At 5% the MCID is still out of reach except when all the effect is in non-neutropenic admissions (40%).
  • The structure of addendum 15 is unchanged. With homogeneous effects the neutropenic stratum supplies 82% of the whole-cohort gain at 5% and 95% at 20% (81% and 96% before), and its gain per admission is +0.00344 (4.1 extra true cases per 1,000) against +0.00028.
  • The common score is more exposed. When the effect is in the wrong place it now does worse: with Brunel’s stratum effects it loses -0.00087 at 5% and -0.00128 at 20% (-0.00016 and -0.00055 before), and it keeps almost none of the oracle’s gain when all the effect is in non-neutropenic admissions (+0.00002 of +0.00438). The wrong-direction stratified scores are worse still, as before. A stronger weight on a term whose stratum pattern is wrong costs more.

The falsification test is better powered (1,000 studies per row, pooled medians; four terms in brackets):

truth true interaction median estimate (SD) estimate has the true sign P < 0.05 in the true direction
all in neutropenic +1.25 +1.26 (0.42) 99.8% (98%) 88% (59%)
ratio 4 +0.88 +0.89 (0.42) 98% (94%) 59% (34%)
homogeneous 0 -0.03 (0.41) 2.6% positive, 2.5% negative (2.9%, 2.7%)
ratio 1/4 -1.86 -1.90 (0.42) 100% 99.8% (95%)
all in non-neutropenic -4.93 -5.00 (0.64) 100% 100%
Brunel’s stratum effects -2.08 -2.10 (0.39) 100% 100% (96%)

The extra term does not change the true interaction (it is defined on the score scale) but lowers the estimate’s standard deviation from about 0.6 to 0.4, because a score with more signal separates the strata better. The false-positive rate stays at 5%. At the 95th-percentile effects the power is 99.8% (all in neutropenic) and 96% (ratio 4). So the answer to E5 of addendum 15 gets stronger: a cohort of this size would resolve the Feys reading from the Brunel reading with high probability, and would detect a Feys-sized modification more often than not, provided genotype is measured and the weights are right.

2. The Shapley attribution with five terms

Same design as addendum 12 (1,000 draws per reading, ceiling and realised scores, empirical cohort), scripts/24_attribution_second_clec7a.R, output/genetic_attribution_second_clec7a_summary.csv. Shapley values add, so the two CLEC7A terms can be combined.

term share, ceiling, 5% ceiling, 20% realised, 5% four terms (ceiling, 5%)
CLEC7A A-G (beta2) 44.6% 43.1% 46.3%
CLEC7A Y238X (beta1) 3.9% 3.0% 1.2%
CLEC7A combined 48.5% 46.1% 47.5% 6.7%
CD209 28.2% 29.2% 32.6% 51.7%
PTX3 13.1% 14.4% 12.2% 22.6%
TLR4 10.3% 10.4% 7.7% 19.0%

(Pooled-mean reading; under the predictive reading CLEC7A combined is 43% to 47% and CD209 26% to 35%.) With the second parameter CLEC7A supplies close to half of the gain, almost all of it through the common A-G haplotype, and CD209 falls from half to under a third. The total gain doubles (+0.0012 against +0.0006 at 5%). Taken alone, A-G gives +0.00041 at 5% and leaving it out of the full score costs +0.00049, against +0.00032 and +0.00027 for CD209. The ranking of addendum 12 (“CD209 carries about half of the gain”) therefore holds only for the four-term panel. It rests on the beta2 estimate, which comes from two studies; it is stable across the strand-assumption scenarios of addendum 16 (OR 1.5 to 1.9), but it is the least mature part of the evidence.

3. The Aim 4 sweep with a realised score

Design. As the sweep of addendum 16, but the weights of the score are estimates: each locus’s log odds ratio carries an independent, unbiased error with standard deviation sigma (its stated precision), while the truth uses the real odds ratio. The loci are fixed in advance, so there is no winner’s curse. Without a small exact form for the joint distribution of the number of alleles and a score with estimated weights, the genotypes are simulated (2,000 per replicate, crossed with the exact profile distribution; the truth’s recentring and the baseline are exact), 12 replicate discovery studies per architecture (the spread over replicates is the study-to-study variation in how good the score is). Grid: 1 to 20 loci x OR 1.2 to 3.0 (10 values) x frequency 0.1, 0.3, 0.5 x sigma 0.05, 0.10, 0.20, 0.40 (2,400 architecture-precision cells). scripts/25_aim4_realised_sweep.R, output/aim4_realised_*.csv.

What sigma means. For a discovery sample of n subjects with case fraction pi, sigma = 1 / sqrt(n pi (1 - pi) 2 p (1 - p)). A balanced design at frequency 0.3 needs about 4,000, 1,000, 240 and 60 subjects for sigma 0.05, 0.10, 0.20 and 0.40. A discovery cohort the size of the Bologna one (4,078 admissions, 3.3% events) gives sigma of about 0.14 for a locus at frequency 0.3 and 0.22 at frequency 0.1. The pooled estimates of this project have standard deviations of about 0.2 to 0.4 on the log scale (PTX3 0.18, CLEC7A A-G 0.28, CD209 0.26, TLR4 0.38), so sigma 0.2 to 0.4 is the relevant range for the present evidence.

Check. At sigma = 0 the simulation reproduces the exact ceiling of addendum 16 to 3% on average (largest absolute difference 0.0007, for large gains); entries near the frontier are good to about one locus.

Fewest loci that reach the MCID, by precision of the weights

Results.

  • Gain kept. The realised score keeps a median of 100% (sigma 0.05), 96% (0.10), 89% (0.20) and 58% (0.40) of the ceiling gain at 5%, and 99%, 96%, 86% and 55% at 20% (over architectures with a ceiling gain above +0.001).
  • Share of architectures reaching the MCID (median replicate, on this grid): at 5%, 29.3% with exact weights, 29.2%, 28.7%, 25.8% and 19.7% at sigma 0.05 to 0.40; at 20%, 69.2% with exact weights, 69.2%, 67.5%, 61.0% and 44.8%.
  • The frontier moves outwards only with large errors. Fewest loci at frequency 0.3 that reach the 5% MCID (exact weights, then sigma 0.05, 0.10, 0.20, 0.40): OR 2.0: 8, 7, 8, 9, 11; OR 2.5: 5, 4, 4, 5, 5; OR 3.0: 3, 3, 3, 4, 3; OR 1.7: 13, 12, 12, 17, none within 20; OR 1.5 and below: none for any precision. At 20%: OR 1.5: 5, 5, 6, 7, 17; OR 1.7: 3, 3, 3, 4, 6; OR 1.3: 13, 13, 14, none, none.
  • Smallest OR at 20 loci and frequency 0.3: 1.6 with exact weights and for sigma up to 0.10, 1.7 at 0.20 and 1.8 at 0.40 (5%); at 20% 1.3, 1.3, 1.3, 1.4, 1.6. With 10 loci: 2.0 for sigma up to 0.20 and 2.5 at 0.40 (5%).
  • Near the frontier the spread matters. 10 loci of OR 2.0 at frequency 0.3 have a ceiling gain of +0.00604 at 5%; with sigma 0.2 the median is +0.00537 and 75% of replicate studies reach the MCID, with sigma 0.4 the median is +0.00433 and 33% do. 20 loci of OR 1.5 are at 91% of the MCID with exact weights, and drop to +0.00383 at sigma 0.2 and +0.00054 at sigma 0.4 (13% of the ceiling).

Reading. With per-locus precision of 0.1 or better (a discovery sample of about 1,000 balanced subjects at a common frequency) the weights cost almost nothing, and the requirements of addendum 16 stand. At the precision the present evidence has (0.2 to 0.4), about 12% (sigma 0.2) to a third (sigma 0.4) of the architectures that would reach the MCID with exact weights no longer do so, and the loci needed for a given odds ratio rise by one to several; at 0.4 an architecture that reaches the MCID only just (20 loci of OR 1.5) loses most of its gain. The frontier moves outwards little for strong effects and much for weak ones: error in many weak weights is what costs.

Not done

Locus-specific error that grows with rarity of the allele (the sweep uses one precision per cell), selection of the loci from the same data (winner’s curse), and linkage between the loci. The Aim 3b stratified analysis and the attribution have not been repeated for the correlation ensemble or the sensitivity cohorts with five terms.

Code and outputs: R/genetic_layer.R (clec7a_second_setup), R/aim3b.R (a joint-genotype sampler for the interaction study), R/aim4_sweep.R (sweep_cell_realised, sigma_for_sample), scripts/21_aim3b_neutropenia.R (the five-term option), scripts/24_attribution_second_clec7a.R, scripts/25_aim4_realised_sweep.R, output/aim3b_layer_summary_second_clec7a.csv, output/aim3b_interaction_summary_second_clec7a.csv, output/genetic_attribution_second_clec7a_summary.csv, output/aim4_realised_{sweep,frontier,check}.csv, output/figures/aim4_realised_frontier.png, and the tests.


Addendum 18, 19 October 2026: the direction check of the text-parsed rows, and whether CLEC7A’s lead holds (D22)

Update (19 October 2026, addendum 19): the full texts of Kalkanci 2020 and Chen 2019 resolved their rs7309123 strands (both forward), which adds Kalkanci to the primary second-parameter analysis (OR 1.86, 1.26 to 2.63, from three studies). The tables in this addendum show the values before that update; the regenerated files in output/ hold the new ones, and the differences are small.

Written after the tag. Provisional, like addenda 11 to 17. Nothing in D1 to D21 changes.

1. The direction check

The rule under test. For a comparison written “X vs Y” with no reference marker, the pipeline takes the first-named group as the numerator. Fischer 2016 listed the reference group first, which reversed its effects (addendum 16). The check below tests the rule against the tables of the five other studies that carry such rows, using the printed genotype counts wherever there are any: the crude odds ratio of the first-named group against the second is compared with the extracted estimate, and the reading is correct if the estimate is on the same side of 1 as the crude odds ratio and not the reciprocal (adjusted odds ratios can differ in size from crude ones, so direction is what is judged). The papers were read through subagents (Europe PMC full text, PMC, the PLoS supplement).

study rows with no marker verdict basis
Tang 2020 (S026, PTX3) 60 (88 rows in all) correct, no change every contrast type (AA, AG, GG, AG+AA, GG+AG, and the rs3816527 equivalents) tested on the whole cohort and one or two other subgroups against the printed counts; 18 rows tested in detail, the crude odds ratio of the first-named group matches the extracted estimate to two decimals in each
Tanpaibule 2020 (S077, IL10, CD209, PTX3) 9 correct, no change the paper prints a “(ref)” row per SNP (A/A for CD209 and PTX3, T/T for IL10), each odds ratio is the named genotype against it; the nine extracted values equal the printed ones and agree in direction with the crude odds ratios. Its rs7309123 contrast (G carriers against C/C, OR 0.404) also matches the reading from the model label
Sainz 2012 (S071, CD209 and CLEC7A) 19 one row reversed, corrected Table 3 puts the reference genotype first and the odds ratio is the named genotype against it, which matches the pipeline’s reading for the heterozygote, homozygote and dominant rows. The recessive rs7309123 row was extracted twice, as “C/C+C/G vs G/G” (V0261) and “G/G vs C/C+C/G” (V0322), both with OR 5.52; the counts (GG 13 of 57 cases, 10 of 125 controls) show the odds ratio belongs to G/G, so V0261 is reversed. Corrected in data/extraction_corrections.csv (43 rows now). The Y238X row (V0315, A/C vs A/A, OR 1.14), which is not in the main text, was checked in the supplement (Table S1: A/A is the reference) and is correct
Chen 2019 (S074, rs7309123) 2 (4 rows in all) cannot tell the paper is closed access and only the abstract could be read; the two rows that carry a “(reference)” marker put G/G second, and the other two (dominant, recessive) follow the same order, but the table was not seen. This study is non-European with an undetermined strand and enters only the sensitivity scenarios
Fisher 2017 (S080, hazard ratios) 3 probably correct, not confirmed the tables carry no footnote on what the HR compares, except that Table 3 defines wild type as the comparison for the rs16910526 dominant row (HR 1.49) and the allelic HRs for rs16910526 are above 1, which fits carriers being the numerator. The IFNG donor row (0.73) and rs7309123 recessive row (1.29) are not defined. These rows enter only the hazard-ratio sensitivity analyses

Herrero-Sanchez 2018 (S035, 41 rows) was checked and corrected in addendum 8, and Fischer 2016 (S073, 9 rows) in addendum 16. Not checked: Lupianez 2015 (S072, 2 IFNG rows, a term that is no longer in the panel).

Effect on the results. The V0261 correction changes one mapped row (output/clec7a_row_effects.csv) and no study effect, pooled estimate or draw: the recessive rs7309123 row is not the one selected for Sainz 2012 (the additive row is). Everything downstream is unchanged. Two incidental points: the extraction lists Sainz 2012’s Table 3 twice (the “whole cohort (IPA vs non-IPA)” rows are exact duplicates of the “whole cohort” rows), which is harmless because one row per study and cohort is selected, and Tang 2020’s effect-allele field does not always name the genotype that is the numerator, which is also harmless because the contrast is read from the comparison text.

Where this leaves the rule. Of the five studies, two follow the rule everywhere, one (Sainz) once in 19 rows contradicted itself, and two cannot be settled from the open text. The reversed row came from a source that wrote “CC+CG vs GG” for an odds ratio that belongs to GG, so a duplicate of a row in the opposite order is a signal to look for. The remaining unconfirmed rows (Chen, Fisher) need the full tables.

2. Does CLEC7A’s lead hold?

Design. The five-term Aim 3b layer and the Shapley attribution of addendum 17, rerun on (a) the three sensitivity cohorts of addendum 12 (the published equation on 4,078 and on 4,127 rows, a refit on the 4,127 rows), each with its own baseline and its own MCIDs, and (b) the 150-member correlation ensemble (the refit baseline on the base cohort, the clinical correlation structure drawn from the members, about 7 of the 1,000 draws of the effects per member). 1,000 draws per reading, second CLEC7A parameter included. scripts/26_five_term_robustness.R, output/robust5_*.csv. The interaction test of Aim 3b is not repeated (it depends on the cohort rows).

Attribution. Shapley share of the gain, pooled-mean reading, 5% threshold, ceiling score (primary is script 24 of addendum 17):

term primary published, 4,078 published, 4,127 refit, 4,127 correlation ensemble
CLEC7A combined 48.5% 48.7% 48.7% 49.1% 47.6%
of which A-G (beta2) 44.6% 44.9% 44.8% 45.2% 44.0%
CD209 28.2% 27.9% 27.9% 27.6% 28.6%
PTX3 13.1% 13.2% 13.2% 13.1% 13.3%
TLR4 10.3% 10.2% 10.2% 10.1% 10.4%

With the realised score the combined CLEC7A share is 46.9% to 48.3% (CD209 32.7% to 33.1%). Over every setting, reading, score and threshold the combined CLEC7A share lies between 42.5% and 49.1% and CD209’s between 25.5% and 35.7%. CLEC7A’s lead holds in every setting. It is the largest single contributor in 62% of draws (ceiling, pooled mean) and in 50% to 53% under the predictive reading, so the median lead is clear but individual draws vary: in the other draws CD209 or PTX3 leads, as the effects are drawn from wide posteriors.

Aim 3b. Whole-cohort gain over the baseline, pooled-mean reading, 5% threshold, ceiling score (primary, published 4,078, published 4,127, refit 4,127, ensemble):

truth gain
all in neutropenic +0.00156, +0.00172, +0.00168, +0.00168, +0.00151
ratio 4 +0.00140, +0.00153, +0.00151, +0.00150, +0.00136
homogeneous +0.00118, +0.00125, +0.00127, +0.00126, +0.00121
ratio 1/4 +0.00204, +0.00200, +0.00211, +0.00208, +0.00223
all in non-neutropenic +0.00438, +0.00413, +0.00435, +0.00430, +0.00464
Brunel’s stratum effects +0.00092, +0.00095, +0.00095, +0.00094, +0.00104

The common score again keeps almost nothing when all the effect is in non-neutropenic admissions (+0.00002, +0.00006, +0.00006, +0.00002, +0.00031) and is harmful with Brunel’s stratum effects (-0.00087, -0.00083, -0.00086, -0.00086, -0.00065). At 20% the ceiling score reaches the whole-cohort MCID in the homogeneous scenario in 60%, 76%, 67%, 65% and 55% of draws, and in the all-in-neutropenic scenario in 84%, 93%, 88%, 87% and 81% (the published equation sets a lower bar: MCID +0.00113 at 20% on 4,078). The neutropenic stratum supplies 78% to 83% of the whole-cohort gain at 5% and 95% to 97% at 20% in every setting (82% and 95% in the primary), a little less in the ensemble at 5%.

Reading. The two findings of addendum 17 do not depend on the cohort, the baseline equation or the clinical correlation structure: the A-G haplotype makes CLEC7A the largest contributor, with about 48% of the gain, and the neutropenic stratum carries most of the gain whichever way the effect modification runs. Both remain conditional on the second CLEC7A parameter (two studies); the robustness checks vary the clinical side, not the evidence behind beta2.

Not done

The interaction test of Aim 3b on the sensitivity cohorts and the ensemble; the direction of Chen 2019’s and Fisher 2017’s tables (they need the full tables); Lupianez 2015’s two rows.

Code and outputs: R/robustness.R, scripts/26_five_term_robustness.R, data/extraction_corrections.csv (V0261), output/robust5_aim3b_summary.csv, output/robust5_attribution_summary.csv (and the per-setting files), output/clec7a_row_effects.csv, and the tests.


Addendum 19, 19 October 2026: Kalkanci 2020 and Chen 2019 read in full (D23)

Written after the tag. The two closed-access papers were supplied as PDFs and read in full. Nothing in D1 to D22 changes.

What the papers settled

Kalkanci 2020 (S056). - The extraction matches the paper. All six genotype rows (TLR4 rs4986790 and rs4986791, CLEC7A rs16910526 and rs7309123, PTX3 rs2305619 and rs3816527) reproduce Table 3’s counts. - The strand of rs7309123 is forward, from the primers. Table 1 gives allele-specific forward primers whose 3’ base is the allele (C or G) after the sequence GTAGAAGTATACGTGTTGAAATAATAGATT[A]. The forward-strand sequence upstream of rs7309123 (Ensembl, GRCh38, + strand) ends in …GATTT before the SNP, so the primers lie on the forward strand (the extra mismatch at the penultimate base is the usual allele-specific design), and the allele letters are forward-strand alleles. - rs16910526 is on the opposite strand, which confirms the earlier “strand flip” flag. Its primers (AACTGTGTAGTGTGCCCTCATT[C/G/T]) are the reverse complement of the forward sequence downstream of the SNP, so the paper’s G (the Y238X stop allele) is the forward-strand C and its T is the forward A. One paper uses the two strands for its two CLEC7A SNPs. - Data concerns, recorded in data/rs7309123_strand_resolution.csv. The control genotypes for rs7309123 (CC 22, CG 4, GG 7) are far from Hardy-Weinberg equilibrium (chi-square 15.9, P < 0.0001; 4 heterozygotes against 13.1 expected) although the paper states that all genotypes fit; the IA group has 31 patients in the tables and 26 in the abstract and text; and the abstract’s odds ratio for the GT genotype (3.635, interval 0.690 to 3.138) is the reciprocal of the effect it describes and its interval differs from the text’s (0.690 to 9.138).

Chen 2019 (S074). - The direction of the four extracted rows is as read. Table 4 gives the counts, and the crude odds ratio of the first-named genotype against the second equals the printed value for each row (C/C against G/G 9.00, C/G+C/C against G/G 1.846, C/C against G/G+C/G 7.532, C/G against G/G 1.66 against 1.62 adjusted), with G/G the reference. The direction check of addendum 18 is closed for this study. - The strand of rs7309123 is forward. Table 3 gives G/G 108, C/G 59, C/C 4 of 171 typed, so the labelled risk allele C has frequency 0.196, the forward-strand East Asian frequency of C (gnomAD EAS 0.188, 1000 Genomes CHB 0.209) and not the opposite-strand value 0.81 (log10 likelihood ratio about 132). - The extraction’s group sizes are wrong. Table 2 gives 113 and 108 patients (221) although 172 were genotyped; Table 4 has 51 and 120 for rs7309123. The extraction took 113 and 108. The pipeline does not use group sizes, so no estimate changes.

Strand status of rs7309123 after this addendum: resolved with medium to high confidence for five studies (Fisher, Schnetzke, Tanpaibule, Kalkanci, Chen), low to medium for one (Sainz), weakly for three (Fischer 2016 and 2015, White), and undetermined only for Zhao 2022. Kalkanci (Turkish) enters the primary second-parameter analysis with the European haplotype frequencies; Chen (Chinese Han) does not (the European frequencies do not describe it).

The second CLEC7A parameter, updated

The primary analysis now has three studies (Schnetzke 2024, Kalkanci 2020, Sainz 2012). Kalkanci’s own estimate is OR 2.18 per A-G copy (SE 0.40 on the log scale).

analysis studies OR per A-G copy (90% interval) tau
primary (Schnetzke, Kalkanci, Sainz) 3 1.86 (1.26 to 2.63) 0.17
adding the non-European strand-resolved studies (Thai, Chinese Han), with European frequencies 4 1.43 (0.89 to 2.20) 0.45
adding hazard ratios (Fisher 2017) 3 1.86 (1.25 to 2.68) 0.17
adding the Jena cohort (Fischer 2016) 4 1.92 (1.43 to 2.57) 0.14
all studies, unresolved taken as forward 5 1.54 (1.03 to 2.25) 0.41
unresolved studies taken as the opposite strand 5 1.53 (1.01 to 2.23) 0.42

(Before: 1.78 (1.07 to 2.71) from two studies.) The estimate is a little larger and tighter, and the interval excludes 1 in every analysis. The row that adds the non-European studies is not valid as an estimate: the Chinese study’s contrasts are mapped through haplotype frequencies from Europeans (C is 0.57 there and 0.19 in East Asians), which is why it drags the estimate down; it is shown only to document why those studies are excluded.

Layer with two CLEC7A parameters (2,000 draws; before in brackets): ceiling score +0.00122 at 5% and +0.00182 at 20% (+0.00116 and +0.00174), with the MCID reached at 20% in 63% of worlds (57%); realised score +0.00100 and +0.00151 (+0.00092 and +0.00141), reaching it in 45% (40%); predictive reading, ceiling, +0.00150 and +0.00216, 72% at 20% (70%). The four-term panel is unchanged (+0.00059 and +0.00105).

Results carried forward (all scripts that use the second parameter rerun)

  • Attribution with five terms (addendum 17). CLEC7A combined supplies 49.7% of the Shapley gain at 5% (48.5% before), with A-G 45.9%, Y238X 3.8%, CD209 27.5% (28.2%), PTX3 12.8% (13.1%), TLR4 10.0% (10.3%); at 20% 47.5%; with the realised score 51.3% (47.5%) at 5% and 49.7% at 20%. Under the predictive reading CLEC7A combined is 45% to 49%.
  • Aim 3b with five terms (addendum 17). Whole-cohort gain at 5% and 20%, ceiling, pooled-mean reading (before in brackets for the homogeneous row, +0.00118 and +0.00180): all in neutropenic +0.00164 and +0.00271; ratio 4 +0.00147 and +0.00242; homogeneous +0.00124 and +0.00187; ratio 1/4 +0.00212 and +0.00147; all in non-neutropenic +0.00443 and +0.00261; Brunel’s stratum effects +0.00096 and +0.00046. The share of worlds reaching the 20% MCID is 88%, 83%, 66%, 41%, 84% and 0.3% in the same order (84%, 78%, 60%, 38%, 83%, 0.3% before). The interaction test: power 90% for a Feys-sized modification (88%), 62% at ratio 4 (59%), 100% for Brunel-sized ones; false positives 5.1%.
  • Robustness (addendum 18). CLEC7A’s lead holds on every cohort and the ensemble: combined share 48.9% to 50.4% at 5% (ceiling, pooled mean) and 44.8% to 52.8% across every reading, score and threshold; CD209 25.7% to 32.5%; CLEC7A is the largest single contributor in 64% to 69% of draws under the pooled-mean reading and 54% to 57% under the predictive one (about 4 to 6 points more than before). The neutropenic stratum supplies 78.5% to 83.5% of the Aim 3b gain at 5% (homogeneous, ceiling). Whole-cohort gains in the five settings rose by at most 0.00023 and the share reaching the MCID by at most 11 points.

Tables in addenda 16 (section 1), 17 and 18 show the values before this update (the regenerated files in output/ hold the new ones); the differences are in the third significant figure of the gains and at most 11 points in the shares reaching the MCID, and no conclusion changes. Addendum 16’s direction check of rs7309123 rows and its statements about Kalkanci and Chen are superseded by this addendum.

Not done

Zhao 2022’s strand (rs7309123 appears only in a donor-genotype screening table with no allele letters); East Asian haplotype frequencies (which would let Chen’s and Tanpaibule’s contrasts enter the second parameter); Fisher 2017’s hazard-ratio rows, whose direction is still unconfirmed.

Code and outputs: data/rs7309123_strand_resolution.csv (S056 and S074 now grade A, with a data_concern column), scripts/22_clec7a_second_parameter.R, output/clec7a_second_*.csv, output/genetic_attribution_second_clec7a_summary.csv, output/aim3b_*_second_clec7a.csv, output/robust5_*.csv.


Addendum 20, 19 October 2026: Fisher 2017 read in full, and the direction check is closed (D24)

Written after the tag. The paper was supplied as a PDF and read in full. Nothing in D1 to D23 changes.

What the paper settles.

  • The extracted numbers. Every one of the 23 extracted hazard ratios for the panel SNPs (rs16910526, rs2305619, rs3816527, rs7309123, rs7248637 and rs2069705) equals a value printed in Table 3 or Table 4, with its interval: six rows for rs16910526, six for rs2305619, four for rs3816527, five for rs7248637, one each for rs7309123 and rs2069705.
  • The direction of the hazard ratios. The Figure 1 legend defines the dominant model for the minor allele (“*a, Aa, or aa”) with AA, homozygous for the major allele, as the comparison. The cumulative-incidence curves agree with every hazard ratio: carriers of the rs16910526 minor allele have more proven or probable IA than AA (about 21% to 30% against 16%, HR 1.49, 1.77 and 1.30); minor-allele homozygotes of rs7309123 have more than the others (19.5% against 15.5%, recessive HR 1.29); carriers of the rs2069705 minor allele have less IA by serum galactomannan than AA (HR 0.73). So the numerator is the carriers of the minor allele (dominant model) or the minor-allele homozygotes (recessive model), as the extraction reads it, and the direction check of addenda 18 and 19 is closed: all seven studies with text-parsed rows have a recorded verdict (data/direction_check_log.csv), and only Lupianez 2015’s two IFNG rows (a term no longer in the panel) were not checked.
  • Genome labels. Table 4’s blank genome and time cells carry down, so the 2-year allelic and dominant rows for rs16910526 (1.29 and 1.30) belong to the recipient, as extracted.

Caveats the paper adds.

  • Allele designations change between tables. Table 3 lists PTX3’s alleles as minor/major “to keep our model consistent with the original articles”, where Table 4 lists major/minor, and rs16910526 appears as G/T in Tables 1 and 3 and A/C in Table 4 (strand). For rs16910526 the minor allele is C in every reading (MAF 0.08), so the dominant rows are unambiguous. For the PTX3 donor row that the pipeline uses (Table 3, recessive, HR 1.33 for A/A against the others), the identity of the homozygote group rests on the paper’s note that the original articles’ allele is analysed; it agrees with the h2 definition (A at rs2305619 is the risk allele), so no change is made, but the donor PTX3 evidence carries this one assumption.
  • The text and the tables disagree on which SNPs were validated. The Results text says rs1840680 (PTX3) and rs7309123 (CLEC7A) were replicated; Table 3 lists rs2305619 and rs16910526, and rs7309123 appears only in Table 4. The pipeline follows the tables.
  • Hazard-ratio rows only enter sensitivity analyses, so no result changes.

Code and outputs: data/direction_check_log.csv, tests/testthat/test-term-mapping.R.


Addendum 21, 19 October 2026: East Asian haplotype frequencies, the Thai and Chinese studies in the second CLEC7A parameter, and a check of their direction (D25)

Written after the tag. Nothing in D1 to D24 changes. This closes the item “East Asian haplotype frequencies” left open in addenda 16 and 19.

1. East Asian haplotype frequencies

scripts/28_east_asian_haplotypes.R takes the phased phase 3 genotypes of the 1000 Genomes East Asian samples from the Ensembl REST API (cached in data/phased_1000G_EAS_genotypes.csv, 1,008 chromosomes) and counts the four haplotypes of rs16910526 (Y238X, forward-strand C) and rs7309123 (forward-strand G or C). Output: data/haplotype_frequencies_eas.csv.

population (chromosomes) A-G A-C C-G C-C
Chinese Han, CHB + CHS (416), used for Chen 2019 (S074) 0.798 0.200 0.002 0
Dai in Xishuangbanna, CDX (186), used for Tanpaibule 2020 (S077) 0.769 0.226 0.005 0
all five East Asian populations (1,008) 0.821 0.175 0.004 0
European (addendum 7, for comparison) 0.352 0.577 0.071 0

In East Asians rs7309123 G is the common allele (0.77 to 0.88) and Y238X is almost absent (0.2% to 1%), so the second parameter, the effect of the A-G haplotype against A-C, is estimated against a very different background from the European one. CDX is a proxy for the Thai: Tanpaibule’s controls carry G at 0.83 (addendum 16), CDX 0.77. The five-population table, Kinh and Japanese are in the file but no study uses them.

scripts/22_clec7a_second_parameter.R now maps the rows of S074 and S077 through these tables (the beta1 offset for C-G is kept) and all other rows through the European ones. Test: tests/testthat/test-haplotypes.R (the table is a frequency table, no C-C haplotype, G common).

2. What changes in the second parameter

analysis studies OR per A-G copy (90% interval) tau
primary: Schnetzke, Kalkanci, Sainz (European) 3 1.86 (1.26 to 2.63) 0.17
adding S074 and S077 with East Asian frequencies 5 1.28 (0.79 to 1.95) 0.49
S074 and S077 alone, East Asian frequencies 2 0.62 (0.35 to 1.15) 0.26
adding S074 and S077 with European frequencies (not valid; for comparison only) 5 1.36 (0.84 to 2.08) 0.46

The two East Asian studies do not agree with the three European ones in direction, and the disagreement is not small (output/clec7a_second_ancestry_heterogeneity.csv, fixed-effect combination within each group):

group studies log odds ratio per A-G copy (SE) Q within group
European 3 +0.645 (0.160) 0.18
East Asian 2 -0.547 (0.264) 0.004
difference, East Asian minus European -1.19 (0.31) z = -3.9, P = 0.0001

Across all five studies Cochran’s Q is 15.1 on 4 degrees of freedom (P = 0.0045, I-squared 74%). Against the pooled European estimate, Chen is z = -3.6 (P = 0.0004) and Tanpaibule z = -1.9 (P = 0.054), so Chen carries most of the conflict. The within-group agreement is good in both groups: the conflict is between ancestries (or between the two designs), not within them.

Layer gain over the baseline (2,000 draws, ceiling score, pooled-mean reading; the MCID is +0.00458 at 5% and +0.00160 at 20%):

second parameter gain at 5% gain at 20% worlds reaching the 20% MCID
estimated from the three European studies (primary) +0.00122 +0.00182 63%
estimated from all five studies (East Asian frequencies) +0.00077 +0.00128 28%
held at zero +0.00059 +0.00105 16%

With the realised score the same three rows are +0.00100, +0.00053 and +0.00042 at 5%, and 45%, 9% and 3% at 20%. Under the predictive reading (ceiling) the all-study row is +0.00122 and +0.00184 (59% at 20%) against +0.00150 and +0.00216 (72%) for the primary. No reading reaches the 5% MCID in more than 4% of worlds, as before. Outputs: output/clec7a_second_layer_summary.csv (new row “estimated from all ancestries”), output/clec7a_second_pooled.csv, output/clec7a_second_posterior_draws_all_ancestries.csv.

3. Is the opposite direction a strand or reference-group error? Chen 2019 and Tanpaibule 2020 re-read

Chen 2019 was read again from the supplied PDF (Curr Med Sci 39:906). Tanpaibule 2020 was read again from its open-access text (PMC7680473); the supplementary table with the assay details is not in that text.

Chen 2019 (S074), Chinese Han, 172 AML patients, pulmonary IFD (proven or probable) after induction chemotherapy. - Reference group. Table 4 lays out rs7309123 as G/G (reference, 27 of 108 with pulmonary IFD), C/G (21 of 59, OR 1.622), C/C (3 of 4, OR 9.000), C/G + C/C against G/G (24 of 63, OR 1.846, 0.945 to 3.606), C/C against the rest (7.532) and per C allele (1.919, 1.047 to 3.518). The Results and Discussion say that carriers of the rs7309123 C allele have the higher risk. The counts reproduce the printed odds ratios (the crude carrier odds ratio is 1.84, Fisher P = 0.084). The extraction reads each row in the right direction, as addendum 19 found. - Strand. The typed genotypes are G/G 108, C/G 59, C/C 4 (C = 0.196), and all eight SNPs are said to be in Hardy-Weinberg equilibrium. That is the forward-strand East Asian frequency of C (gnomAD 0.188, CHB 0.209), not the opposite-strand 0.81; the paper states no assay strand (KASPar). rs16910526 shows no variant carrier (171 of 172 homozygous for the common allele), as expected for East Asians. - Caveats that do not change the sign. The outcome is pulmonary IFD of any fungus, not aspergillosis; the comparison group is other AML patients; three of the four C/C patients had the outcome, so the estimate rests on very few people. The authors call their result “similar” to Sainz’s although Sainz’s risk allele is G and theirs is C, so they did not compare orientations.

Tanpaibule 2020 (S077), Thai, 357 patients with hematologic disease, proven or probable IA in 36. - Reference group. Table 2 sets C/C as the reference (2 of 10 with IA) against C/G (8 of 91, OR 0.311), G/G (23 of 228, 0.449) and G/G + C/G (31 of 319, OR 0.404, 0.068 to 2.404, adjusted for age group and high-risk hematologic disease). The paper does not name a risk allele for this SNP; its methods call the absence of the SNP “homozygous wild-type” and the table puts C/C first, so the direction is read from the table, not from the text. The counts agree with it: crude risk of IA is 20% in C/C, 8.8% in C/G and 10.1% in G/G (crude carrier odds ratio 0.43, Fisher P = 0.26). - Strand. G/G is 69% of controls (G = 0.83), against forward East Asian G 0.81 and opposite 0.19 (addendum 16); TaqMan assay, strand not stated. - Caveat. The reference group is 10 people. The interval is compatible with no effect and with the European effect (from the pooled European estimate z = -1.9).

The mapping is not the source of the sign. For the odds ratios the European estimate (+0.62 per A-G copy) would produce in these frequencies, the answer is 0.51 for Chen’s C-carriers against G/G (observed 1.85) and 2.86 for Tanpaibule’s G-carriers against C/C (observed 0.40). A per-copy effect of about -0.55 reproduces both (1.88 and 0.42). So the two studies do say that the C-bearing haplotype (A-C) carries the higher risk, and the mapping reads them that way.

Verdict. I found no strand error and no reference-group error in either study. In both, the extracted direction equals the printed one, the counts reproduce it, and the allele frequencies place the labels on the forward strand. This does not exclude a strand mislabelling inside a paper that gives no assay strand (the evidence is the allele frequency, which is strong for Chen, medium to high for Tanpaibule). What remains are four explanations that the data cannot separate: 1. noise from very small reference cells (4 C/C patients in Chen, 10 in Tanpaibule), in which case the East Asian estimate is imprecise and not truly opposite (only Tanpaibule alone is compatible with the European effect); 2. different outcomes (pulmonary IFD of any fungus in AML against IA in a mixed hematologic cohort); 3. ancestry-specific linkage: rs7309123 is intronic and probably tags a causal variant, and a tag SNP whose allele frequency is 0.43 in Europeans and 0.81 in East Asians can have its effect reversed (flip-flop) when the linkage differs; 4. a problem in the European studies’ orientation. This looks least likely: the European and Turkish cohorts that were read for direction (Sainz, Fischer 2016, Kalkanci) all show G (forward) carrying the risk, and Schnetzke’s mapped effect points the same way; their strand grades are A or B, although Sainz is low to medium. Fisher 2017’s rs7309123 row was not re-read for this question.

Decision D25

The primary estimate of the second CLEC7A parameter stays the European-only one (OR 1.86 per A-G copy, three studies), as in addenda 16 and 19. The estimate that adds the Thai and Chinese studies with East Asian frequencies (OR 1.28, tau 0.49) is a sensitivity analysis, reported next to it in every table that uses the second parameter. Reasons: - the five-study estimate averages two effects whose direction differs, with a heterogeneity (I-squared 74%) that a random-effects mean does not describe; - one per-copy effect of A-G against A-C is unlikely to transfer across ancestries with such different frequencies and linkage, and the layer is simulated in a cohort whose genotypes follow European frequencies (addendum 7); - the East Asian evidence is two studies, each resting on a reference cell of 4 (Chen’s C/C) or 10 (Tanpaibule’s C/C) patients, and one has a different outcome.

This is a change in how the evidence is used, not in the primary analysis; the primary numbers of addenda 16 to 20 are unchanged. If the primary analysis ever moves to a non-European cohort, the East Asian estimate becomes the relevant one and its imprecision (90% interval 0.35 to 1.15 for the two studies alone) must be carried in full.

4. The linkage check: rs3901533 and rs7309123 in the phased 1000 Genomes chromosomes

scripts/28_east_asian_haplotypes.R now also fetches rs3901533 (the second intronic SNP of Sainz 2012 and Chen 2019) and crosses its allele with the CLEC7A haplotypes on the phased chromosomes, East Asian from the script’s cache and European from script 04’s cache (data/rs3901533_linkage_eas.csv). Sainz labels the SNP G/T on the opposite strand: his risk allele T is the forward-strand A (Ensembl labels it A/C, forward).

population haplotype chromosomes rs3901533 C rs3901533 A
Chinese Han (CHB + CHS) A-G 664 77 587 (88%)
Chinese Han (CHB + CHS) A-C 166 97 (58%) 69
Thai proxy (CDX) A-G 286 31 255 (89%)
Thai proxy (CDX) A-C 84 57 (68%) 27
East Asian (all five) A-G 1,656 154 1,502 (91%)
East Asian (all five) A-C 352 215 (61%) 137
European (EUR) A-G 708 451 (64%) 257
European (EUR) A-C 1,162 1,011 (87%) 151

(East Asian chromosomes in the table: 1,008 genotyped at rs7309123, all of them genotyped at rs3901533 in this cache; European: 1,006 genotyped at both.) | European (EUR) | C-G | 142 | 62 | 80 |

The three observations:

  1. The two SNPs sit on different chromosomes in East Asians, in a pattern that reverses the tags. Forward A at rs3901533 sits on the rs7309123 G chromosome in 91% of the East Asian A-G chromosomes (88% in the Chinese Han, 89% in CDX); the LD of the two SNPs is r-squared 0.26, D’ -0.52 in East Asians (and r-squared 0.09, D’ -0.46 in Europeans), moderate, negative in D’. Chen typed both: his rs7309123 per-C-allele odds ratio is 1.919 and his rs3901533 per-G-allele odds ratio 2.201. Because the risk allele of each is the background allele of the other in this ancestry, the two contrasts are nearly independent (the shared-haplotype correlation of their log odds ratios is about 0.03, against 0.52 for two markers of one causal allele), and each is about what the other predicts. Chen’s two results therefore say the same thing: an effect on the rs3901533-A-carrying background, which in East Asians is the rs7309123 G chromosome, so the risk reads on C. Sainz’s own rs3901533 result (T/T against G/G 5.59, the risk on the forward A) is consistent in direction with an effect tagged by A; in Europeans the forward A sits on the A-G chromosome only 36% of the time, so the rs3901533 tag reads the risk more weakly there, as his per-allele odds ratio shows (1.39 against 1.75 for rs7309123).
  2. The European A-C reference haplotype carries the rs3901533 complement (87% C). So the European A-G against A-C comparison, which the second parameter estimates, is confounded by rs3901533 in the opposite direction from the East Asian one: in Europe the A-G chromosome tends to lack Sainz’s risk allele, in East Asia it tends to carry it.
  3. This is the flip-flop the addendum listed, and the two tag SNPs now show its mechanism. If the causal variant is nearer rs3901533 (an A/C SNP in intron 3, 12:10,124,484; rs7309123 is at 12:10,119,964, 4.5 kb away) and sits mainly on the A-bearing background, then the rs7309123 G allele tags it in East Asians (risk on G, against the reading above) and the rs7309123 C tags the reference; in Europeans the linkage is weaker and partly reversed. The observed signs match this: East Asian risk on C (the A-C chromosome, 61 to 68% rs3901533 C, is the background against which A-G carries the A), European risk on G.

The verdict of section 3 stands: the data cannot separate this from the small-cells explanation, and nothing in the table fixes the sign of the true effect. What the table adds is that the opposite directions are a coherent pattern expected from the linkage, not an error; it also warns that the pooled East Asian estimate is not a replication of the European one at the same variant.

Test: tests/testthat/test-haplotypes.R.

Not done

Zhao 2022’s strand (rs7309123 appears only in a donor-genotype screening table with no allele letters; it is a Chinese Han study and would enter the East Asian analysis if resolved); the supplementary table of Tanpaibule 2020 (assay details); an independent East Asian cohort to tell noise from a true reversal; a direct genotyping or imputation of the candidate causal variant near rs3901533.

Code and outputs: scripts/28_east_asian_haplotypes.R, scripts/22_clec7a_second_parameter.R, data/haplotype_frequencies_eas.csv, data/phased_1000G_EAS_genotypes.csv, data/rs3901533_phased_genotypes.csv, data/rs3901533_linkage_eas.csv, output/clec7a_second_*.csv (including the ancestry files), tests/testthat/test-haplotypes.R.


Addendum 22, 19 October 2026: the tertiary NRI comparison (D26)

Written after the tag. Nothing in D1 to D25 changes. The project description kept net reclassification improvement as a tertiary comparator only, because it is the metric behind the predecessor’s 22.5%. This addendum computes it.

Design (proposed)

  • NRI, exact over cells (R/nri.R, nri_exact()), in three forms: categorical at 5% (the decision threshold), three categories with cuts at 5% and 20%, and continuous (any change in predicted risk counts as a move). Reported with the net-benefit gain at 5% and the change in expected aROC, all under the same truth, on the base cohort with the refit baseline.
  • Scores, each against the baseline.
    1. The four-term panel, ceiling and realised (as script 16).
    2. The PTX3 h2 term alone (correct structure).
    3. A three-SNP score on real chromosomes: truth on h2, score adding the effect once per SNP (rs2305619 A, rs3816527 C, rs1840680 A) over the phased PTX3 diplotypes (ptx3_diplotype_grid()).
    4. The predecessor’s structure: the three SNPs drawn independently at their gnomAD NFE frequencies (0.482, 0.424, 0.481), with the effect in truth and score alike.
  • Effects. The predecessor’s per-SNP effects are not on record (only a homozygote OR of 15.2 for rs1840680). Every PTX3 structure therefore carries the pooled per-copy h2 effect, which isolates the linkage error. The draws are the same 2,000 as script 16 (pooled-mean reading, seed 6417). An effect grid traces NRI against the per-copy log OR from 0 to 1.6.
  • Not reproduced: the predecessor’s global allele frequency (rs2305619 0.36), its effect sizes, and the form of its NRI (categorical or continuous is not recorded).

Results

Median over draws (90% range); NRI in percent:

score NRI at 5% NRI, 5% and 20% continuous NRI gain at 5% aROC change
four-term panel, ceiling 2.6 (1.1 to 4.7) 10.0 (6.2 to 15.6) 31.4 (17.1 to 46.9) +0.0006 +0.012
four-term panel, realised 2.2 (0.6 to 3.9) 10.0 (6.6 to 13.4) 27.6 (11.3 to 42.3) +0.0004 +0.010
PTX3 h2 haplotype 0.9 (0.0 to 2.1) 4.8 (0.6 to 7.0) 13.3 (2.1 to 26.5) +0.00008 +0.004
PTX3 three SNPs, real chromosomes -1.3 (-3.6 to 0.7) 2.6 (0.2 to 4.6) 13.3 (2.1 to 26.5) -0.0004 -0.005
PTX3 three SNPs, independent 2.0 (0.0 to 4.7) 7.3 (1.5 to 15.9) 24.7 (4.1 to 46.9) +0.00035 +0.009

Per-copy odds ratio needed (effect grid): continuous NRI of 22.5%, 1.32 for the independent structure and 1.65 for h2; three-category NRI of 22.5%, 2.27 and 3.46; the 5% MCID, 2.89 for the independent structure and not reached by h2 within the grid (OR 4.95).

Reading

  • Continuous NRI of the predecessor’s size is compatible with no decision value. The four-term haplotype panel reaches 31% while its net-benefit gain is an eighth of the MCID. At the pooled effect the predecessor’s structure gives 25%, close to the reported 22.5%; that is consistency, not a reproduction, given what is not on record.
  • Linkage roughly doubles the apparent signal at the same per-copy effect (continuous NRI 25% against 13%) and more than quadruples the net-benefit gain (+0.00035 against +0.00008), because independent SNPs triple the true genetic variance.
  • The three-SNP score on real chromosomes is harmful (gain -0.0004, aROC -0.005, categorical NRI negative) but its continuous NRI is unchanged (13%): the continuous measure does not register the over-weighting.
  • Continuous NRI is unstable. For the correctly specified h2 term the event component is -41% and the non-event component +54%, because heterozygotes’ risk moves by a hair after recentring and any move counts; across draws the event component runs from -45% to +53%.

Code and outputs: R/nri.R, scripts/29_nri_comparison.R, tests/testthat/test-nri.R, output/nri_comparison.csv, output/nri_effect_grid.csv.


Addendum 23, 19 October 2026 (written up 20 October): a polygenic score benchmark

Written after the tag. No decision changes. The code, outputs and tests were committed on 19 October (afad68c); this entry was written on 20 October from them, and adds the profile-preserving results of addendum 24. It is a benchmark, not an estimate: no polygenic score for invasive mould disease exists, and to our knowledge no genome-wide association study of invasive aspergillosis has been published (the manuscript’s Discussion). The question is what such a score would have to achieve.

Question

The four- and five-term panels fall well short of the 5% MCID, and the Aim 4 sweep says a panel of identical loci would need 9 to 12 loci of odds ratio 2.0. A polygenic score summarises many small effects. How strong would it have to be to reach the MCID on the refit baseline, how accurate would its weights have to be, and how large a discovery study would give that accuracy?

Model (R/prs_benchmark.R)

  • Score and truth. A polygenic score G ~ N(0, 1), independent of the clinical profile (an assumption, as for the panel), with true effect β on the log-odds scale per standard deviation (odds ratio per SD = exp β). True logit = baseline logit + β G + a, with a holding the prevalence (the global intercept of D5).
  • Ceiling. The score knows G and β.
  • Realised. The score is an estimate S ~ N(0, 1) with correlation ρ with G, so G = ρ S + √(1 − ρ²) U. It carries the weight β ρ (the regression of G on S), recentred to the baseline mean risk: the best linear use of an imperfect score, recalibrated in the target cohort, which is optimistic.
  • Computation. Exact over the 128 clinical profiles, by equal-probability normal quantile nodes (400 for S and 64 for the part of G that S does not capture).
  • Discovery size. For M_e independent causal loci of equal small effect, each estimated by logistic regression in n subjects with case fraction π, ρ² = n π (1 − π) β² / (n π (1 − π) β² + M_e) (Daetwyler et al. 2008, written on the log-odds scale). Loci are taken as known in advance, so there is no selection and no winner’s curse (optimistic). M_e = 1,000, 10,000 and 60,000. The cases for a balanced design are 2 n π (1 − π). For comparison, a discovery study the size of Fisher 2017 (2,609 recipients, 483 cases) gives the accuracy in the last column of the table below.

Results (script 30; global-intercept truth, as committed)

Ceiling (true weights). The odds ratio per SD that reaches the MCID is 3.61 at 5% and 1.84 at 20%. At the first, the score alone has an aROC of 0.77 (the combined score 0.905); at the second, 0.64 (0.875). Gain as a share of the MCID, by odds ratio per SD:

OR per SD 1.5 2.0 3.0 4.0
gain at 5%, share of the MCID 10% 31% 75% 115%
gain at 20%, share of the MCID 51% 126% 276% 396%
aROC of the score alone 0.60 0.66 0.74 0.79

Accuracy and discovery size with estimated weights. Below an odds ratio of 3.6 per SD the 5% MCID cannot be reached at any accuracy. Cases needed for a balanced discovery study, by the number of effective independent loci (accuracy ρ needed in the third column; the last column is the accuracy a Fisher-sized study would give):

threshold OR per SD ρ needed cases, M_e = 1,000 10,000 60,000 ρ of a Fisher-sized study (1,000 / 10,000 / 60,000)
5% 4 0.93 6,578 65,776 394,657 0.66 / 0.27 / 0.11
5% 6 0.74 742 7,422 44,530 0.75 / 0.33 / 0.14
20% 2 0.89 16,276 162,760 976,563 0.40 / 0.14 / 0.06
20% 3 0.63 1,073 10,728 64,370 0.57 / 0.21 / 0.09
20% 4 0.55 442 4,415 26,492 0.66 / 0.27 / 0.11
20% 6 0.49 196 1,956 11,736 0.75 / 0.33 / 0.14

Under the profile-preserving truth (addendum 24, script 31)

The same quantities under the three comparisons (marginal equals current throughout, so only current and profile are shown):

current profile
OR per SD needed with true weights, 5% / 20% 3.61 / 1.84 4.16 / 1.83
5%, OR 4: accuracy needed; cases at M_e = 10,000 0.93; 65,289 not reachable (needs 4.16)
5%, OR 5 0.81; 14,524 0.91; 39,011
5%, OR 6 0.74; 7,340 0.85; 16,255
20%, OR 3 0.62; 10,600 0.61; 9,988
20%, OR 6 0.48; 1,914 0.47; 1,740

At 5% the profile-preserving truth makes the score harder: the odds ratio per SD needed with true weights rises from 3.61 to 4.16, and with estimated weights the discovery cases needed rise by about 120% (OR 6) to 170% (OR 5). At 20% it is slightly easier (5% to 9% fewer cases). Script 31’s “current” column is not script 30’s: the accuracy needed differs by up to 0.004 (2% to 5% in cases), for the reason below.

Reading

  • At the 5% threshold a polygenic score would need to be strong: an odds ratio of 3.6 per SD (4.2 under the profile-preserving truth), a score-alone aROC of about 0.77, and a large discovery study. With 10,000 effective loci a balanced study needs about 7,400 cases at OR 6 and about 66,000 at OR 4 (which the profile-preserving truth makes unreachable), against 483 cases in Fisher 2017’s study.
  • At 20% the bar is much lower (OR 1.8 per SD with true weights), and a Fisher-sized study gives enough accuracy only if the trait is very polygenic in the sense of 1,000 effective loci and the odds ratio is 4 or more. This is secondary, as elsewhere.
  • Every assumption is optimistic or untested: independence from the clinical profile, loci known in advance with no winner’s curse, a Gaussian score, recalibration in the target cohort, and accuracy measured in the population in which the weights were estimated (it does not transfer across ancestries). Whether a score of this strength could exist for IMD is not assessed.
  • No score is in the manuscript. The benchmark is not in the Draft manuscript; it would sit with Aim 4.

A defect in script 30’s truth, found while writing this up

Script 30 takes the shift that holds the prevalence from 400 nodes of the score (prs_shift) but evaluates the true risk on 400 × 64 nodes. The 64-node part has variance 0.980, not 1, so the truth it uses holds the prevalence short of the target: the achieved prevalence is 0.043% to 1.0% below 3.261% (for example 1.0% below at OR 6 per SD and ρ = 0.5, 0.18% below at OR 2 and ρ = 0.5). The error grows with the effect and shrinks with ρ. It changes the accuracy needed by up to 0.004 (2% to 5% in cases needed) and the committed ceiling not at all (that has no 64-node part). Script 31 recentres exactly on the grid it uses. The committed outputs of script 30 are left as they were; read the comparison between truths from script 31, and treat script 30’s cases-needed as accurate to a few per cent. Script 31 now checks that its current comparison agrees with script 30 (the ceiling exactly, the accuracy needed to 0.01).

Not done

A polygenic score with a clinical-profile interaction, or with accuracy that varies with ancestry; locus selection and the winner’s curse; the polygenic benchmark under the sampling variability of a study of this size; a figure (output/prs_gain_by_accuracy.csv holds the data for one); and correcting script 30’s quadrature.

Code and outputs: R/prs_benchmark.R, scripts/30_prs_benchmark.R (and its tests, tests/testthat/test-prs.R), output/prs_ceiling.csv, output/prs_benchmark_summary.csv, output/prs_gain_by_accuracy.csv, output/prs_discovery_size.csv; under the three comparisons, scripts/31_baseline_calibration_check.R and output/calibration_check_prs.csv.


Addendum 24, 20 October 2026: the calibration check of the genetic layer; the profile-preserving truth becomes primary (D27)

Written after the tag, and after the genetic results of addenda 11 to 22 were known. It changes D5 for the primary analysis. No other decision changes, and the MCID is unchanged. Addendum 23 (the polygenic score benchmark, R/prs_benchmark.R, script 30) is written up above, including its results under the three comparisons below (output/calibration_check_prs.csv).

The problem

D5 added the genetic effect to the clinical logit and moved one global intercept to hold the overall prevalence: true logit = η_X + β·g + a. Within a clinical profile X the risk averaged over genotype, m(X) = Σ_g π_g expit(η_X + β·g + a), is not expit(η_X) (Jensen’s inequality). The clinical score is therefore miscalibrated within profiles under the simulated truth even though prevalence is right, and some of the gain from adding genetics could be the correction of that induced miscalibration, not genetic information. The check was written (R/calibration_check.R, script 31) but had not been run, and nothing in the manuscript used it. It was raised in external review before submission.

D27. Design (fixed before the results below were read; run order: 31, 32, 33, 34)

Three comparisons, each on profile × genotype cells (exact):

comparison truth clinical comparator
current global intercept (D5) expit(η_X)
marginal global intercept m(X), the best clinical-only rule under that truth
profile an intercept a_X per profile so that Σ_g π_g expit(η_X + β·g + a_X) = expit(η_X); conditional effects unchanged expit(η_X), now exactly calibrated

Genetic scores are built the same way under each (a global shift to the clinical mean risk under current and marginal; a shift per profile under profile, over the simulated sample for scores with estimated weights). Applied to: the four- and five-term panels (2,000 draws, both readings), the Aim 4 exact sweep (4,000 architectures), the Aim 4 realised-score sweep (2,400 architectures × precisions, 12 replicates, the seeds of script 25), the NRI comparison (script 29’s scenarios and effect grid) and the polygenic score benchmark. Not repeated here (they were still on the global-intercept truth when this addendum was written; addenda 25 and 26 reran them): the sampling-variability study, the correlation ensemble, the Shapley attribution, Aim 3b, the donor stratum, the sensitivity cohorts, the five-term robustness analyses, and the all-ancestry variant of the second CLEC7A parameter.

Which comparison estimates the clinical question. The question is whether adding genotype to a clinical score that is already calibrated changes decisions for patients stratified by it. That is profile. Current handicaps the clinical score by construction. Marginal removes the handicap but keeps the truth, so current − marginal is the part of the gain that corrects induced miscalibration, and marginal − profile is the effect of the truth being a different simulated population.

Decision (D27). The profile-preserving truth, with comparator expit(η_X), is the primary analysis and the source of the manuscript’s headline numbers. The global-intercept truth is a sensitivity analysis. This was decided after the global-intercept results were known; it was not tuned to them (the construction was fixed by the requirement that the clinical score stay calibrated in every profile), and every number below is reported under both. The change is disclosed in the manuscript’s Methods.

Checks

  • The current comparison reproduces the committed outputs: genetic_layer_summary.csv and clec7a_second_layer_summary.csv (gain, extra true cases, flagged share and aROC; largest difference 6e-18 in gain), aim4_sweep.csv, aim4_realised_sweep.csv (median gain and share reaching the MCID), nri_comparison.csv and nri_effect_grid.csv. Each script stops if it does not.
  • The polygenic score benchmark agrees with script 30 for the ceiling (odds ratio per SD needed, exactly) but not for the accuracy needed with estimated weights (up to 0.004 apart), because script 30’s truth holds prevalence only to 0.2% to 1.0% (addendum 23).
  • Under the profile truth the clinical score’s calibration slope is 1 and its largest error in a profile is 1e-16; under the global truth the slope is 0.98 and the largest error 0.023 (four terms, pooled-mean reading), and as low as 0.55 in the most extreme architectures.
  • Under the profile truth the clinical score’s true positives are the same in every draw (0.022884 at 5%), and 0.2 times them is exactly the MCID in use (+0.0045768 at 5%, +0.0015993 at 20%). Under the global truth they vary by draw (0.0182 to 0.0229 at 5%), so the fixed MCID matches the clinical true positives only under the profile truth.

Results

Gains at 5% and 20% are medians over the 2,000 draws (pooled-mean reading, ceiling score; × 1,000 net benefit).

current marginal profile
four terms: gain at 5% (90% range) 0.587 (0.153 to 1.367) 0.587 0.561 (0.147 to 1.269)
four terms: draws reaching the MCID, 5% / 20% 0% / 16.0% 0% / 16.0% 0% / 16.7%
five terms: gain at 5% 1.22 1.22 1.15
five terms: draws reaching the MCID, 5% / 20% 0.1% / 63.3% 0.1% / 63.3% 0% / 64.1%
Aim 4 exact: architectures reaching the MCID, 5% / 20% 45.7% / 77.0% 45.7% / 77.0% 39.7% / 77.2%
Aim 4 exact: verdicts changed against current, 5% / 20% 0 / 0 0 / 0 241 lost / 6 gained
frontier, 5%, frequency 0.3: fewest loci at OR 1.8 / 2.0 / 3.0 11 / 8 / 3 11 / 8 / 3 13 / 10 / 4
realised weights, error 0.10: architectures reaching the MCID at 5% 28.7% 28.7% 23.3%
realised weights, error 0.40: fewest loci at OR 1.8, 5%, frequency 0.3 20 20 none within 20
polygenic score: OR per SD needed, 5% / 20% 3.61 / 1.84 3.61 / 1.84 4.16 / 1.83
  • Induced miscalibration did not produce the gains. Marginal equals current in every analysis except continuous NRI. In the panels the marginal rule beat expit(η_X) in 0.05% to 34% of draws, by at most +0.00027 in net benefit in any draw (95th percentile of its share of the ceiling gain at most 0.1%). In the architecture sweeps it changed no verdict.
  • The truth itself matters at 5%. Profile lowers the panels’ gains by 4.6% (four terms) and 5.9% (five terms) at 5% and leaves them within 2% at 20%. In the exact sweep 241 architectures lose the 5% verdict (none gain), and the frontier moves out by two to three loci at OR 2.0 (for example 9 to 12 at frequency 0.2). The realised sweep behaves the same way: at 5%, verdicts lost by weight error 0.05 / 0.10 / 0.20 / 0.40 are 29 / 32 / 34 / 26 of 600; at 20% none are lost and 0 / 2 / 1 / 14 are gained.
  • Retained gain with estimated weights is unchanged (median 99% / 96% / 89% / 58% of the ceiling gain at weight error 0.05 / 0.10 / 0.20 / 0.40 at 5%, over architectures with a ceiling gain above +0.001; 100% / 96% / 89% / 58% under current). The share of architectures that met the MCID with exact weights and no longer do is 12% to 36% at weight errors 0.20 and 0.40.
  • No architecture with OR 1.5 or less reaches the 5% MCID under profile. Under current one did (OR 1.5, frequency 0.45, 20 loci, gain +0.004584 against +0.004577), so the earlier statement that none did was off by one cell.
  • NRI (median over draws; four-term panel, ceiling): categorical NRI at 5% 2.4% (current 2.6%), three-category 10.2% (10.0%), continuous 34.2% (31.4%), net-benefit gain +0.00056 (+0.00059), aROC +0.012 (+0.012). For the PTX3 h2 term the continuous NRI is 34.2% under profile, 33.9% under marginal and 13.3% under current, with the same net-benefit gain (+0.00008). Crossing points of the per-copy OR under profile: continuous NRI of 22.5%, 1.32 (independent SNPs) and 1.17 (h2); three-category NRI of 22.5%, 2.32 and 3.67; the 5% MCID, 3.32 and not reached by OR 4.95.

Reading

  • The primary conclusion is unchanged: at 5% the four- and five-term panels gain about an eighth (four terms) to a quarter (five terms) of the MCID under either truth, and no draw reaches it in the pooled-mean reading.
  • The 5% architecture frontier in addenda 16 and 17 was optimistic. The numbers in the manuscript’s architecture section are now the profile ones; the earlier ones are kept as the sensitivity analysis.
  • Continuous NRI is not a reliable measure here. Its value for a single-term score depends on the construction of the truth in a way net benefit does not. For h2 the mean dosage is 0.96, so a heterozygote sits almost exactly at its profile’s mean risk and the direction of its shift is decided by curvature. Between current and marginal only 0.9% of the cohort changes direction (23.2% up against 24.1%) but the continuous NRI goes from 0.13 to 0.33, so those cells carry a large share of the events. Which profiles they belong to was not examined. The earlier statement that linkage “doubles” the continuous NRI at the same per-copy effect (25% against 13%) does not hold under profile (25% against 34%); the net-benefit statement does (+0.00033 against +0.00008).

Defects found and fixed along the way

  • calibration_fit() returned an error for risks that round to exactly 1 (a genetic logit above about 37 in the largest architectures: 26 of 4,000 sweep cells). It now clamps probabilities at 1e-12. Only the calibration diagnostics were affected, not the gains.
  • The reproduction check in script 31 used an invalid idiom and had never run; it is rewritten and extended.
  • profile_shifts() could return NaN when every risk in a profile saturates; the derivative is now floored.
  • start_workers() now sets one BLAS/OpenMP thread per worker. Workers had started one thread per core, which oversubscribed the machine (load average above 200 on 16 cores) and stalled the first runs.
  • The Aim 4 frontier is slightly non-monotone in risk-allele frequency near 0.5, under every comparison. The gain itself peaks at a frequency of about 0.45 (median over architectures with a gain above +0.001; the peak is below 0.5 in 95% to 97% of them) and is lower at 0.5, so the fewest loci that reach the MCID can rise by one at 0.5 (current, 5%: OR 2.9 needs 3 loci at 0.4 and 0.45 and 4 at 0.5; profile, 20%: OR 2.4 needs 1 locus at 0.2 to 0.3 and 2 from 0.35). The cause was not established; an untested possibility is that the allele-count distribution is right-skewed below 0.5, which puts more weight in the upper tail that the threshold selects. (An earlier version of this addendum described a jump from 4 to 13 loci at frequency 0.5. That was an error in a pivot table I built, which labelled one odds ratio’s values with another’s frequencies; the frontier file is correct.)

Not done

  • The analyses listed under D27 as not repeated: done in addenda 25 and 26.
  • Other forms of interaction between genotype and clinical profile than a constant logit-scale effect.
  • The realised-score frontier under the all-ancestry second parameter.

Code and outputs: R/calibration_check.R, scripts/31_baseline_calibration_check.R (panels, artefact, Aim 4 exact sweep, PRS), scripts/32_calibration_check_realised.R, scripts/33_calibration_check_nri.R, scripts/34_calibration_check_figures.R, tests/testthat/test-calibration-check.R; output/calibration_check_{layer,artefact,aim4,aim4_sweep,aim4_frontier,prs, realised_sweep,realised_frontier,realised_summary,realised_check,nri,nri_grid,headline}.csv; output/figures/fig_headline_profile.png, aim4_sweep_5pct_profile.png, aim4_sweep_20pct_profile.png.


Addendum 25, 20 October 2026: the secondary analyses rerun under the profile-preserving truth

Written after addendum 24, with the profile and global results of the panels already known. D27 stands and no decision changes; this removes the exception in addendum 24 (the sampling, ensemble, attribution, Aim 3b, donor and robustness analyses were still on the global-intercept truth). Nothing was tuned: the same seeds, posterior draws, cohorts and scores as the global runs.

What was done

  • A scheme switch (R/genetic_layer.R, R/aim3b.R). genetic_scheme() reads the environment variable PROSE_SCHEME ("global" by default, or "profile"), so worker processes inherit it; every function that builds a truth or a score takes it as its default. Under "profile" the shift is one per clinical profile (profile_cell_shift(), vectorised Newton steps on cells, which also works on the trimmed stratum cells of Aim 3b), and patient-level simulators apply it by each individual’s profile (sh_at()). Under "global" the code path is the old one.
  • What the profile truth holds, by analysis. Panels, sampling, ensemble, attribution and robustness: within each profile the truth and each score hold the clinical score’s risk. Aim 3b: the same inside each neutropenia stratum, with the stratum’s own effects. Donor stratum: the truth holds the risk including the stratum’s recalibration offset (the baseline score has no allogeneic item and under-predicts there, which is a fact about the stratum, not an artefact of the genetic layer), and the scores hold the baseline’s risk.
  • Scripts 17 (ensemble, attribution, sampling), 18 (ensemble with sampling), 19 (sensitivity cohorts), 20 (donor stratum), 21 (Aim 3b, four and five terms), 24 (five-term attribution) and 26 (five-term robustness) write files ending in _profile when the scheme is set (scheme_suffix()); script 27 draws the Aim 3b and attribution figures from them. Script 17 now uses start_workers() (one BLAS thread per worker). sweep_cell_realised() stops under the profile scheme (use calibration_gains_realised()). Run with Sys.setenv(PROSE_SCHEME = "profile") or withr::with_envvar(). The global files are unchanged and are the sensitivity analysis. The per-draw _profile files are gitignored like the global ones.

Checks

  • The default is unchanged. The existing tests for the genetic layer (169 expectations), Aim 3b (67), Aim 4, the calibration check, NRI and the PRS benchmark pass without edits. New tests (tests/testthat/test-profile-scheme.R, 38 expectations): the profile truth and both scores hold each profile’s risk, including on trimmed cells, with empty profiles and with an offset; no effect gives the baseline under both schemes; Shapley contributions sum to the gain of the full score under both schemes; multi_score_nb() agrees with the engine under both; a simulated study under the profile scheme averages to the exact gain; the scheme is read from the environment and rejects anything else.
  • Two independent implementations agree. The cell-level code agrees with the matrix implementation of calibration_check.R on the cell risks (tests), and on 40 real posterior draws of the four-term panel, under both schemes, both thresholds, the ceiling and the realised score, the net-benefit gains agree to 1e-17.
  • The reruns agree with script 31 where they overlap. Script 17’s Shapley totals under the profile scheme (+0.00056 and +0.00040 at 5%, pooled-mean reading) are script 31’s panel gains. The global columns in the table below are the committed global files and reproduce the numbers the manuscript carried before this addendum.
  • Cost. The profile scheme costs 0.7 to 1.3 times the global one per call. Runs (15 workers, one BLAS thread each): script 17 2.8 min, 18 1.5, 19 6.4, 20 3.1, 21 2.5 (four terms) and 3.1 (five), 24 4.8, 26 6.3 per setting.

Results

analysis quantity global profile
sampling variability SD of the observed gain at 5%, range over runs 0.00064 to 0.00131 0.00064 to 0.00116
fixed medians: mean gain at 5% (SD); share above zero +0.00039 (0.00064); 72% +0.00038 (0.00064); 71%
drawn effects: share above zero; share reaching the MCID, at most 69% to 82%; 1.6% 67% to 82%; 1.1%
effects at the 95th percentile, ceiling: reaching the 5% MCID 0.95% 0.45%
correlation ensemble largest difference in median gain; between-member SD 0.00016; 0.00007 to 0.00028 0.00016; 0.00007 to 0.00028
sensitivity cohorts ceiling gain at 5%, pooled mean; most draws reaching the MCID +0.00063 to +0.00064; 1.8% +0.00060 to +0.00062; 1.3%
attribution, four terms CD209 / PTX3 / TLR4 / CLEC7A 51.7 / 22.6 / 19.0 / 6.7% 51.4 / 22.6 / 19.0 / 7.0%
attribution, five terms CLEC7A (of it A-G) / CD209 / PTX3 / TLR4 49.7 (45.9) / 27.5 / 12.8 / 10.0% 50.9 (47.0) / 26.9 / 12.4 / 9.8%
robustness CLEC7A share, range; largest contributor in 44.8% to 52.8%; 54% to 69% of draws 44.8% to 53.3%; 54% to 70%
Aim 3b, homogeneous gain per admission at 5%, neutropenic against not +0.00170 against +0.00015 +0.00160 against +0.00015
neutropenic share of the whole-cohort gain, 5% / 20% 81% / 96% (five terms 83% / 95%) 80% / 95% (five terms 82% / 95%)
sensitivity settings, five terms, 5% 78% to 84% 77% to 83%
Aim 3b, all of the effect in non-neutropenic oracle gain at 5%; share of draws reaching the MCID, four terms +0.00356; 18% +0.00314; 2%
the same, five terms +0.00443; 42% +0.00383; 6%
Aim 3b, H_F truth common score against oracle at 5% +0.00047 against +0.00081 +0.00041 against +0.00075
Aim 3b, Brunel’s stratum effects common score at 5%, four / five terms −0.00016 / −0.00090 −0.00016 / −0.00086
interaction test, five terms power: all in neutropenic / ratio 4 / Brunel-sized; false positives 90% / 62% / ≥ 99.9%; 5.1% 89% / 60% / ≥ 99.7%; 5.0%
interaction test, four terms power: all in neutropenic / ratio 4 / Brunel-sized 59% / 34% / 95% to 96% 58% / 32% / 94% to 96%
donor stratum (data) change in true cases per 1,000 allo admissions at 5% +0.4 to +1.4 −0.1 to +1.3
at 20%; whole-cohort gain at 5%, at most +14 to +28; +0.00008 +14 to +27; +0.00007

Reading

  • No conclusion changes. The attribution, the neutropenia pattern, the power of the interaction test, the sampling variability and the donor result are within a few per cent of the global-intercept values.
  • The one real difference is a scenario, not the conclusion. With all of the effect in non-neutropenic admissions the oracle score’s gain falls by 12% (four terms) to 14% (five), and the share of draws reaching the 5% MCID falls from 18% to 2% (four terms) and from 42% to 6% (five). The manuscript’s earlier statement that the MCID “came within reach” in that scenario is softened to “came nearest”. Why the global truth flatters that scenario is explained in addendum 26.
  • Donor stratum: in the predictive reading the median change in true cases at 5% is slightly negative (−0.15 per 1,000) while net benefit is positive: the score trades some true positives for fewer false positives. It is a median over draws; its spread was not examined.
  • A typo in the manuscript is corrected. It said CLEC7A was the largest contributor “in 64% to 69% of draws”; the data (global and profile) give 54% to 69% and 54% to 70%.

Not done

The patient-level engine check of script 16 was not repeated under the profile scheme (a unit test covers it). The all-ancestry variant of the second CLEC7A parameter (script 22) and the reason the global truth flatters the “all in non-neutropenic” scenario were left open here and are done in addendum 26.

Code and outputs: R/genetic_layer.R, R/aim3b.R, R/aim4_sweep.R, scripts 17 to 21, 24, 26 and 27, tests/testthat/test-profile-scheme.R; output/ {genetic_ensemble,genetic_attribution,genetic_sampling,genetic_ensemble_sampling}_summary_profile.csv, genetic_sensitivity_{layer,attribution,sampling}_{summary,published_4078,published_4127,refit_4127}_profile.csv, genetic_donor_{stratum_summary,baseline_stratum,sampling_summary}_profile.csv, aim3b_{layer,interaction}_summary{,_second_clec7a}_profile.csv, genetic_attribution_second_clec7a_summary_profile.csv, robust5_{aim3b,attribution}_{summary,published_4078,published_4127,refit_4127,ensemble}_profile.csv, output/figures/fig_{aim3b_gain,aim3b_power,attribution}_profile.png.


Addendum 26, 20 October 2026: why the global intercept flatters one Aim 3b scenario, and the all-ancestry CLEC7A variant under the profile truth

Written after addendum 25. No decision changes; D27 stands. Two loose ends of addendum 25: the reason the global truth made the scenario with all of the effect in non-neutropenic admissions look so much better, and the one analysis (script 22’s all-ancestry variant) still on the global truth.

1. Why the global intercept flatters “all of the effect in non-neutropenic admissions”

What the scenario is. The modification ratio r = 0 puts the whole pooled effect into the non-neutropenic stratum (NN), scaled so that the event-weighted average stays at the pooled effect: the per-copy effect there is β / (1 − w) with w = 0.797, about 4.9 times the pooled one (log OR per copy PTX3 1.48, CLEC7A −0.84, TLR4 1.81, CD209 2.90, against 0.30, −0.17, 0.37, 0.59). The NN stratum is the low-risk one (72% of admissions, 20% of the events).

Hypothesis tested and refuted: the gain is the correction of the clinical score’s induced miscalibration. Under the global truth the clinical score is badly miscalibrated inside NN (calibration slope 0.77, a profile out by 0.22 in risk), so the genetic score might be credited for fixing it. The test is the one of addendum 24: the same truth against the best clinical-only rule m(X). Whole-cohort ceiling gain at 5%, per 1,000 admissions, at the pooled estimates:

global truth, against the clinical score global truth, against m(X) profile truth
all in non-neutropenic 3.05 3.01 2.73
homogeneous 0.423 0.423 0.400
all in neutropenic 0.585 0.585 0.548

The comparator accounts for 0.05 of the 0.32 difference (1.5%). Only 0.8% of the stratum’s weight is where the clinical score and m(X) fall on different sides of 5%: the miscalibration is large in size but mostly in profiles far from the threshold.

What does explain it: the truth is a different population. Per 1,000 non-neutropenic admissions at 5% (net benefit; true positives):

clinical score m(X) genetic score (truth)
global truth 0.205 (1.19) 0.269 (0.84) 4.465 (5.92)
profile truth 0.989 (1.93) 0.989 (1.93) 4.794 (6.19)

The genetic score does slightly worse under the global truth. The gain is larger because the clinical rules do far worse in that world: even the best clinical-only rule reaches 0.27 against 0.99. One intercept for the stratum (−4.17 logits, to offset a very large effect) cannot hold each profile’s risk. Because the effect is so large, the convexity of the logistic function raises the true mean risk of the lowest-risk profiles above the clinical score’s (profiles 1 and 2, clinical risk 0.37% and 0.79%, 78% of the stratum: true mean risk 29% and 14% higher, and a larger share of carriers above 5%, for example 3.0% against 1.9% in profile 2), and the concavity lowers it in the highest-risk profiles (for example 0.39 clinical against 0.17 true). The clinical gradient across profiles is flattened, so the clinical score loses value and the genetic score, which sorts carriers, gains relative to it. Those two profiles carry 0.43 of the 0.455 per 1,000 difference in gain (94%); all profiles with a clinical risk below 5% together carry 71%, the profiles between 2% and 5% offsetting part of it.

Why an 11% to 12% difference in the median became 18% against 2% of draws. The MCID sits in the upper tail of the draws. Four terms: it is at 0.87 of the 95th percentile of the draws under the global truth (18% reach it) and at 1.03 of it under the profile truth (2%); five terms: 1.03 of the median against 1.20 (42% against 6%). A homogeneous effect, with far smaller effects and a median gain an eighth of the MCID, is unaffected (0% in both). The 12% fall in the median (four terms) is 5% to 8% for the other scenarios.

Reading. The profile truth is the construction that keeps the observed clinical gradient; the global one distorts it, and the larger the effect put into a low-risk stratum the larger the distortion. That is the reason to prefer the profile truth for this scenario, and it also says that the scenario’s earlier “came within reach” was a product of the construction. Not examined: whether other scenarios would show the same at effects of this size; the analysis used the pooled point estimates and the committed draw summaries, not new draws.

2. The all-ancestry variant of the second CLEC7A parameter under the profile truth

Script 22 now takes PROSE_SCHEME=profile; it then reruns the layer only (the evidence files do not depend on the truth and were verified unchanged, all seven byte for byte) and writes output/clec7a_second_layer_summary_profile.csv. Its “estimated” rows use the draws of script 31’s five-term panel and equal its profile rows (largest difference 1e-17); the script stops if they do not.

ceiling score, pooled-mean reading global profile
all-ancestry estimate: gain at 5% +0.00077 +0.00073
all-ancestry estimate: share of draws reaching the 20% MCID 28% 30%
all-ancestry estimate, predictive reading: share reaching the 5% MCID 4.0% 2.1%
ratio of the all-ancestry to the European gain at 5% 0.63 0.64

No conclusion changes. The headline figure under the profile truth (fig_headline_profile.png) now has the all-ancestry panel as the global one did. Every analysis in the manuscript is now on the profile-preserving truth.

Not done

The patient-level engine check of script 16 under the profile scheme (a unit test covers it); new draws for the investigation in part 1. Other scenarios at effects as large as the one that exposed the construction: done in addendum 27.

Code and outputs: scripts/22_clec7a_second_parameter.R (the scheme switch and gate), scripts/34_calibration_check_figures.R (the all-ancestry panel), output/clec7a_second_layer_summary_profile.csv, output/figures/fig_headline_profile.png. The investigation in part 1 was run interactively with the cell-level engine (R/genetic_layer.R, R/aim3b.R) on the NN stratum’s cells; scripts/36_aim3b_scheme_comparison.R (addendum 27) reproduces its headline numbers and extends them to the other scenarios.


Addendum 27, 20 October 2026: does the global intercept distort the other Aim 3b scenarios at effects as large?

Written after addendum 26. No decision changes. Addendum 26 showed that the global intercept flatters the scenario with all of the effect in non-neutropenic admissions because that scenario puts a per-copy effect about 4.9 times the pooled one into the low-risk stratum. This asks whether the other scenarios would be distorted too at effects of that size (scripts/36_aim3b_scheme_comparison.R, which reproduces the interactive run exactly). It is a stress test: a log odds ratio of 2.9 per copy for CD209 is not credible, and the realised score was not examined.

Design

For each scenario, the whole-cohort ceiling gain at 5% under the global truth against the clinical score and against the best clinical-only rule m(X), and under the profile truth. A: the pooled effect times 1, 2, 3 or 4.9 in the non-neutropenic stratum, the neutropenic stratum, or both (pooled point estimates). B: the six scenarios of script 21 as in the paper and scaled so the largest stratum effect is 4.9 times the pooled one (the Brunel-estimate stratum fractions are those script 21 prints, N −0.21 and NN 1.87). C: the same with 200 posterior draws (pooled-mean reading): median gain and the share of draws reaching the 5% MCID.

Results

A. Placement and size (gain at 5%, per 1,000 admissions, pooled estimates; the profile column’s difference from the global one in brackets):

effect in × pooled global, against the clinical score global, against m(X) profile
non-neutropenic 1 0.079 0.079 0.079 (−1%)
2 0.420 0.420 0.407 (−3%)
3 1.188 1.188 1.123 (−5%)
4.9 3.029 2.984 2.706 (−11%)
neutropenic 1 0.344 0.344 0.321 (−7%)
2 1.595 1.595 1.439 (−10%)
3 3.508 3.496 3.028 (−14%)
4.9 7.265 6.585 5.364 (−26%)
both 1 0.423 0.423 0.400 (−5%)
2 2.014 2.014 1.846 (−8%)
3 4.696 4.684 4.151 (−12%)
4.9 10.293 9.569 8.070 (−22%)

B and C. The six scenarios (200 draws, median gain per 1,000 and the share of draws reaching the MCID of 4.58 per 1,000; global, then profile):

scenario as in the paper: median gain, change share reaching the MCID scaled to 4.9×: median gain, change share reaching the MCID
all in neutropenic (H_F only) 0.81, 0.74 (−8%) 0%, 0% 8.44, 6.07 (−28%) 92%, 85%
ratio 4 0.71, 0.66 (−8%) 0%, 0% 8.59, 6.24 (−27%) 93%, 87%
homogeneous 0.59, 0.56 (−5%) 0%, 0% 12.03, 9.20 (−24%) 97%, 95%
ratio 1/4 (Brunel direction) 1.16, 1.10 (−5%) 0.5%, 0% 4.30, 3.84 (−11%) 45%, 31%
all in non-neutropenic 3.58, 3.15 (−12%) 21%, 2% 3.56, 3.13 (−12%) 20%, 2%
Brunel’s stratum effects 0.49, 0.47 (−3%) 0%, 0% 3.63, 3.20 (−12%) 23%, 5%

The largest stratum effect, as a multiple of the pooled one, in the scenarios as in the paper: 1.25 (H_F only), 1.18 (ratio 4), 1.00 (homogeneous), 2.49 (Brunel direction), 4.93 (all in non-neutropenic), 1.87 (Brunel’s estimate).

Reading

  • Yes: the distortion grows with the size of the effect in every placement. At the pooled effect the profile truth lowers the gain by 1% to 7%; at 4.9 times it, by 11% to 28%.
  • It is larger when the large effect is in the neutropenic (high-risk) stratum. There the global intercept flattens the clinical gradient more (the clinical score’s calibration slope in the stratum is 0.65 against 0.77 in the other), and the comparator is no longer irrelevant: against m(X) the global gain is 6.58 and not 7.26 (9% of it is correction of induced miscalibration; 1.5% in the non-neutropenic case). At 4.9 times the pooled effect the profile gain is 26% to 28% lower there.
  • Whether the verdict changes depends on where the gain sits relative to the MCID. Scaled up in the neutropenic stratum or homogeneously, the gain is far above the MCID and the share of draws reaching it moves little (92% to 85%). The Brunel-type scenarios scaled up sit near the MCID and the share moves a lot (23% to 5%, 45% to 31%).
  • For the paper this means the global intercept mattered through one scenario. Only “all in non-neutropenic” has an effect that large (4.93 times the pooled one); the others have stratum effects of at most 2.5 times it and differ by 3% to 8% (the 2,000-draw summaries of addendum 25 give the same: 3% to 8%).

Not done

The realised score; other effect sizes between 3 and 4.9 for the named scenarios; the five-term panel (the 4.9 times scaling is not interpretable for the A-G term); new draws beyond 200.

Code and outputs: scripts/36_aim3b_scheme_comparison.R, output/aim3b_scheme_comparison_{placement,scenarios,draws}.csv. The realised score and the five-term panel, left open here, are in addendum 28.


Addendum 28, 21 October 2026: the stress test extended to the realised score and the five-term panel

Written after addendum 27. No decision changes. scripts/37_aim3b_scheme_comparison_extended.R repeats addendum 27 for both scores (ceiling, and the realised score that carries the pooled estimates) and both panels (four terms, and five with the joint CLEC7A genotypes of script 22); the shared gain functions are in R/scheme_comparison.R (tests in test-scheme-comparison.R). The four-term ceiling rows reproduce script 36 exactly and the script stops if they do not. The realised score’s weights are, in the placement grid, the event-weighted average of the truth’s stratum effects (what a pooled estimate would be) and, in the six scenarios, the pooled estimates (times the scaling, in the scaled version), as in script 21. The scaling multiplies all five effects, so the A-G term gets a log odds ratio near 3 per copy: a stress test, not a plausible effect. Pooled point estimates for the placement grid and 200 draws for the scenarios.

Results

Placement and size, effect 4.9 times the pooled one, 5%, per 1,000 admissions (global truth against the clinical score and against m(X); profile truth, with its difference from the global gain):

panel, score effect in global, clinical global, m(X) profile
five terms, ceiling non-neutropenic 4.080 3.972 3.580 (−12%)
neutropenic 10.035 8.685 6.935 (−31%)
both 14.114 12.657 10.515 (−26%)
four terms, realised non-neutropenic 0.387 0.342 0.475 (+23%)
neutropenic 5.892 5.212 4.413 (−25%)
five terms, realised non-neutropenic 0.161 0.054 0.386 (+139%)
neutropenic 8.492 7.142 5.632 (−34%)

(Four terms, ceiling: addendum 27. With the effect in both strata the realised score carries the truth, so it equals the ceiling.) At the pooled effect the profile truth lowers these gains by 1% to 12%, except the realised score with the effect in the non-neutropenic stratum, where it is higher (+1% to +8%).

The six scenarios, 200 draws, median gain per 1,000 and the share of draws reaching the MCID of 4.58 (global, then profile):

panel, score all in neutropenic ratio 4 homogeneous Brunel direction all in non-neutropenic Brunel estimate
four terms, ceiling, as in the paper −8% −8% −5% −5% −12% (21% to 2%) −3%
five terms, ceiling, as in the paper −8% −8% −6% −8% −14% (45% to 5%) −6%
four terms, realised, as in the paper −13% −11% −7% −2% +32% (0.34 to 0.44) −0.4%
five terms, realised, as in the paper −11% −9% −7% −0.4% 0.03 to 0.25 −4%
five terms, ceiling, scaled to 4.9× −32% (99.5% to 98.5%) −31% −27% −12% (80% to 71%) −14% (44% to 5%) −13% (57% to 21%)
four terms, realised, scaled to 4.9× −29% (69% to 38%) −29% (76% to 53%) −26% (86% to 81%) −0.1% (0.5%) +38% (0.30 to 0.42) harm 1.71 to 1.32
five terms, realised, scaled to 4.9× −36% (86% to 70%) −32% (90% to 79%) −28% (94% to 90%) −5% (33% to 25%) 0.03 to 0.26 harm 3.36 to 2.98

No realised-score scenario as in the paper reaches the MCID in any draw under either truth.

Reading

  • The five-term panel behaves like the four-term one, slightly more. The profile truth lowers the ceiling gain by 6% (pooled effect, both strata) to 26% (4.9 times) against 6% to 22% for four terms, and by 31% against 26% when the large effect is in the neutropenic stratum, where the clinical score’s calibration slope under the global truth is 0.53 (0.65 for four terms) and 13.5% of the global gain is correction of induced miscalibration (9.4%). As in the paper the five-term ceiling differs by 6% to 8% except “all in non-neutropenic” (−14%, 45% of draws reaching the MCID against 5%: script 21’s five-term result, 42% against 6%, on 1,000 draws).
  • The realised score is distorted by the same amount where its weights match the truth, and by more where the effect is concentrated in the neutropenic stratum (−25% to −36% at 4.9 times; −9% to −13% as in the paper, for “all in neutropenic” and “ratio 4”), because its pooled weights then apply the effect in a stratum where the truth has little.
  • One sign reverses. When all of the effect is in non-neutropenic admissions the realised score applies the pooled weights in both strata but the truth has the effect in one, so its gain is negligible under both truths (0.3 to 0.4 per 1,000 for four terms, 0.03 to 0.26 for five, against an MCID of 4.58), and the profile truth gives the larger gain. The percentage change for five terms is large only because the global value is near zero. Why the global truth is worse for that mis-specification is explained in addendum 30. The verdict is the same under both truths.
  • Verdicts. As in the paper no realised-score scenario reaches the MCID under either truth. Scaled up, the realised score’s share of draws reaching the MCID falls more than the ceiling’s (for example 69% to 38% against 92% to 85% for four terms, all in neutropenic), as expected from its larger percentage change near the MCID. The harm of Brunel’s stratum effects (negative gain of the realised score) is smaller under the profile truth (1.71 to 1.32 for four terms scaled; 0.16 to 0.16 as in the paper).
  • For the paper nothing changes. The scenarios as used differ by 0.4% to 14% in median gain between the truths, the largest in the one scenario already identified; the exception is the realised score in that scenario, whose gain is negligible under both.

Not done

The realised score with estimation error in its weights (here the pooled medians exactly); the 20% threshold (in the CSVs, not discussed; addendum 29 reports it for the ceiling score); (a cause for the sign reversal is given in addendum 30). Effect sizes between 3 and 4.9 times and scaling one term at a time are done in addendum 29.

Code and outputs: R/scheme_comparison.R, scripts/37_aim3b_scheme_comparison_extended.R, tests/testthat/test-scheme-comparison.R, output/aim3b_scheme_comparison_ext_{placement,scenarios,draws}.csv. Effect sizes between 3 and 4.9 times, and scaling one term at a time, are in addendum 29.


Addendum 29, 21 October 2026: where the distortion starts to matter

Written after addendum 28. No decision changes. Addenda 27 and 28 showed the global-intercept truth distorts the gain at effects 4.9 times the pooled ones but left open where it starts to matter. scripts/38_aim3b_scheme_comparison_grid.R scales the pooled effect by 1 to 6 in steps of 0.25 (and 4.9), either all terms together or one term at a time (the others stay at their pooled estimates), with the effect in the non-neutropenic stratum, the neutropenic stratum or both, for the four- and five-term panels and both scores; pooled point estimates, whole-cohort gain over the clinical score. The all-terms rows at 1, 2, 3 and 4.9 reproduce script 37 and the script stops if they do not.

“Starts to matter” was defined before the results were seen: the smallest multiplier (linear interpolation on the grid) at which (a) the profile gain differs from the global one by at least 10%; (b) the clinical score’s induced miscalibration is worth at least 5% of the global gain (the gain against the clinical score exceeds the gain against m(X) by 5%); (c) the point-estimate verdict against the 5% MCID differs: the global gain reaches it and the profile gain does not.

Results (ceiling score, 5%; multiples of the pooled effect)

All terms scaled together. The difference at the pooled effect (1×) is already 5% to 7% when the effect is in both strata or the neutropenic one, and 1% when it is in the non-neutropenic one.

panel effect in difference at 1× (a) reaches 10% (b) comparator reaches 5% (c) global reaches the MCID profile reaches it
four terms both strata −5.5% 2.66× 4.34× 2.96× 3.18×
neutropenic −6.6% 2.35× 4.09× 3.51× 4.13×
non-neutropenic −0.8% 4.50× not within 6× not within 6× not within 6×
five terms both strata −5.7% 1.77× 3.20× 2.11× 2.30×
neutropenic −6.7% 1.56× 3.01× 2.49× 2.91×
non-neutropenic −1.1% 3.79× not within 6× 5.62× not within 6×

One term at a time. The multiplier at which (a) is reached, and the per-copy odds ratio of the scaled term there (pooled odds ratio and the posterior’s 95th percentile in brackets), for an effect in both strata and in the neutropenic stratum; the range over the two panels:

term pooled OR (95th percentile) odds ratio at which the difference reaches 10%
PTX3 1.35 (1.81) 3.1 to 4.1 (multiplier 3.75× to 4.72×)
CD209 1.80 (2.73) 3.5 to 5.5 (2.13× to 2.90×)
CLEC7A A-G (five terms) 1.86 (2.63) 3.5 to 4.0 (2.01× to 2.25×)
TLR4 1.44 (2.69) 4.6 to 8.0 (4.13× to 5.66×)
CLEC7A Y238X 0.84 (1.48, on the other side of 1) never within 6×

With the effect only in the non-neutropenic stratum a single term reaches 10% only at CD209 (5.1× to 5.2×, OR 20 to 21) and A-G (5.0×, OR 22). Criterion (b) is reached by a single term only for CD209 (4.7× to 5.2×) and A-G (4.0× to 4.2×), and (c) only for CD209 (3.3× to 4.8×) and A-G (2.8× to 3.9×).

The realised score. With the effect in both strata it equals the ceiling. With the effect concentrated in the neutropenic stratum the difference is already above 10% at the pooled effect (−12% for four terms; 10% at 1.25× for five), because its pooled weights then apply the effect in a stratum where the truth has little (addendum 28). With the effect only in the non-neutropenic stratum the profile gain is the larger one.

The 20% threshold, ceiling. The difference at 1× is under 1.2% for the effect in both strata or the neutropenic one, and reaches 10% at 2.6× to 3.5×. With the effect only in the non-neutropenic stratum the profile gain is the larger (+8% to +10%).

At the evidence’s own upper end (every term at the 95th percentile of its pooled posterior at once, whole cohort, per 1,000 admissions; MCID 4.58 at 5%, 1.60 at 20%):

panel 5%: global, profile difference 20%: global, profile difference
four terms 1.89, 1.72 −8.8% 2.71, 2.70 −0.5%
five terms 3.09, 2.74 −11.5% 4.08, 3.99 −2.0%

The comparator share is nil (the gain against the best clinical-only rule equals the gain against the clinical score) and the verdict is the same under both truths (below the 5% MCID, above the 20% one).

Reading

  • There is no threshold below which the construction is harmless at 5%: it costs 5% to 7% at the pooled effect (the panel result of addendum 24) and grows with the effect. It passes 10% when the panel’s effects are about 2.4 to 2.7 times the pooled ones (1.6 to 1.8 for five terms) or when one dominant term (PTX3, CD209, A-G) has a per-copy odds ratio of 3 to 5.5. Both are above what the evidence supports: the 95th percentiles are 1.8 to 2.7.
  • At the evidence’s upper end it is about the 10% line (9% and 12% at 5%; 0.5% and 2% at 20%) and changes neither the comparator’s relevance nor the verdict.
  • The clinical score’s induced miscalibration matters only at much larger effects (4.1× to 4.3× for four terms, 3.0× to 3.2× for five, all terms; a single term needs 4.0× to 5.2×). In between, the difference is the truth being a different population, as in addendum 26.
  • The verdict differs only in narrow windows (all terms, effect in both strata: 2.96× to 3.18× for four terms, 2.11× to 2.30× for five; in the neutropenic stratum 3.51× to 4.13× and 2.49× to 2.91×). The odds ratio of CD209 at 3× is 5.9. No window lies inside the evidence’s range.
  • Where the effect sits matters more than which term: the non-neutropenic placement is the least affected until effects are very large; it is the one scenario of the paper with such an effect (addendum 27).

Not done

Two or more terms scaled together but not all; thresholds between 5% and 20%; draws (this is point estimates); the realised score with estimation error in its weights; why the 5% difference at the pooled effect is what it is (the panel result of addendum 24 is not decomposed here).

Code and outputs: scripts/38_aim3b_scheme_comparison_grid.R, output/aim3b_scheme_comparison_grid.csv, output/aim3b_scheme_comparison_grid_crossings.csv. The 95th-percentile comparison was run interactively with calibration_gains() (R/calibration_check.R) on the whole cohort.


Addendum 30, 21 October 2026: why the profile truth gives the realised score a larger gain in “all of the effect in non-neutropenic admissions”

Written after addendum 29. No decision changes. Addenda 27 and 28 found that in this scenario the global intercept makes the ceiling score look better (addendum 26) but the realised score worse, and left the reason open. scripts/39_realised_score_sign_reversal.R investigates it (the interactive run it reproduces exactly was done first). The scenario: the truth has no effect in the neutropenic stratum (N) and an effect 4.93 times the pooled one in the non-neutropenic stratum (NN); the realised score carries the pooled estimates (1 times) in both strata. Pooled point estimates, 5%, per 1,000 admissions of the stratum unless stated.

Results

1. The truth, not the score’s recentring. The realised score’s whole-cohort gain, with the truth built under one scheme and the score recentred under the same or the other:

truth built score recentred globally score recentred per profile
global 0.418 0.413
profile 0.506 0.501

How the score is recentred changes the gain by about 1%; how the truth is built by 21%. The N stratum is identical under both truths (the truth has no effect there, so it equals the clinical risk, gain −1.068); the whole difference is in NN (stratum gain 1.007 under the global truth, 1.129 under the profile truth).

2. The flows in NN. Against the clinical score the realised score adds 4.11 flags and removes 4.68 per 1,000 NN admissions (and leaves 15.2 flagged by both):

global truth profile truth
flags added: mean true risk of the patients 0.229 0.259
flags added: net-benefit contribution +0.772 +0.902
flags removed: mean true risk 0.0024 0.0039
flags removed: net-benefit contribution +0.234 +0.227
stratum gain (sum) 1.006 1.129

The removed flags are essentially zero-risk under both truths, so the gap is entirely the patients the score adds.

3. What the global intercept does to true risk, by the clinical-risk band of the profile (NN stratum; the profile truth equals the clinical risk by construction):

clinical-risk band share of the stratum mean clinical risk true risk under the global truth, over clinical
< 1% 86.9% 0.56% × 1.20
1–3% 9.4% 1.9% × 0.96
3–5% 1.7% 4.0% × 0.80
5–10% 1.3% 6.8% × 0.69
> 10% 0.7% 15.7% × 0.55

4. Where each score’s added flags come from. The ceiling score adds 19.6 flags per 1,000 from profiles under 1% clinical risk under the global truth, against 16.2 under the profile truth (net benefit 2.38 against 1.90), and its stratum gain is 4.26 against 3.81. The realised score adds 4.11 flags, almost none (0.004) from profiles under 1%: 1.09 from the 1–3% band and 3.01 from the 3–5% band. Its net-benefit gap between the truths (profile minus global, +0.130 in total) is 0.111 (85%) from the 3–5% band, 0.019 (15%) from the 1–3% band and nothing from below 1%.

Reading

  • The global intercept moves true risk towards the lowest-risk profiles and away from the higher-risk ones. With one intercept for a stratum and an effect this large, the true risk of the 87% of patients in profiles under 1% is raised by a fifth, and that of profiles above 3% is lowered, by 20% at 3–5% and 45% above 10% (the convexity and concavity of the logistic function; addendum 26).
  • The ceiling score and the realised score are on opposite sides of this because they reach different patients. The ceiling score carries the full effect and lifts carriers in the lowest-risk profiles over 5%, where the global truth has raised their risk: it gains. The realised score carries the pooled effect, about a fifth of the truth’s in NN, and reaches only carriers in 1–5% profiles, where the global truth has lowered their risk (to 0.96 and 0.80 of the clinical value): it gains less. The same redistribution, a different reach.
  • For the paper this is immaterial: the realised score’s gain is 0.4 to 0.5 per 1,000 under either truth against an MCID of 4.58, and the scenario is the one already identified. It explains the sign reversal of addendum 28; it does not change a verdict.
  • What was and was not shown. The 2×2 isolates the truth from the score’s recentring. The flows and the bands show where the gap sits and are descriptive: they are consistent with the explanation and with the ceiling score’s opposite behaviour, and the intervention that tests them (a truth equal to the global one except in chosen bands) is addendum 31.

Not done

The five-term panel is addendum 32 (the reversal’s larger relative size there is arithmetic: a small difference of two large terms); other scenarios with a mis-specified realised score at effects this large.

Code and outputs: scripts/39_realised_score_sign_reversal.R, output/aim3b_sign_reversal_{factorial,flows,bands}.csv. The intervention test left open here is addendum 31.


Addendum 31, 21 October 2026: the intervention test of the explanation in addendum 30

Written after addendum 30. No decision changes. Addendum 30’s explanation was descriptive. scripts/40_sign_reversal_intervention.R tests it by changing the truth in chosen clinical-risk bands of the non-neutropenic stratum (NN) and asking whether that alone reproduces the realised score’s gap. Same scenario and conventions as addendum 30 (pooled point estimates, 5%, per 1,000 NN admissions; the realised score carries the pooled estimates, recentred globally; the comparator is the clinical score; the ceiling score is the oracle for whichever truth is used). The truth in a band is the global truth’s risk, the profile truth’s, or the global truth’s risk rescaled to the clinical score’s mean in each profile (which keeps the global truth’s pattern across genotypes and removes only its shift of the profile’s mean). The interventions with no band and with every band reproduce script 39 and the script stops if they do not.

What the design can and cannot show. Every patient in the 3–5% band is below the clinical flag line, so the band can only enter the realised score’s gain through the flags it adds. Swapping the truth there to the profile values must therefore move the gain by that band’s share of the flows (0.111, addendum 30), which is bookkeeping and not evidence for a mechanism. The informative rows are the necessity and reverse tests, the other bands, and the rescaled-mean version, which keeps everything about the global truth except the level of the profile’s mean.

Results

Gain against the clinical score per 1,000 NN admissions, and the share of the gap between the global and the profile truth that the intervention recovers:

truth used realised score gap recovered ceiling score (oracle) gap recovered
global in every band 1.006 0% 4.26 0%
profile in every band 1.129 100% 3.80 100%
profile in the 3–5% band only 1.118 91% 4.37 −24%
profile in every band except 3–5% 1.018 9% 3.70 124%
profile in the < 1% band only 1.006 0% 3.78 105%
profile in the 1–3% band only 1.025 15% 4.31 −10%
profile in the 5–10% band only 0.999 −6% 4.19 15%
profile in the > 10% band only 1.006 0% 4.20 14%
profile in 1–3% and 3–5% 1.137 106% 4.42 −34%
mean rescaled to the clinical risk, 3–5% only 1.124 96% 4.38 −25%
mean rescaled, < 1% only 1.006 0% 3.71 120%
mean rescaled, every band 1.147 114% 3.80 101%
the profile truth with the global values back in 3–5% 1.018 91% of the gap lost 3.70

Reading

  • The realised score’s gap is the 3–5% band. Changing that band alone recovers 91% of it; changing every other band together recovers 9%; putting the global values back in that band alone in the profile truth loses 91%. The bands add up: 3–5% (91%) and 1–3% (15%) and 5–10% (−6%) give 100%, and nothing comes from below 1% or above 10%.
  • What matters in the band is the level of the profile’s mean risk, not the pattern across genotypes. Rescaling the global truth’s risk to the clinical mean in each 3–5% profile, and nothing else, recovers 96% of the gap. The global truth’s genotype-specific pattern is kept; only its lowering of the mean is removed.
  • The ceiling score’s gap is the opposite band. Changing the < 1% band alone recovers 105% of its gap (120% rescaled), and the 3–5% band moves it the other way (−24%), the opposite signs addendum 30 described.
  • Rescaling beyond the profile truth overshoots (114% in every band): the proportional rescale puts more risk on carriers than the logit shift does, so it is not the profile truth. It supports the level and not the exact shape.
  • Not shown: that the effect operates through anything other than the bands’ risk levels, in the other Aim 3b scenarios, or in the five-term panel. The hybrid truths are risk arrays, not generative models (they do not hold prevalence or each profile’s mean outside the swapped bands), which is acceptable for an intervention on the net-benefit calculation but not as a simulated population.

Not done

The five-term panel is addendum 32; other scenarios with a mis-specified realised score; a band definition other than the one of addendum 30 (the bands are fixed by the clinical risk of the profile and were chosen before this test).

Code and outputs: scripts/40_sign_reversal_intervention.R, output/aim3b_sign_reversal_intervention.csv. The five-term panel, left open here, is addendum 32.


Addendum 32, 21 October 2026: the band-by-band intervention on the five-term panel

Written after addendum 31. No decision changes. scripts/40_sign_reversal_intervention.R now runs both panels; the five-term panel (PTX3, CLEC7A, CLEC7A_AG, TLR4, CD209, with the joint CLEC7A genotypes of script 22) is the one where addendum 28 found the sign reversal larger in relative terms. The questions were fixed before the run: does the 3–5% band alone recover most of the realised score’s gap, as it did for four terms (91%); does rescaling only the band’s mean risk suffice; does the ceiling score’s gap sit in the below-1% band; and, if another band dominates, does the flags decomposition of addendum 30 predict which. Same scenario, bands and conventions as addendum 31. Gates: the four-term rows are unchanged from addendum 31 (difference 0) and, for both panels, the no-band case reproduces stratum_gains() (R/scheme_comparison.R) for the realised and the ceiling score, and the every-band case its ceiling gain under the profile truth.

Results

Share of the gap between the global and the profile truth that each intervention recovers, in the non-neutropenic stratum (5%, per 1,000 NN admissions):

truth used four terms: realised five terms: realised four terms: ceiling five terms: ceiling
global in every band (the gain, in brackets) 0% (1.006) 0% (1.66) 0% (4.26) 0% (5.72)
profile in every band 100% (1.129) 100% (1.93) 100% (3.80) 100% (5.02)
profile in 3–5% only 91% 74% −24% −23%
profile in every band except 3–5% 9% 26% 124% 123%
profile in < 1% only 0% −2% 105% 122%
profile in 1–3% only 15% 29% −10% −18%
profile in 5–10% only −6% −1% 15% 9%
profile in > 10% only 0% 0% 14% 11%
profile in 1–3% and 3–5% 106% 103% −34% −41%
mean rescaled, 3–5% only 96% 68% −25% −23%
mean rescaled, 1–3% and 3–5% 118% 105% −37% −42%
mean rescaled, < 1% only 0% −12% 120% 138%
mean rescaled, every band 114% 93% 101% 106%
the profile truth with the global values back in 3–5% 91% lost 74% lost

The flags decomposition predicts the bands. For five terms the realised score adds 2.55 flags per 1,000 from 1–3% profiles (1.09 for four terms) and 4.49 from 3–5% (3.01), and its net-benefit gap between the truths is 0.202 (74%) from 3–5%, 0.081 (29%) from 1–3%, and nothing material elsewhere (−0.005 below 1%, −0.004 at 5–10%): the same shares as the single-band interventions, and the bands add to 100%. (For a band with no flags already flagged by the clinical score this agreement is bookkeeping, as addendum 31 noted.)

The relative size of the reversal. In the whole cohort the five-term realised gain is 0.164 under the global truth and 0.377 under the profile truth per 1,000 (+129%), against +16% in NN. In the neutropenic stratum, where the truth has no effect, the realised score loses 3.6 per 1,000 neutropenic admissions under either truth, and the NN gain (1.66, 1.92) nearly cancels it: the whole-cohort figure is a small difference of two large terms.

Reading

  • The mechanism is the same. The realised score’s gap is the 3–5% band (74%) and the 1–3% band (29%); every other band together contributes nothing (−3%). Putting the global values back in 3–5% alone loses 74% of the gap.
  • For five terms the 1–3% band carries more (29%, against 15%): the A-G haplotype is common and heavily weighted, so more carriers are lifted over 5% from 1–3% profiles. The band that matters is where the score’s added flags come from, which depends on the panel.
  • The level of the mean risk explains the gap across the two bands, less in the 3–5% band alone. Rescaling only the profile means recovers 68% in 3–5% (96% for four terms), 105% in 1–3% and 3–5% together and 93% in every band. The proportional rescale moves carriers’ risks differently from the logit shift, which matters more when a second band contributes.
  • The ceiling score’s gap is the below-1% band again (122%, 138% rescaled), with the 3–5% and 1–3% bands moving it the other way.
  • The large relative reversal is arithmetic, not a larger distortion: the mechanism acts in NN, where the gain changes by 16%; the whole-cohort figure is a small difference of two large numbers, and 0.16 to 0.38 per 1,000 is far below the MCID of 4.58.

Not done

Other scenarios with a mis-specified realised score; the neutropenic stratum’s loss (3.6 per 1,000 for five terms) is explained in addendum 33; the bands were not varied.

Code and outputs: scripts/40_sign_reversal_intervention.R, output/aim3b_sign_reversal_intervention.csv (both panels) and output/aim3b_sign_reversal_intervention_flows.csv.


Addendum 33, 21 October 2026: why the five-term realised score loses 3.6 per 1,000 neutropenic admissions when the truth has no effect there

Written after addendum 32. No decision changes. In the scenario with all of the effect in non-neutropenic admissions the truth has no genetic effect in the neutropenic stratum (N), so the clinical score is exactly calibrated there and anything the genetic score changes can only cost. The realised score (pooled estimates, recentred globally to the stratum’s mean risk) loses 1.07 per 1,000 N admissions with four terms and 3.61 with five. scripts/41_null_stratum_loss.R breaks the loss down (pooled point estimates, 5%; it reproduces the interactive run to 5e-15 and stops unless the identity below reproduces the stratum gain). The truth in N is identical under the global and the profile construction, so this loss is a property of the score, not of the construction (it is 3.61 under the global truth’s recentring and 3.52 under the profile one).

An exact identity. With no effect in the truth, the net-benefit change of any score is the sum over profiles of (clinical risk − 5%) / 0.95 times the change in that profile’s flagged share. Unflagging a patient in a profile above the threshold, or flagging one below it, costs in proportion to the profile’s distance from the threshold.

Results

By term (gain per 1,000 N admissions): all four terms −1.068; all five terms −3.611; all five without the A-G term −1.068 (the same as four terms: CLEC7A Y238X alone changes nothing); the A-G term alone −0.446; PTX3 alone −0.360, TLR4 −0.431, CD209 −0.858. The loss is super-additive: the four-term score and A-G alone sum to −1.51, together they lose −3.61. The SD of the score’s genetic shift in N is 0.375 log-odds for four terms and 0.570 for five.

By the scale of the weights (multiplier k; gain per 1,000 N admissions; the share of profile 36’s patients the score unflags):

k four terms five terms
0.5 −0.322 (0%) −0.647 (2%)
0.75 −0.545 (0.1%) −2.170 (11%)
1 −1.068 (3%) −3.611 (25%)
1.25 −2.360 (18%) −4.904 (26%)
1.5 −3.585 (23%) −7.446 (42%)
2 −4.620 (24%) −11.600 (45%)

The loss is not quadratic in the weights (gain/k² for four terms runs −0.72, −1.29, −1.07, −1.59, −1.16 from k = 0.25 to 2) but steps with the share of profile 36 that is unflagged.

By profile (five terms; per 1,000 N admissions; distance from the 5% threshold in log-odds, positive = above, so flagged by the clinical score):

profile share of N clinical risk distance flagged by the score (four terms) contribution share of the loss
36 15.6% 8.4% +0.55 75% (97%) −1.388 38%
43 10.3% 9.8% +0.72 89% (100%) −0.581 16%
34 15.7% 3.7% −0.31 20% (19%) −0.424 12%
35 14.2% 4.1% −0.21 31% (21%) −0.416 12%
42 3.0% 9.0% +0.63 77% (97%) −0.291 8%
33 17.3% 1.8% −1.07 3% (1%) −0.193 5%
38 2.2% 8.0% +0.50 74% (82%) −0.184 5%

The top three profiles carry 66% of the loss and the top eight 98%; 14 of the stratum’s 34 profiles lose anything. Half of N’s weight (50.2%) is in profiles at 7% clinical risk or more, a third (32.5%) at 3% to 5%, and none between 5% and 7%.

Reading

  • N sits on the decision line. Its weight is in a few profiles 0.2 to 0.7 log-odds from the 5% threshold, above it (8% to 10% clinical risk) and below it (3.7% to 4.1%). With no true effect, every reclassification there is a pure loss.
  • The recentred score moves each patient by their genotype’s effect minus the mean. With five terms 25% of the patients in profile 36 get a shift below −0.55 (the profile’s distance) and drop under the threshold, against 3% with four terms; the A-G term has a frequency of 0.35 and a weight of 0.62, so many patients are non-carriers of the heavily weighted alleles and are pushed down.
  • Why 3.4 times and not 2.2 times. The spread of the shift is 1.5 times larger (0.57 against 0.375, a variance ratio of 2.3), but the tail mass at a distance of 0.55 (1.5 SDs for four terms, 1.0 SD for five) is nine times larger. A four-term score reaches the five-term tail mass only when its weights are scaled by about 1.5 (23% of profile 36 unflagged). The loss is a threshold effect on a few large profiles, not a smooth variance penalty, which is why it steps with k and is super-additive across terms.
  • For the paper this is immaterial. The N loss is a feature of the stress scenario (the same pooled weights applied in a stratum where the truth has no effect); weighted by N’s share (28%) it is about −1.0 per 1,000 admissions, against a whole-cohort gain of 0.16 to 0.38 and an MCID of 4.58. It is also why the whole-cohort reversal of addendum 32 is large in relative terms: it is a small difference between two large terms.

Not done

Thresholds other than 5%; the realised score’s loss in the strata where the truth does have an effect (the scenarios as in the paper), where it is a gain; a score that is not recentred globally (the profile recentring gives −3.52, not decomposed); draws.

Code and outputs: scripts/41_null_stratum_loss.R, output/null_stratum_loss_{terms,scaling,profiles}.csv.


Addendum 34, 21 October 2026: the same mechanism in the strata where the truth does have an effect

Written after addendum 33. No decision changes. Addendum 33 explained the realised score’s loss in a stratum with no true effect as the cost of reclassifying a few large profiles close to the 5% line. Which patients a score reclassifies depends only on the score (its weights and the clinical profile), not on the truth, and for any truth the net-benefit change is the sum over cells of weight × (true risk − 5%) / 0.95 × (flag by the score − flag by the clinical score). So the prediction is that the reclassified patients are the same few profiles in every scenario, and that the truth only values them: the gain is the null cost of that reclassification plus a value of the truth effect, which is the excess of the added patients’ true risk over their clinical risk (and the removed patients’ deficit), divided by 0.95. scripts/42_reclassification_in_effect_strata.R tests this on the six scenarios as the paper uses them, for both panels, under the profile truth with the score recentred globally (as addenda 39 to 41), per 1,000 stratum admissions at 5%. Gates: the null gains of the neutropenic stratum reproduce script 41 and the non-neutropenic gain in “all in non-neutropenic” reproduces script 40.

Results

The reclassified patients are the same in every scenario of a stratum.

panel, stratum flags added flags removed profiles reclassified top three profiles’ share of the reclassified weight
four terms, neutropenic (N) 65.3 9.4 11 85%
four terms, non-neutropenic (NN) 4.1 4.7 30 49%
five terms, N 89.3 64.7 14 74%
five terms, NN 7.3 6.1 38 44%

The realised score’s gain by scenario (the effect in the truth, as a multiple of the pooled one in N and NN; null cost: four terms N −1.068, NN −0.114; five terms N −3.611, NN −0.239):

scenario (effect in N, NN) four terms, N four terms, NN five terms, N five terms, NN
all in neutropenic (1.25×, 0) +1.756 −0.114 +4.231 −0.239
ratio 4 (1.18×, 0.30×) +1.570 −0.054 +3.813 −0.109
homogeneous (1×, 1×) +1.130 +0.110 +2.777 +0.242
Brunel direction, ratio 1/4 (0.62×, 2.49×) +0.244 +0.534 +0.451 +1.065
all in non-neutropenic (0×, 4.93×) −1.068 +1.129 −3.611 +1.934
Brunel estimate (−0.21×, 1.87×) −1.467 +0.350 −4.998 +0.727

The gain minus the null cost is the value of the truth effect: in N with the pooled effect (homogeneous) it is +2.20 for four terms and +6.39 for five, against null costs of 1.07 and 3.61. At that effect 97% (four terms) and 85% (five terms) of the added patients have a true risk of 5% or more, and all the removed ones are below it. At 0.62× (Brunel direction) the gain is +0.24 and +0.45, close to break-even; with no effect it is the null cost; with the effect reversed (−0.21×) it is worse than the null cost.

By the scale k of the score’s weights (the homogeneous truth fixed; per 1,000 admissions of N):

k four terms: gain, null cost, value five terms: gain, null cost, value
0.5 +0.898, −0.322, +1.22 +1.907, −0.647, +2.55
1 +1.130, −1.068, +2.20 +2.777, −3.611, +6.39
1.5 +0.740, −3.585, +4.32 +2.087, −7.446, +9.53
2 +0.294, −4.620, +4.91 +0.547, −11.600, +12.15

The share of the added patients that are right falls as k rises (four terms, N: 100% at k = 0.5, 97% at 1, 75% at 2). The largest single step carries 30% to 62% of the null cost’s movement over k, against 25% to 44% of the value’s.

Reading

  • The mechanism extends. The patients the realised score reclassifies are fixed by the score and concentrated in a few profiles near the threshold, in the strata with an effect as in the null stratum. What the truth does is value them.
  • The gain is the null cost plus a smoother value. The null cost is lumpy (a threshold effect on large profiles, addendum 33). The value of the truth effect is the excess risk of the added patients and grows with k more evenly, so the gain rises, peaks near the pooled weights (k ≈ 1) and falls beyond them as the null cost outgrows the value.
  • Where the gain turns negative: with a true effect of about half the pooled one in N (linear interpolation between 0 and 0.62×) the value equals the null cost; below that the realised score loses in that stratum. The scenarios as the paper uses them are at or above 0.6× in N except “all in non-neutropenic” and “Brunel estimate”, where N has little or the opposite effect and the realised score loses there.
  • The non-neutropenic stratum is the mirror image: few patients are reclassified (4 to 13 per 1,000), the null cost is small (−0.11, −0.24) and the value is positive wherever the stratum has an effect (+0.2 to +2.2), so the gain is small and positive; it turns negative only at k ≈ 2.
  • Not shown: this is a decomposition and a scaling, not an intervention; one truth construction (profile) and point estimates; 5% only; the strata are combined into the whole-cohort gain elsewhere (addendum 32).

Not done

The global-truth version; the 20% threshold; draws; an intervention that changes which profiles are reclassified.

Code and outputs: scripts/42_reclassification_in_effect_strata.R, output/reclassification_effect_strata_{flows,scaling}.csv.

Addendum 35, 5 November 2026: the student’s study-level corrections, the S002 duplicate exclusion, and the pathogen-specificity scenario (written, not yet run)

What had been seen. The student’s round-2 sheet (student_correction.xlsx, 61 studies, gitignored with the other spreadsheets) and the extraction in the evidence bundle. No result of the pathogen-specificity scenario has been seen: the script has not been run on the cohort (the patient-level files are not on the machine used).

1. Study-level corrections (data/study_corrections.csv, scripts/45_apply_study_corrections.R)

The sheet records the checks as free-text notes against the study-level fields (total, cases, controls, source PDF); its fields_changed, checked_by and checked_on columns are empty. The notes were transcribed into data/study_corrections.csv, in the layout of extraction_corrections.csv plus a status column (28 rows).

  • 24 rows are corrected (16 studies: S021, S033, S035, S038, S040, S041, S045, S051, S052, S053, S064, S065, S067, S069, S070, S074), and apply_study_corrections() (R/source_verification.R) applies them to the bundle’s study table, writing data/extraction_studies_corrected.csv. It stops if an expected original value is not found. All 24 applied cleanly.
  • 4 rows are needs_decision: S039 (two rows; the text says 78 cases, Table 2 says 50), S010 (96 is all children with ALL, only 8 had an invasive fungal infection) and S002 (see section 2). They are left as they were.
  • S074 (Chen 2019) checked against the student’s Table 4 counts. The five rs3901533 rows (V1063 to V1067) match (cases 26+23+3 = 52, controls 82+37+1 = 120) and their stored odds ratios recompute. The four rs7309123 rows (V1074 to V1077) sum to 51 cases and 120 controls, one case short of 52, and two of the four stored odds ratios differ from the recomputation by about 2% (1.622 against 1.658; 7.532 against 7.44). Not changed; to check against the paper.
  • S021 (Sainz 2011 abstract) may share patients with S071. It is already in data/cohort_independence.csv for rs4804800 and rs7248637, counted with S071 as one Spanish/aspBIOmics cohort (3 independent cohorts from 4 studies), so no change was needed.
  • Effect on results: none. The corrections are to study totals and source files; the pooling uses per-row counts and estimates, and no pooling script reads the corrected study table.

2. S002 rows are duplicates of S079 (data/extraction_corrections.csv, drop_duplicate_reports())

S002 (nejmc1402787, the NEJM correspondence) and S079 (nejmoa1211161, Cunha 2014, the original article) share one PDF. The 17 S002 variant rows (V1204 to V1220) were extracted from the original article: all nine numeric estimate and interval sets in them also appear in S079’s rows (V1698 to V1707), and their notes describe the 268-patient discovery and 330-patient confirmation studies. The student reports that the PDF is the correspondence (44 cases, 68 controls); that content has not been extracted.

Decision: no re-extraction from S079 (already extracted). The 17 rows carry duplicate_group = dup_of_S079 through extraction_corrections.csv, and drop_duplicate_reports() removes them after apply_corrections() in scripts 12, 14, 15, 21, 22 and 26. The check is an assistant comparison of the two sets of rows, not a human check against the PDF. No result changes: the S002 rows were in no pooled output, and scripts 12, 14 and 15 rerun with the drop step reproduced all 32 committed output files to within 1e-8 (floating-point noise only).

3. The pathogen-specificity scenario for Aim 4 (R/aim4_pathogen.R, scripts/43_aim4_pathogen_specificity.R)

This is the scenario planned in scope decision 1 and left undone in addendum 16. The record does not specify it further, so this is a design choice: only a fraction f of cases (the target pathogen) arises through the pathway the loci act on, and the rest are genotype-independent, with the outcome still any proven or probable invasive mould disease.

true risk = (1 - f) x plogis(baseline logit) + f x plogis(baseline logit + log(OR) x D + a), where a holds the event rate at its baseline value (D5).

Two scores, both recentred to the baseline score’s mean risk: one with the target-pathogen weights (what a pathogen-specific discovery study would estimate) and one with weights fitted to the all-mould outcome. The MCID is the baseline’s, as in script 23. Grid: odds ratio 1.2 to 3.0 (10 values), frequency 0.1, 0.3 and 0.5, 1 to 20 loci, f = 1, 0.8, 0.6 and 0.4. f is an assumption: the cohort has no pathogen-level outcome.

Checks so far: on synthetic profile distributions, f = 1 reproduces the ceiling of sweep_cell to 1e-17 (gain) and 1e-15 (weight); at f = 0.6 the all-mould score gained more than the specific-weight score, as expected when the specific weights overshoot. The script also checks f = 1 against output/aim4_sweep.csv when it runs. Results: none yet. It writes output/aim4_pathogen_sweep.csv, aim4_pathogen_frontier.csv, aim4_pathogen_check.csv and output/figures/aim4_pathogen_frontier.png; a further addendum will report them.

4. PRISMA 2020 flow diagram (scripts/44_prisma_flow.R)

Drafted with the PRISMA2020 package (1.1.5) from the counts in the status log: 267 PubMed and 785 Embase records, 221 duplicates removed, 831 screened, 81 included. The Covidence counts for exclusion at title and abstract, reports sought, not retrieved, assessed and excluded with reasons are not in the repository and show as NA. Embase was searched on 8 October 2026; the PubMed date is unrecorded.

Not done

The S039, S010 and S002 decisions; the row-level human round-2 record; running script 43; the Covidence counts; checking the S074 rs7309123 counts against the paper.

Code and outputs: R/aim4_pathogen.R, R/source_verification.R (apply_study_corrections(), drop_duplicate_reports()), scripts/43_aim4_pathogen_specificity.R, scripts/44_prisma_flow.R, scripts/45_apply_study_corrections.R, data/study_corrections.csv, data/extraction_studies_corrected.csv, output/prisma_counts.csv, output/figures/prisma_flow.png; tests in tests/testthat/test-study-corrections.R and test-source-verification.R.

Addendum 36, 6 November 2026: the student’s follow-up on S039, S010, S002 and S074 (settles most of addendum 35, section 1)

What had been seen. The student’s written answers to the four open items of addendum 35, and the two PDFs for S002 and S079 (NEJMc1402787.pdf, the correspondence; NEJMoa1211161.pdf, the original article), which were read here. The student’s readings of the S039, S010 and S074 papers were not re-checked against those papers; where arithmetic could be redone it was.

  • S002 and S079: confirmed and settled. NEJMc1402787.pdf is the NEJM correspondence (letters by de Boer, Halkes and van de Vosse; by Vehreschild et al.; and the reply by Cunha et al.), and only the Leiden letter carries data. The 17 S002 variant rows (V1204 to V1220) are the original article’s results: the discovery hazard ratios 2.92, 2.62 and 3.08, the confirmation odds ratios 2.14, 1.92 and 2.78, and the HLA-stratified 3.96 and 6.02 are in its Tables 2 and text. So the duplicate marking and the drop of addendum 35, section 2, stand, now checked against the PDFs. data/study_corrections.csv now gives S002 the letter’s file name and its own totals (112, 44 cases, 68 controls); the sheet’s 268, 51 and 217 are S079’s, which keeps its file.
  • The letter’s data are not extracted yet, and they are new. The Leiden letter gives donor PTX3 genotype counts (+281A>G GG, GA, AA: cases 7, 26, 9, controls 10, 31, 13; +734A>C AA, AC, CC: cases 9, 27, 5, controls 14, 34, 11) and adjusted odds ratios 0.61, 0.70 and 0.65, all null. The printed crude odds ratios (0.88 and 0.90) recompute from the counts. Its cohort is the Leiden cohort of de Boer 2011 (S061: 44 cases, 64 controls; the letter says 68 controls), and S061 has no PTX3 rows, so these are donor PTX3 evidence not otherwise in the extraction. They would enter only the secondary donor analysis (script 20; PTX3 donor evidence is one to two studies). Not extracted: it is a decision (it changes a secondary result), and S061 would be the cohort to count it with.
  • S039: settled, no change. Table 2 compares 50 with 302, and the Results say the logistic models use the Table 2 covariates, so 50 and 302 are the numbers analysed (their sum is the 352 enrolled). The Methods text says 78 probable or proven cases and the paper does not explain the other 28. The transplant results are relative risks, not odds ratios, and Table 5 gives no case and control counts. S039 feeds no pooled output.
  • S010: not settled, and the finding is larger than a number. The comparison tested is ALL patients (96) against healthy controls (103), not infection against no infection; the only TLR2 Arg753Gln carrier had no infection. Eight IFIs in initial treatment (4 proven, 2 probable, 2 possible) and four in relapse were reported. The linked PDF is the EHA 2011 abstract book, so the genotype table was not seen. The recorded 96 is the ALL group. Open: whether S010 belongs in the IMD evidence at all. It feeds no pooled output, so nothing changes now.
  • S074 (Chen 2019): settled. The rs7309123 genotype counts in Table 4 are 27, 21 and 3 cases and 81, 38 and 1 controls, so 51 cases and 120 controls; Table 3 lists one missing genotype for rs7309123 and the rs3901533 counts total 52 cases, so the missing sample is a case and the study total of 52 stands. This corrects the statement in addendum 35 that the rs7309123 rows were “one case short, to check”. The printed odds ratios 1.622 and 7.532 do not follow from the printed cells (21 and 38 give 1.658 and 7.438) but follow exactly from 20 and 37 for the heterozygotes (also the 47 and 118 printed for the G/G plus C/G row), while 9.000 and 1.846 follow from 21 and 38: the paper is internally inconsistent, apparently a transcription error in the heterozygote cells. The stored estimates are the printed ones and are unchanged; the odds ratios are not stated to be adjusted. C is the effect allele (Table 4 gives the odds ratio per C allele, G/G reference), as in the extraction.

Effect on results

None. S002’s rows were dropped before pooling already, S039 and S010 feed no pooled output, and the S074 estimates are as printed. data/study_corrections.csv now has 31 rows: 30 corrected, 1 needs_decision (S010). Script 45 applies all 30 cleanly.

Not done

The S010 eligibility decision; extraction of the letter’s donor PTX3 counts and their addition to the donor analysis (script 20); the S074 odds ratios against the paper’s supplement, if any.

Addendum 37, 7 November 2026: the Leiden letter in the donor evidence, the S010 exclusion, and the S079 gap

What had been seen. The letter (NEJMc1402787.pdf) and the original article (NEJMoa1211161.pdf); the donor PTX3 evidence of addendum 12 (one study, Fisher 2017) and script 20’s stratum results before this change. The results below were seen when they were written; the S079 sensitivity was run after the pipeline change and is not part of it.

1. The letter’s rows are in the donor evidence (data/extraction_added_rows.csv, add_extraction_rows())

Three rows read from the letter (study S002, donor genotype, the Leiden cohort of de Boer 2011): L0001 (rs2305619, +281A>G, GG against AG+AA, adjusted OR 0.61, 0.20 to 1.92), L0002 (rs3816527, +734A>C, AA against AC+CC, 0.70, 0.25 to 1.94) and L0003 (haplotype h2/h2, 0.65, 0.21 to 2.06; no rsid, so not mappable and not analysed). The genotype counts of the footnote (+281A>G cases 7, 26, 9, controls 10, 31, 13; +734A>C cases 9, 27, 5, controls 14, 34, 11) are stored on L0001 and L0002, but the pipeline uses the adjusted odds ratios. add_extraction_rows() (R/source_verification.R) appends them after drop_duplicate_reports() in scripts 12, 14, 15, 21, 22 and 26; it requires the bundle’s columns and new row ids. No recipient pooling changes (the rows are donor rows).

L0001 maps to a per-copy effect of the h2 class (A at rs2305619) of OR 1.44 (log 0.364, se 0.412): the letter’s GG genotype is h1/h1 in the project’s coding, so an odds ratio of 0.61 for it is a positive h2 effect. L0002 is not used (rs2305619 comes first in the SNP order).

2. Donor pooling and script 20

donor PTX3 evidence studies OR per h2 copy (90% interval) tau
before (Fisher 2017) 1 1.22 (0.60 to 2.25) 0.32
with the letter (S002) 2 1.25 (0.80 to 1.99) 0.23

The median hardly moves and the interval is about 30% narrower. Script 20 was rerun under both truths (the donor draws come from script 12). At 5%, in extra true cases per 1,000 allo-HSCT admissions, the profile-truth results change by at most 0.3 (with the mean-effect draws: ceiling score data stratum 0.23 to 0.34, smoothed 0.63 to 0.77, margins 2.87 to 2.81; realised score data 1.30 to 1.31, smoothed 1.85 to 1.81, margins 2.79 to 2.49), against about 30 needed to reach the stratum MCID; the upper 95% bound of the stratum gain falls (smoothed, ceiling, mean: 0.00370 to 0.00306). The conclusion of addendum 14 stands. The evidence file’s PTX3 donor study count, hard-coded in script 20, is now 2.

The baseline stratum file (genetic_donor_baseline_stratum*.csv) also differs from the committed one in the fourth to fifth decimal (for example true positives per 1,000 allo admissions 151.572 to 151.566). It does not involve the donor evidence; the difference was not investigated (a different R version from the one that wrote the committed files is the likely cause).

3. S010 is excluded from the evidence base (data/study_corrections.csv)

S010 (Ozdemir 2011) tests ALL patients against healthy controls and reports no infection-by-genotype comparison (addendum 36); only an EHA abstract book was available. eligible_confirmed is changed from yes to no, with the reason recorded. It fed no pooled output, so no result changes. In the PRISMA diagram the included records would go from 81 to 80 and the extracted studies from 63 to 62 once the exclusion is entered in Covidence; scripts/44_prisma_flow.R still says 81. The decision is reversible if the full article turns out to report an infection-by-genotype comparison.

4. The S079 gap

S079 (Cunha 2014) has the best-known donor PTX3 results, but its extraction rows carry no rsid and are flagged rsid_unresolved, so the pipeline leaves them out of the donor pooling. A sensitivity analysis (scripts/46_donor_ptx3_s079_sensitivity.R, in memory only, the extraction is not changed) gives its rows the rsids of the SNPs they report and a donor label:

donor PTX3 set studies OR per h2 copy (90% interval) tau
Fisher 2017 and the letter (the pipeline) 2 1.25 (0.80 to 1.99) 0.23
plus S079 discovery hazard ratio (V1698) 3 0.91 (0.51 to 1.63) 0.54
plus S079 confirmation odds ratio (V1703) 3 1.00 (0.59 to 1.64) 0.43

S079’s own per-copy effects are 0.42 (discovery) and 0.55 (confirmation), the opposite sign to Fisher (1.24) and the letter (1.44). The reason is the coding: Cunha’s risk genotype GG and risk haplotype G-A (their h2/h2) are the project’s h1 class, so their risk is protection for the project’s h2 per copy. Adding S079 moves the donor estimate from a modest positive effect to about null, with strong heterogeneity. It is not adopted: the discovery hazard ratio is optimistic (SNPs picked from 22 candidates), the confirmation odds ratio is the cleaner contribution, and the direction of Fisher 2017’s row, whose contrast is “taken from the model label”, has not been checked against that paper. Open: which S079 result should enter the donor evidence, and the Fisher 2017 direction check. The error reported earlier while testing this was in the test harness (calling functions through the script’s environment), not in the pipeline.

Not done

The Fisher 2017 direction check; the decision on S079; the unexplained fourth-decimal shift of the baseline stratum; a rerun of the secondary analyses under R 4.6.1, the version of renv.lock.

Code and outputs: R/source_verification.R (add_extraction_rows()), data/extraction_added_rows.csv, scripts/12, 14, 15, 20 (study count and header), 21, 22, 26, scripts/46_donor_ptx3_s079_sensitivity.R; output/ptx3_donor_effects.csv, ptx3_h2_donor_posterior_draws.csv, ptx3_row_effects.csv, genetic_donor_*.csv, ptx3_donor_s079_sensitivity.csv, ptx3_donor_s079_effects.csv; tests in tests/testthat/test-study-corrections.R.

Addendum 38, 7 November 2026: the pathogen-specificity scenario of Aim 4, and the direction of Fisher 2017’s PTX3 recessive row

What had been seen. Script 43 had not been run (addendum 35, section 3); its model was checked only on synthetic profiles. The direction of Fisher 2017 (S080) was open since addendum 37, where its rs2305619 row (contrast “taken from the model label”) disagreed in sign with Cunha 2014 (S079). Both sets of results below were seen when they were written.

1. The pathogen-specificity scenario (scripts/43_aim4_pathogen_specificity.R, run on the base cohort and the refit baseline)

Design, as in addendum 35. Only a fraction f of cases arises through the pathway the loci act on and the rest are genotype-independent: true risk = (1 - f) x baseline risk + f x risk with the genotype effect, recentred to the baseline event rate. Two ceiling scores: one with the target-pathogen weights (the odds ratio of the grid) and one with weights fitted to the all-mould outcome (the best single weight, with no estimation error). The MCID is the baseline’s (+0.00458 at 5%, +0.00160 at 20%). Grid: odds ratio 1.2 to 3.0, frequency 0.1, 0.3 and 0.5, 1 to 20 independent loci, f = 1, 0.8, 0.6, 0.4 (600 architectures for each f and threshold). f is assumed: the cohort has no pathogen-level outcome. The odds ratio is the effect on the target pathogen’s pathway, not the observed one.

Check. At f = 1 the 1,200 cells reproduce script 23’s exact sweep (largest difference in gain 3.3e-15; in the fitted weight 1.7e-8).

Share of architectures that reach the MCID

f 5%: specific weights 5%: all-mould weights 20%: specific 20%: all-mould
1.0 29.3% 29.3% 69.2% 69.2%
0.8 16.0% 17.2% 56.7% 57.5%
0.6 2.3% 5.3% 30.8% 39.7%
0.4 0% 0% 0% 8.2%

Fewest loci that reach the 5% MCID (frequency 0.3; “none” = none within 20)

odds ratio f = 1 f = 0.8 (specific / all-mould) f = 0.6 (specific / all-mould) f = 0.4
2.0 8 14 / 13 none none
2.5 5 7 / 7 20 / 15 none
3.0 3 5 / 5 15 / 11 none

At f = 0.4 no architecture up to odds ratio 3.0 and 20 loci reaches the 5% MCID. For 10 loci of odds ratio 2.0 at frequency 0.3 (5%), the gain over the MCID is 1.32 at f = 1, 0.81 at f = 0.8, 0.29 (specific) or 0.46 (all-mould) at f = 0.6, and -0.22 (specific) or 0.19 (all-mould) at f = 0.4; in extra true cases per 1,000 admissions 5.2, 2.9, 0.7 or 1.7, and -1.5 or 1.2. The odds ratio that an all-mould analysis would see for that architecture is 1.71, 1.48 and 1.30 at f = 0.8, 0.6 and 0.4.

Reading

  • Dilution costs a lot, and quickly. With 80% of cases genotype-sensitive the loci needed rise by 1.5 to 2 times at an odds ratio of 2; with 60% an odds ratio of 2.0 no longer reaches the 5% MCID with 20 loci; with 40% nothing in the grid does. The four-term panel (equivalent to about 7 loci of odds ratio 1.3 for the 5% threshold in addendum 16) sits well below the line at every f.
  • Weights from the target pathogen overshoot when f < 1. The score with the all-mould weights has the higher gain in 96% of the architectures with f < 1, and the specific-weight score turns harmful at f = 0.4 (negative gain). A score should be weighted for the outcome it is used for, not for the pathway’s own effect.
  • Pathogen-specific variants are the weaker case for a clinical score of any mould disease, because the score has to decide for all moulds; a score aimed at the target pathogen only (for example Aspergillus in an Aspergillus-specific decision) would be the f = 1 case.
  • Not shown. f is an assumption (no pathogen-level outcome in the cohort); independent identical loci, one truth construction (the exact sweep’s, as in script 23); ceiling scores without estimation error (script 25 would add sampling error); the 5% and 20% thresholds only; a single common f for all loci (loci acting on different pathogens are not modelled).

2. Fisher 2017 (S080): the recessive row is probably reversed

Read from the open full text (PMC5428460), because the supplied PDF text was not re-read here. Facts: Table 3 reports PTX3 rs2305619, alleles “A/G”, MAF 0.47, model “Recessive”, HR 1.33 (1.09 to 1.64), and does not say which genotype the model refers to; the footnote reads “Minor/major for PTX3 and TLR4 to keep our model consistent with the original articles, given that the opposite alleles were more frequent in our study”; Table 1 lists the original PTX3 result alongside, with the same allele order (A/G, MAF 0.44) and aHR 2.9 (1.7 to 5.0). Neither Methods nor Results says which allele is the risk allele or that Cunha’s model was repeated. The paper presents the result as a validation.

The extraction took the first-listed allele (A) as the effect allele with the recessive model, which reads AA against the rest. Cunha’s recessive model is GG (risk GG, reference AA+AG). The footnote says the model was kept consistent with the original, and an HR above 1 for the opposite genotype would contradict Cunha, not validate it. So the recessive row is most probably GG against AG+AA, the same contrast as Cunha’s, and the extracted sign is reversed. The paper does not state it, so this is an inference, not a reading.

Effect if reversed (not applied): S080’s per-h2-copy odds ratio is 0.81, not 1.24, and the pooled donor PTX3 effect becomes

donor PTX3 set OR per h2 copy (90% interval) tau
as extracted: S080 and the letter 1.25 (0.80 to 1.99) 0.23
S080 reversed and the letter 0.89 (0.59 to 1.69) 0.31
plus S079 confirmation OR 0.80 (0.55 to 1.27) 0.29
plus S079 discovery HR 0.75 (0.47 to 1.30) 0.43

The three studies that test Cunha’s contrast then agree (the G-A class carries the risk), and the Leiden letter is the one that does not. The other S080 rows (the allelic rows, the SGM1 rows, and the rs3816527 rows, whose recessive effect allele C is also the opposite of Cunha’s AA) share the allele-order footnote and would need the same check. S080 donor rows feed only the donor PTX3 effect, so recipient results are not affected.

Not applied. A correction to V1087 and its neighbours would change the donor PTX3 effect from a modest positive to a modest negative and so the donor layer of script 20 (which moved by at most 0.3 cases per 1,000 allo admissions when the letter was added, addendum 37). It needs your decision, and ideally a look at the PDF’s tables, which the supplied text does not settle.

Not done

The S080 correction decision and the check of its other rows; script 43 with estimation error in the weights; a version with different f for different loci.

Code and outputs: R/aim4_pathogen.R, scripts/43_aim4_pathogen_specificity.R, output/aim4_pathogen_sweep.csv, output/aim4_pathogen_frontier.csv, output/aim4_pathogen_check.csv, output/figures/aim4_pathogen_frontier.png.

Addendum 39, 7 November 2026: Fisher 2017’s recessive rows reversed, and the pathogen-specificity scenario with estimation error in the weights

What had been seen. Addendum 38’s reading of Fisher 2017 (the Table 3 footnote and Table 1, from the open full text, PMC5428460; not the supplied PDF) and its effect on the donor PTX3 pooling. The results below were seen when they were written.

1. The Fisher 2017 correction (decision: applied)

Decision. The recessive rows of Fisher 2017 (S080) are reversed: the recessive contrast is the risk genotype of the original articles (GG for +281A>G, rs2305619; AA for +734A>C, rs3816527) against the other two genotypes, not the opposite one. The grounds are those of addendum 38: the footnote (“Minor/major for PTX3 and TLR4 to keep our model consistent with the original articles, given that the opposite alleles were more frequent in our study”), the original result listed beside it with the same allele order, and the paper’s own description of the result as a validation (an odds ratio above 1 for the opposite genotype would contradict Cunha, not validate it). It remains an inference: the paper never names the genotype. My confidence is about four in five. It is reversible, and it was weighed against the cost of the alternative, leaving a probably reversed sign in the donor evidence. A check of Fisher’s tables against the PDF would settle it.

Rows. Ten corrections in data/extraction_corrections.csv swap the effect and other allele on V1087 (the Table 3 whole-cohort row), V1090 and V1092 (rs2305619, Table 4) and V1095 and V1097 (rs3816527, Table 4), and are recorded as an assistant inference, not a human check. The allelic rows (V1088, V1089, V1091, V1094, V1096) are not changed: the allelic model has no counterpart in the original articles, so the footnote does not settle their allele. Only the donor PTX3 pooling uses these rows (S080 reports donor genotype), so recipient results are unchanged.

Effect. S080’s per-h2-copy odds ratio goes from 1.24 to 0.80 (the mapped value is 0.802, not the reciprocal of 1.24, because the haplotype model is not symmetric). Pooled donor PTX3 effect per h2 copy, with script 46 for the S079 variants (this replaces the S079 table of addendum 37, which used the extracted sign):

donor PTX3 set OR per h2 copy (90% interval) tau
S080 and the Leiden letter (the pipeline) 0.89 (0.59 to 1.69) 0.31
plus S079 discovery hazard ratio 0.75 (0.47 to 1.29) 0.43
plus S079 confirmation odds ratio 0.80 (0.55 to 1.26) 0.29

The donor evidence now points the same way in Fisher 2017 and Cunha 2014, with the Leiden letter the one study that does not. S079 is still not in the pipeline’s donor pooling (rows without rsid), so the pipeline’s value is 0.89.

Script 20 rerun under both truths. At 5% with the profile truth and the mean-effect draws, in extra true cases per 1,000 allo-HSCT admissions: the realised score falls (data stratum 1.31 to 0.47, smoothed 1.81 to 0.70, margins 2.49 to 0.93), the ceiling score barely moves (0.34 to 0.30, 0.77 to 0.68, 2.81 to 2.73), and no stratum or scenario reaches its MCID in any draw (as before). The realised score loses most because the pooled donor estimate for the PTX3 term is now near 1 against a truth drawn from the same posterior. The conclusion of addendum 14 stands: donor genotype adds no more than about 3 cases per 1,000 allo admissions against about 30 needed. The baseline stratum files match the committed ones.

2. The pathogen-specificity scenario with estimation error in the weights (scripts/47_aim4_pathogen_realised.R)

Design. As script 25 on script 43’s scenario: each locus’s weight is an estimate with an independent error of sd sigma (0.10, 0.20, 0.40) around either the target-pathogen effect (specific) or the all-mould fit; 12 replicate discovery studies of 2,000 simulated genotypes; odds ratio 1.5, 1.8, 2.0, 2.5, 3.0; frequency 0.1, 0.3, 0.5; 1 to 20 loci; f = 0.8 and 0.6 (1,800 architectures; f = 1 is script 25, and at f = 0.4 nothing reaches the MCID with exact weights). Check at sigma = 0 against script 43’s exact gains: 288 cells, mean absolute difference 0.0001, largest 0.0008 (MCID 0.00458), simulation noise as in script 25.

Share of architectures whose median replicate reaches the 5% MCID

f weights exact SE 0.1 SE 0.2 SE 0.4
0.8 specific 32% 31% 28% 21%
0.8 all-mould 34% 33% 29% 20%
0.6 specific 4.7% 4.0% 4.0% 1.0%
0.6 all-mould 10.7% 9.7% 5.3% 0%

Fewest loci (median replicate, 5%, frequency 0.3, f = 0.8; “none” = none within 20)

odds ratio exact (specific / all-mould) SE 0.1 SE 0.2 SE 0.4
2.0 14 / 13 14 / 12 15 / 15 none
2.5 7 / 7 9 / 8 7 / 8 10 / 10
3.0 5 / 5 6 / 6 6 / 6 7 / 7

At f = 0.6 only odds ratios of 2.5 and above reach the MCID at all: odds ratio 3.0 needs 14 (specific) or 10 (all-mould) loci at SE 0.1, 15 or 14 at SE 0.2, and 20 or none at SE 0.4 (exact: 15 or 11). The median share of the exact gain that the realised score keeps (cells whose exact gain is at least half the MCID) is 0.96 to 0.97 at SE 0.1, 0.89 to 0.92 at 0.2 and 0.57 (all-mould) to 0.70 (specific) at 0.4. An example, 10 loci of odds ratio 2.5, frequency 0.3, f = 0.8 at 5%: gain over the MCID 1.40 and 1.44 (specific, all-mould) at SE 0.1, 1.36 and 1.42 at 0.2, and 1.04 and 1.09 at 0.4, with 100%, 100% and 75% of replicates reaching it.

Reading

  • Dilution and estimation error add up, but dilution dominates. At SE 0.1 to 0.2 the scenario behaves like the exact one (the loci needed rise by at most one or two); at SE 0.4, the precision of the present evidence in addendum 17, the 5% MCID is out of reach for an odds ratio of 2.0 at f = 0.8 and for every odds ratio below 2.5 at f = 0.6.
  • The advantage of the all-mould weights disappears when the weights are noisy. With exact weights they gain more (96% of cells, addendum 38); at SE 0.4 the all-mould weights keep a smaller share of their gain (0.57 against 0.70), because their centre is smaller while the error is the same, so they are the more affected by the same error. The comparison assumes the same sigma for both centres (the same absolute error on the log odds ratio); a discovery study of the all-mould outcome would have more events and so a smaller error.
  • Not shown. f assumed; independent identical loci; the error is unbiased (no winner’s curse, no locus-specific error, no linkage); thresholds 5% and 20% only (the 20% results are in the files); one common f for all loci.

Not done

A check of Fisher 2017’s tables against the PDF; the same allele-order check of the other studies that list alleles minor/major; script 25-style winner’s curse and locus-specific error in the pathogen scenario.

Code and outputs: data/extraction_corrections.csv (S080, ten rows), R/aim4_pathogen.R (pathogen_cell_realised()), scripts/46_donor_ptx3_s079_sensitivity.R and scripts/20_genetic_donor_stratum.R rerun, scripts/47_aim4_pathogen_realised.R; output/ptx3_donor_effects.csv, ptx3_h2_donor_posterior_draws.csv, ptx3_row_effects.csv, ptx3_donor_s079_*.csv, genetic_donor_*.csv, aim4_pathogen_realised_{sweep,frontier,check}.csv, output/figures/aim4_pathogen_realised_frontier.png; tests in tests/testthat/test-source-verification.R.

Addendum 40, 7 November 2026: Fisher 2017’s tables read in the PDF; the recessive correction is neither confirmed nor reversed

What had been seen. Addendum 39’s correction of Fisher 2017’s recessive rows, made from the footnote as read in the open full text. The PDF (the Zotero copy, text extracted with Ghostscript) was read for Tables 1, 3 and 4, their footnotes, the Methods and the Figure 1 legend.

What the PDF says

  • Table 1 (the original studies): PTX3 rs2305619 alleles A/G, MAF 0.44, aHR 2.9 (1.7 to 5.0), and rs3816527 A/C, MAF 0.29, aHR 2.6 (1.5 to 4.5) (both from the discovery study); the column is footnoted “Major/minor”, and the MAFs are from 1000 Genomes.
  • Table 3 (strict replication, n = 439): rs2305619, donor genome, alleles “A/G*“, MAF 0.47, Recessive, HR 1.33 (1.09 to 1.64), P = .005. The footnote:”Minor/major for PTX3 and TLR4 to keep our model consistent with the original articles, given that the opposite alleles were more frequent in our study.”
  • Table 4 (exploratory), allele column footnoted “Major/minor allele”: rs2305619 A/G, MAF 0.47; rs3816527 C/A, MAF 0.42; recessive hazard ratios 2.44 and 1.54 (rs2305619) and 3.29 and 1.82 (rs3816527), allelic 1.20 to 1.42.
  • Methods and Figure 1. An SNP counts as strictly replicated when the genotype source and the genetic model are the same as in the original; the Figure 1 legend defines AA as homozygous for the major allele, aa as homozygous for the minor allele and *a as dominant for the minor allele.
  • Neither the text nor the tables name the genotype of the recessive PTX3 model, or the risk allele.

What it settles

The MAFs show which allele is listed first. In the project’s haplotype frequencies A at rs2305619 is 0.46 to 0.48 and C at rs3816527 about 0.40, so Fisher’s 0.47 and 0.42 are the frequencies of A and C, the first-listed alleles: the listing is minor/major for PTX3, as the Table 3 footnote says, although the Table 4 header still says major/minor.

That leaves two readings that the PDF does not choose between. Under the paper’s own convention (recessive means aa, homozygous for the minor allele) the rows are AA for rs2305619 and CC for rs3816527, as extracted; under the footnote’s wording (the model was kept consistent with the original articles, whose risk genotypes are GG and AA) they are GG and AA, as corrected in addendum 39. The word “validation” and the strict-replication rule favour the second reading (an odds ratio above 1 for the opposite genotype would not replicate Cunha); the Figure 1 legend and the minor/major listing favour the first. The recomputed effect of an additive-style check does not separate them (an allelic hazard ratio of 1.20 is expected under either).

Decision

The correction of addendum 39 stays, with a lower confidence than addendum 39 stated: about two in three, not four in five. It rests on the footnote’s explicit statement that the model is consistent with the original articles, which is the only sentence that speaks to the question. It is not confirmed by the tables. The donor PTX3 effect under both readings is in addendum 39 (as extracted: 1.25, 0.80 to 1.99; reversed: 0.89, 0.59 to 1.69), and both leave the donor layer far below its MCID (a difference of 1 to 2 cases per 1,000 allo admissions in the realised score, against about 30 needed), so the choice does not change a conclusion.

To settle it: the genotype counts behind Table 3 (not in the paper or its supplement as extracted), or a question to the authors (Hansen, Fred Hutchinson). Fisher 2017’s rs3816527 recessive rows (V1095, V1097) are in the same position.

Not done

The question to the authors; the allele-order check of the other studies listing minor/major.

Addendum 41, 7 November 2026: the pathogen-specificity scenario under the profile-preserving truth; the manuscript text

What had been seen. The global-intercept results of addenda 38 and 39. They are not the ones the paper reports: the pathogen-specificity scripts 43 and 47 recentred the genetic part with one intercept (D5), while every analysis in the paper is on the profile-preserving truth (D27). The mistake was mine and the addenda did not say which truth they used (“the exact sweep’s, as in script 23” is the global one). The profile-truth results below were seen when they were written.

1. What changed in the code

R/aim4_pathogen.R takes a scheme (default genetic_scheme(), so PROSE_SCHEME). Under the profile truth the target-pathogen component has an intercept per clinical profile (profile_shifts(), R/calibration_check.R), so the clinical score is calibrated in every profile and the mixture (the genotype-insensitive part is the baseline risk) is too; scores get a per-profile intercept as in script 31. Scripts 43 and 47 write files ending in _profile under that scheme and leave the global files as they were (the global rerun of script 43 reproduced the committed file exactly). Checks: at f = 1 the 1,200 cells of script 43 reproduce script 31’s profile comparison (largest gain difference 1.5e-16); script 47 at sigma = 0 matches script 43 (288 cells, mean absolute difference 0.00009, largest 0.0007; the MCID is 0.00458). Tests in tests/testthat/test-aim4-pathogen.R cover both truths.

2. Results under the profile-preserving truth (exact weights; the primary)

f 5%: specific weights 5%: all-mould weights 20%: specific 20%: all-mould
1.0 23.8% 23.8% 69.3% 69.3%
0.8 9.3% 10.2% 57.2% 58.0%
0.6 0% 0% 34.7% 41.2%
0.4 0% 0% 4.2% 14.8%

(Share of the 600 architectures that reach the MCID. Under the global truth the 5% shares were 29%, 16% to 17%, 2% to 5% and 0%, so the construction matters here too.)

Fewest loci at the 5% MCID, frequency 0.3 (none = none within 20):

odds ratio f = 1 f = 0.8 (specific / all-mould) f = 0.6 and 0.4
1.8 13 none none
2.0 10 20 / 19 none
2.5 6 11 / 11 none
3.0 4 8 / 7 none

For 10 loci of odds ratio 2.0 at frequency 0.3 (5%) the gain over the MCID is 1.07 at f = 1, 0.65 (specific) or 0.68 (all-mould) at f = 0.8, 0.22 or 0.37 at f = 0.6 and -0.20 or 0.15 at f = 0.4; in extra true cases per 1,000 admissions 3.5, 1.7 or 2.4, -0.2 or 1.3, and -2.0 or 0.9. The odds ratio an all-mould analysis would see is 1.64, 1.44 and 1.28 at f = 0.8, 0.6 and 0.4. The all-mould weights have the higher gain in 95% of the cells with f < 1. At f = 1 the best single weight under this truth is 1.90 for a true 2.0 (the profile intercepts bend the logistic relation), with no difference in gain.

3. With error in the weights (script 47, profile truth, f = 0.8 and 0.6)

At f = 0.6 nothing reaches the 5% MCID even with exact weights, so nothing does with error. At f = 0.8 the share whose median replicate reaches it is 18% (all-mould) and 18% (specific) at sigma = 0.10, 16% and 17% at 0.20, and 4% and 9% at 0.40 (exact weights on the same grid: 20% and 19%). The median share of the exact gain that the realised score keeps (cells whose exact gain is at least half the MCID) is 0.96 and 0.97 at 0.10, 0.87 and 0.91 at 0.20, and 0.53 (all-mould) and 0.72 (specific) at 0.40. Fewest loci at f = 0.8, frequency 0.3, 5% (specific / all-mould; exact 11 / 11 and 8 / 7):

odds ratio sigma 0.10 sigma 0.20 sigma 0.40
2.0 none none none
2.5 11 / 10 10 / 10 18 / none
3.0 7 / 7 9 / 9 10 / 13

Reading

  • Dilution is the larger effect, and the profile truth makes it larger than the global truth did. At 80% the loci needed roughly double; at 60% or less nothing in the grid reaches the 5% MCID. The qualitative reading of addenda 38 and 39 stands (all-mould weights are better with exact weights; they lose their advantage when noisy, because their centre is smaller for the same error), but the numbers there are the global-truth ones and should not be quoted.
  • Not shown: f is assumed; independent identical loci; unbiased error with the same sigma for both centres; thresholds 5% and 20%; one common f.

4. The manuscript

manuscript.qmd now describes the scenario in the methods (a bullet after the architecture sweep) and the results (a paragraph after the architecture figure), adds a sentence to the abstract and to “With larger effects or more loci”, and replaces “Two planned analyses are not yet done” by one (locus-specific error, winner’s curse and linkage). The donor-genotype results paragraph, stale after addenda 37 and 39, now reads from the profile-truth rerun of script 20: 0.0 to +0.5 extra true cases per 1,000 allo admissions at 5% (about 30 needed) and 15 to 25 at 20% (about 12 needed), with the pooled donor PTX3 effect 0.89 (0.59 to 1.69), two PTX3 donor studies; the limitation on the thin evidence cites the inferred Fisher 2017 direction.

Not done

Locus-specific error, winner’s curse and linkage in the pathogen scenario; a different f for different loci.

Code and outputs: R/aim4_pathogen.R, scripts/43_aim4_pathogen_specificity.R, scripts/47_aim4_pathogen_realised.R, output/aim4_pathogen_{sweep,frontier,check}_profile.csv, output/aim4_pathogen_realised_{sweep,frontier,check}_profile.csv, output/figures/aim4_pathogen_frontier_profile.png, output/figures/aim4_pathogen_realised_frontier_profile.png; tests in tests/testthat/test-aim4-pathogen.R.

Addendum 42, 7 November 2026: locus-specific precision, the winner’s curse and incomplete tagging in the pathogen-specificity scenario

What had been seen. Addendum 41’s results. The planned analysis “locus-specific error, winner’s curse and linkage in the architecture sweep” (addenda 16, 17 and the manuscript) was not done. This addendum does it inside the pathogen-specificity grid, not in the main sweep of scripts 23 and 25, and under the profile-preserving truth only. The results below were seen when they were written.

Design (scripts/48_aim4_pathogen_stress.R, pathogen_cell_stress() in R/aim4_pathogen.R)

As script 47 (12 replicate discovery studies of 2,000 simulated genotypes; the mixture truth of addendum 41; both centres of the weights), at f = 1 and 0.8 and sigma = 0.10 and 0.20, on odds ratios 2.0, 2.5 and 3.0, frequencies 0.1, 0.3 and 0.5 and 1 to 20 loci (180 architectures for each f), with five scenarios, each departure alone and all three together:

  • locus: the loci differ in frequency (log-normal spread 0.35 around the nominal one, bounded to 0.02 to 0.50) and the error of each weight is inversely proportional to the square root of 2 p (1 - p), equal to sigma at the nominal frequency; the true dosage distribution stays an exact convolution.
  • curse (winner’s curse): the discovery study screens five times as many loci as the score has (the rest null), and the score takes the k loci with the largest z, with their estimated weights.
  • tag (incomplete tagging): the scored genotype is a tag correlated r = 0.7 with the causal one (each chromosome copies the causal allele with probability 0.7, otherwise draws independently); the estimated weight is centred on 0.7 times the causal effect, the marginal per-allele effect to a first approximation.
  • all: the three together.

Check at sigma = 0 (base scenario against script 43’s exact profile gains): 288 cells, mean absolute difference 0.0001, largest 0.0009 (MCID 0.00458). Linkage among the causal loci themselves is not modelled, and each departure is run at one setting (r = 0.7; a spread of 0.35; a five-fold candidate pool).

Results

Share of the 180 architectures whose median replicate reaches the 5% MCID (exact weights on the same grid: 63% at f = 1, 31% specific and 34% all-mould at f = 0.8):

f weights sigma base locus curse tag all
1.0 specific 0.10 62% 63% 61% 6% 8%
1.0 specific 0.20 61% 60% 59% 3% 0%
1.0 all-mould 0.10 62% 63% 61% 12% 9%
1.0 all-mould 0.20 59% 60% 58% 6% 0%
0.8 specific 0.10 29% 28% 31% 0% 0%
0.8 specific 0.20 25% 26% 28% 0% 0%
0.8 all-mould 0.10 29% 30% 31% 0% 0%
0.8 all-mould 0.20 25% 25% 15% 0% 0%
  • Locus-specific precision changed nothing (the loci needed and the share are within 1 to 2 points; 99% to 100% of the base gain is kept).
  • The winner’s curse changed almost nothing, because loci of odds ratio 2 or more stand out from null ones: 99% to 100% of the selected loci were true at sigma = 0.10 and 90% to 100% at 0.20 (79% to 92% for the all-mould weights at f = 0.8). The exception is the all-mould weights at sigma = 0.20 and f = 0.8 (15% against 25%): their smaller effect lets null loci in.
  • Incomplete tagging is the one that matters: a tag correlated 0.7 keeps 42% to 49% of the base gain (the median over cells whose base gain is at least half the MCID), and cuts the share reaching the MCID to 3% to 12% at f = 1 and to none at f = 0.8. At frequency 0.3, f = 1 and sigma = 0.10, an odds ratio of 2.5 needs 20 loci with tags and 6 with the causal variants, and an odds ratio of 3.0 needs 11 against 4. With all three departures the share is 0% to 9%.

Reading

  • The earlier results are best cases in one respect that matters. The architecture frontiers assume the scored variant is the causal one. At a correlation of 0.7 (r squared 0.49) the loci needed more than double for the architectures near the frontier, and those that needed 10 or more loci do not reach the MCID within 20. Real tag-causal correlations are often higher after imputation, so 0.7 is a moderate setting, not a worst case; only one value was run.
  • The winner’s curse is not the main danger for effects of this size. It would matter more for small effects, which do not reach the MCID in any case, and for larger candidate pools (the pool here is five times the score).
  • Not shown: linkage among the causal loci (which would change the variance of the true genetic score and the redundancy of the weights); other values of r, the frequency spread and the pool; the 20% threshold (in the files); the global truth; the main sweep of scripts 23 and 25.

Not done

Linkage among the causal loci; a sweep over r, the pool size and the frequency spread; the same stress tests in the exact sweep.

Code and outputs: R/aim4_pathogen.R (pathogen_cell_stress()), scripts/48_aim4_pathogen_stress.R, output/aim4_pathogen_stress_{sweep,frontier,check}_profile.csv, output/figures/aim4_pathogen_stress_frontier_profile.png; test in tests/testthat/test-aim4-pathogen.R.

Addition, 7 November 2026 (later the same day): the tagging stress test over r (scripts/49_aim4_pathogen_tagging.R)

Incomplete tagging was the only departure that mattered, and it was run at one correlation. Script 49 repeats it at r = 0.5, 0.7, 0.9 and 1.0 (r = 1 is the causal variant itself; r squared 0.25, 0.49, 0.81 and 1), alone, at f = 1 and 0.8, sigma = 0.10, on the same 180 architectures per f (12 replicate studies each), under the profile-preserving truth.

f weights r = 1.0 r = 0.9 r = 0.7 r = 0.5
1.0 specific 61% 52% 8% 0%
1.0 all-mould 61% 52% 10% 0%
0.8 specific 32% 12% 0% 0%
0.8 all-mould 33% 16% 0% 0%

(Share of the 180 architectures whose median replicate reaches the 5% MCID.) The share of the gain that the tag keeps, against the causal variant (median over cells whose causal gain is at least half the MCID), is 0.77 to 0.82 at r = 0.9, 0.40 to 0.49 at 0.7 and 0.15 to 0.24 at 0.5: it follows r squared (0.81, 0.49, 0.25), as expected when the tag carries a fraction r of the effect and r of the signal. For 10 loci of odds ratio 2.5 at frequency 0.3 (f = 1, 5%), the gain over the MCID is 1.53 at r = 1, 1.17 at 0.9, 0.79 at 0.7 and 0.34 at 0.5.

Fewest loci at the 5% MCID, frequency 0.3, target-pathogen weights (“none” = none within 20):

f odds ratio r = 1.0 r = 0.9 r = 0.7 r = 0.5
1.0 2.0 10 12 none none
1.0 2.5 6 7 20 none
1.0 3.0 4 5 13 none
0.8 2.0 20 none none none
0.8 2.5 11 14 none none
0.8 3.0 7 12 none none

At the 20% threshold the loss is smaller: at f = 1 the share reaching the MCID is 96% at r = 1, 94% at 0.9, 86% at 0.7 and 53% to 56% at 0.5; at f = 0.8, 91% to 92%, 88%, 71% to 75% and 0% to 8%.

Where the loss starts. At once, and in proportion to r squared: a tag at r = 0.9 already loses a fifth of the gain and needs one to five more loci (one to two at f = 1, three to five at f = 0.8). Between 0.9 and 0.7 the frontier leaves reach for most architectures near it, because the gain falls through the MCID; at 0.5 nothing in the grid reaches it at 5%. A causal variant that is typed or well imputed (r above about 0.95) is therefore what the earlier frontiers assume. Not shown: other seeds of the candidate pool, locus-specific r, and r for the all-ancestry case.

Code and outputs: scripts/49_aim4_pathogen_tagging.R, output/aim4_pathogen_tagging_{sweep,frontier}_profile.csv, output/figures/aim4_pathogen_tagging_frontier_profile.png.

Addendum 43, 7 November 2026: linkage among the causal loci in the pathogen-specificity scenario

What had been seen. Addendum 42 left linkage among the causal loci unmodelled. This is the last of the three departures planned for the architecture sweep, again inside the pathogen-specificity grid and under the profile-preserving truth only. The results below were seen when they were written; I expected linkage to make the requirements harder, and it did not.

Design (scripts/50_aim4_pathogen_linkage.R; dosage_pmf_linked() and pathogen_cell_linked() in R/aim4_pathogen.R)

The k causal loci form blocks of four adjacent loci whose alleles are correlated rho = 0, 0.3 or 0.6 on each chromosome (a shared draw is copied to a locus with probability sqrt(rho), so the pairwise correlation is exactly rho); blocks and chromosomes are independent. The true dosage distribution is exact (a mixture of binomials convolved over two chromosomes and the blocks), with variance 2 k p (1 - p) (1 + (m - 1) rho) for blocks of m; the effect of each locus stays the stated causal (conditional) per-allele odds ratio. Two ways of estimating the weights, with sigma the standard error of one locus’s marginal estimate:

  • marginal: each locus estimated on its own, as in a single-SNP discovery study. The estimate carries the effect of its linked neighbours (centred on 1 + (m - 1) rho times the causal effect) and the errors are correlated within a block.
  • joint: the block estimated together (centred on the causal effect, with the inverse of the genotype correlation matrix as the error covariance, so each weight’s variance is inflated).

Grid and checks as script 48 (f = 1 and 0.8, sigma = 0.10 and 0.20, odds ratios 2.0, 2.5, 3.0, frequencies 0.1, 0.3, 0.5, 1 to 20 loci; 12 replicate studies). Tests: the dosage distribution sums to 1, reduces to the binomial at rho = 0 and has the stated variance; a simulation reproduces the block variance and allele correlation (rho = 0.5: 4.20 against 4.20 and 0.499); at rho = 0 the two estimations agree and at sigma = 0 the joint estimate matches the exact gain.

Results

Share of the 180 architectures reaching the 5% MCID (target-pathogen weights; the exact row is the gain with the causal weights known):

f rho = 0 rho = 0.3 rho = 0.6
1.0 exact 63% 83% 87%
1.0 joint, sigma 0.10 / 0.20 63% / 59% 82% / 82% 86% / 88%
1.0 marginal, sigma 0.10 / 0.20 63% / 59% 76% / 78% 81% / 80%
0.8 exact 31% 64% 76%
0.8 joint, sigma 0.10 / 0.20 33% / 26% 63% / 63% 74% / 73%
0.8 marginal, sigma 0.10 / 0.20 33% / 26% 45% / 44% 48% / 46%

The all-mould weights give the same picture (marginal 58% to 64% at f = 0.8, joint 60% to 76%, at rho of 0.3 and 0.6). At the 20% threshold the share barely moves (91% to 97% at sigma 0.10).

Fewest loci at the 5% MCID, frequency 0.3, sigma 0.10, target-pathogen weights (“none” = none within 20):

f odds ratio exact: rho 0 / 0.3 / 0.6 joint marginal
1.0 2.0 10 / 5 / 4 9 / 4 / 4 9 / 7 / 7
1.0 2.5 6 / 3 / 3 6 / 4 / 3 6 / 4 / 4
1.0 3.0 4 / 3 / 3 4 / 3 / 3 4 / 3 / 3
0.8 2.0 20 / 10 / 7 none / 11 / 8 none / 15 / 13
0.8 2.5 11 / 6 / 4 10 / 6 / 4 10 / 9 / 8
0.8 3.0 8 / 4 / 4 7 / 4 / 4 7 / 7 / 7

The median share of the exact gain that the realised score keeps (cells whose exact gain is at least half the MCID) is 0.93 to 0.99 for the joint estimate at every rho, and 0.76 to 0.86 for the marginal estimate with target-pathogen weights at rho of 0.3 and 0.6 (0.89 to 0.95 with all-mould weights).

Reading

  • Linkage among distinct causal loci does not make the architectures harder; it makes them easier. Positively correlated risk alleles raise the variance of the true genetic score for the same per-locus effect, so with the causal weights known the loci needed at an odds ratio of 2.0 fall from 10 to 5 and 4 (f = 1). This is a property of the model, not a finding about biology: it holds the conditional effect of every locus fixed, so it describes several truly distinct causal variants that happen to be correlated.
  • The cost of linkage is in the estimation. Estimating each locus on its own double counts the linked neighbours (the weights sum to more than the true effect) and loses up to a quarter of the gain, three to five more loci at an odds ratio of 2.0 (f = 0.8: 15 and 13 loci against 11 and 8 with a joint estimate). A joint estimate keeps nearly all of it.
  • What linkage in the usual sense mostly is (one causal signal seen through several correlated variants) is the incomplete tagging of addendum 42, which does hurt. The two should not be added: the favourable result here needs separate causal effects.
  • Not shown: blocks of other sizes, unequal correlations within a block, linkage between blocks, non-additive effects; the global truth; the main sweep of scripts 23 and 25.

Not done

Other block sizes and correlation structures; the stress tests in the exact sweep.

Code and outputs: R/aim4_pathogen.R (dosage_pmf_linked(), pathogen_cell_linked()), scripts/50_aim4_pathogen_linkage.R, output/aim4_pathogen_linkage_{sweep,frontier}_profile.csv, output/figures/aim4_pathogen_linkage_frontier_profile.png; tests in tests/testthat/test-aim4-pathogen.R.

Addendum 44, 8 November 2026: the stress tests on the main architecture grid

What had been seen. Addenda 42 and 43 ran the stress tests inside the pathogen-specificity grid, where f < 1 was part of the design. The paper’s main architecture frontier (f = 1, scripts 23, 25 and 31 to 34) had not been tested against them. This addendum applies them to the main grid, at f = 1, under the profile-preserving truth. The results were seen when they were written; one of them contradicts a sentence of the abstract (see Reading).

Design (scripts/51_aim4_main_stress.R)

The realised score of the main grid (odds ratio 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 2.0, 2.5, 3.0 x frequency 0.1, 0.3, 0.5 x 1 to 20 loci; 600 architectures), at sigma = 0.10 and 0.40 (12 replicate discovery studies of 2,000 simulated genotypes), with the scenarios of addenda 42 and 43: base, locus (unequal frequencies and precision), curse (the winner’s curse, k loci from 5 k candidates), tag0.9 and tag0.7 (the scored variant a tag correlated 0.9 or 0.7 with the causal one), all (locus, curse and tag0.7 together), and linked0.3 and linked0.6 (blocks of four causal loci with allele correlation 0.3 or 0.6, weights estimated per locus, “marginal”, or per block, “joint”). The target-pathogen score is used (at f = 1 it is the true-weight score). Check: the base scenario reproduces the existing main realised sweep of script 32 (the profile comparison): share reaching the 5% MCID 23.3% and 15.5% against 23.3% and 15.3%, and a correlation of 0.992 in the median gain over the 1,200 cells (different seeds). With the causal weights known, 23.8% of the 600 architectures reach the 5% MCID.

Results

Share of the 600 architectures whose median replicate reaches the MCID:

scenario 5%, sigma 0.10 5%, sigma 0.40 20%, sigma 0.10 20%, sigma 0.40
base 23.3% 15.5% 67.3% 46.7%
locus 23.0% 15.0% 67.0% 47.5%
curse 22.8% 8.8% 65.3% 24.7%
tag 0.9 17.0% 10.3% 61.3% 39.0%
tag 0.7 1.5% 0% 44.5% 18.3%
all (tag 0.7) 1.7% 0% 40.0% 2.8%
linked 0.3, joint 41.5% 32.8% 80.3% 66.5%
linked 0.3, marginal 34.8% 30.8% 72.8% 67.2%
linked 0.6, joint 52.0% 43.5% 85.3% 74.8%
linked 0.6, marginal 38.3% 36.0% 73.8% 72.5%

Median share of the independent-loci, causal-weights gain that the realised score keeps (5%, cells whose exact gain is at least half the MCID), sigma 0.10 and 0.40: base 0.98 and 0.70; locus 0.96 and 0.68; curse 0.97 and 0.16; tag 0.9 0.79 and 0.48; tag 0.7 0.46 and 0.13; all 0.43 and -0.32 (a net loss). Fewest loci at the 5% MCID, frequency 0.3 (median replicate; none = none within 20; exact weights 13, 10, 6 and 4 loci at odds ratios 1.8, 2.0, 2.5 and 3.0):

sigma odds ratio base tag 0.9 tag 0.7 linked 0.3, marginal linked 0.6, marginal
0.10 1.8 13 18 none 8 7
0.10 2.0 11 14 none 7 6
0.10 2.5 6 6 19 4 4
0.10 3.0 4 5 16 3 3
0.40 2.0 13 none none 8 7
0.40 2.5 7 10 none 4 3
0.40 3.0 5 7 none 3 3

Reading

  • The main frontier survives the departures that matter less and is sensitive to tagging. Unequal precision changes nothing; the winner’s curse costs nothing at sigma 0.10 and at 0.40 lowers the share from 16% to 9% (the gain kept falls from 0.70 to 0.16, because small effects are mixed with nulls); a tag at 0.9 removes a fifth of the gain and one to five loci, and a tag at 0.7 removes more than half, so that at an odds ratio of 2.0 no number of loci up to 20 reaches the 5% MCID. At 20% the losses are smaller but the ordering is the same.
  • Linkage among the causal loci raises the share, and this contradicts the abstract’s sentence for independent loci. With the effect of each locus unchanged, odds ratios of 1.4 and 1.5 reach the 5% MCID in some architectures (joint estimates at allele correlation 0.6: 11 and 24 of the 60 architectures at 1.4 and 1.5, at sigma 0.10; marginal estimates 0 and 9; at sigma 0.40 the joint estimates give 0 and 9; at frequency 0.3 an odds ratio of 1.6 needs 13 to 17 loci with marginal estimates). “No panel of up to 20 loci with per-allele odds ratios of 1.5 or less reached the MCID” therefore holds for independent loci only; the abstract and results now say so. This comes from holding every locus’s conditional effect fixed in a correlated block (addendum 43); a block of four closely linked causal variants each with an odds ratio of 1.5 is a generous assumption, and the four-term panel of the paper is not affected.
  • Not shown: f < 1 (addenda 42 and 43); other values of the tag correlation and the block structure; the global truth; sigma 0.20 and 0.05 of the main realised sweep; the exact gain under linkage (the ratios for linked scenarios are against the independent-loci exact gain and can exceed 1).

Not done

Nothing remains of the planned analysis of locus-specific error, the winner’s curse and linkage; what is open is the choice of settings (one value of each departure).

Code and outputs: scripts/51_aim4_main_stress.R, output/aim4_main_stress_{sweep,frontier}_profile.csv, output/figures/aim4_main_stress_frontier_profile.png.

Addendum 45, 11 November 2026: figures restyled; a forest plot and an icon array added to the manuscript

What had been seen. All results up to addendum 44. This addendum changes presentation only; no analysis was rerun and no number in the text changes, except that two quantities already implied by the outputs are now stated in a caption (below).

  • Style. R/theme_jama.R holds a blue-grey palette and theme_jama() (sans-serif, thin axes, no panel background, no title or caption inside the figure); _setup.R sources it. The default theme of the other site pages is unchanged. Scripts 27, 34 and 44 and the manuscript’s NRI chunk use it, at 300 dpi. The global-truth versions of the same figures are restyled too, because they come from the same scripts.
  • Architecture figure. Redrawn as four bands of the gain relative to the MCID (under a quarter, a quarter to half, half to the MCID, reaches the MCID) in place of a continuous colour scale with a contour line, with the architecture that has the four-term panel’s gain marked (7 loci of odds ratio 1.3 at frequency 0.3: 0.00056, the panel’s ceiling gain at 5%). The caption is changed to match.
  • Attribution figure. Horizontal stacked bars with the shares printed on them.
  • PRISMA diagram. Blue-grey boxes and arrows (named Graphviz colours; the package does not accept hex codes).
  • New: forest plot (scripts/52_manuscript_figures.R, output/figures/fig_forest.png, Figure 2): the study effects and the pooled effect for PTX3, CLEC7A Y238X, TLR4 and CD209, per copy of the risk haplotype class, primary analysis. Study intervals are 90% (estimate +- 1.645 standard errors) to match the pooled 90% credible intervals.
  • New: icon array (output/figures/fig_icon_array_profile.png, Figure 3; counts in output/fig_icon_array_counts.csv): the primary result at 5% per 10,000 admissions, so that each icon is a whole case (the text gives the same quantities per 1,000). Of 326 cases the clinical score finds 229, the four-term score with true effects adds 11, the MCID asks for 46, and 51 are missed either way. Two figures are new to the text: the 11 added cases come with 99 more false positives per 10,000 admissions (the flagged share rises from 15.67% to 16.77%), so the net-benefit gain equals 5.6 cases against the 45.8 of the MCID. The icons show the raw 11; the caption gives the net figure.

Code and outputs: R/theme_jama.R, _setup.R, scripts/27_writeup_figures.R, scripts/34_calibration_check_figures.R, scripts/44_prisma_flow.R, scripts/52_manuscript_figures.R, output/figures/, output/fig_icon_array_counts.csv, manuscript.qmd.

Addition, 11 November 2026 (later the same day): the “how the bar moves” figure

A third figure from scripts/52_manuscript_figures.R (output/figures/fig_frontier_moves_profile.png, placed at the end of the architecture results): the bands of the architecture figure at a risk-allele frequency of 0.3 and the 5% threshold, with the frontiers of three departures drawn on them, read from existing outputs and not rerun. The tag lines (r = 0.9 and 0.7) come from script 51 (estimated weights, SE 0.10, median replicate); the line for 80% of cases due to the pathogen comes from script 43 (exact all-mould weights). The lines therefore mix assumptions (estimation error in two, not in the third), and the caption says so. The stress grids have fewer odds ratios than the bands (1.8, 2.0, 2.5 and 3.0 at the upper end), so the segments between computed points are drawn for reading only. Fewest loci shown: tag 0.9, 18, 14, 6 and 5 at odds ratios 1.8, 2.0, 2.5 and 3.0; 80% pathogen share, 19, 11 and 7 at 2.0, 2.5 and 3.0; tag 0.7, 19 and 16 at 2.5 and 3.0.

Addition, 11 November 2026 (later the same day): the figure folder, and the website figures in the same style

  • The website pages (baseline, decision curves, evidence, mapping) now use theme_jama() and the blue-grey palette for their eight figures; _setup.R sets it as the default theme, and the decision-curve helpers in R/decision_curve.R take optional colours (the defaults are unchanged, so the older scripts that call them give the same figures as before).

  • manuscript_figures/ (scripts/53_export_figures.R): every figure of the manuscript (9) and of the website pages (8) as PNG at 300 dpi, with the resolution written into the file header (R/figure_export.R), a manifest.csv and a README. The manuscript files are numbered as the rendered page numbers them.

  • PRISMA diagram. The package’s PNG export is a screen-resolution image (598 pixels wide). scripts/44_prisma_flow.R now renders it from the SVG at 300 dpi, 7 inches wide, and writes the three rotated side labels into the SVG (the package adds them with JavaScript, so its SVG lacks them).

  • Tables. gt_jama_style() (R/theme_jama.R) gives every gt() table on the pages the same blue-grey look (navy rules above and below, a pale band under bold column labels, light row rules, no vertical lines); _setup.R wraps gt() so that no page changes. The Quarto cache (_freeze/) was cleared once so that the pages re-ran.