What it does
One estimator. Four ways to run it.
-
1
Hold out the score
The prognostic score trains on patients outside the analysis half.
-
2
Select groups
Permutation-assisted group lasso, calibrated against a null.
-
3
Tune one value
PPI++ estimates a single tuning scalar from labeled data.
-
4
Report
Effect, interval, design projection and SAP appendix.
Python package / CLI / R package / calculator
Null sweep
8 scenarios. 400 trials each. True effect zero.
| Scenario | Unadjusted | PPI++ single | L1 lasso |
|---|---|---|---|
| Good score | 4.50 | 4.50 | 6.00 |
| Weak score | 5.00 | 4.25 | 5.75 |
| Poorly estimated | 6.25 | 6.75 | 8.75* |
| Noise added | 4.50 | 5.25 | 6.00 |
| Predicted shuffled | 4.50 | 4.75 | 6.00 |
| Bias added | 4.50 | 4.50 | 6.00 |
| Sign flipped | 4.50 | 4.50 | 6.00 |
| History shift | 4.50 | 4.00 | 6.00 |
Rejection rate at alpha 0.05. 400 replicates per row. Single-tuning column shown; the 24 cells include per-arm and lambda=1. * p = 0.0011 against no inflation; every other cell p > 0.05.
Interval width relative to unadjusted
PPI++ single-tuning. Lower is narrower. 400 paired replicates each.
A shuffled score gives up and falls back to the unadjusted analysis. History shift costs part of the gain.
ACTG 175
527 patients / CD4 at week 20 / one split
| Method | Estimate | 95% interval | Width |
|---|---|---|---|
| Unadjusted | 65.73 | 40.22 to 91.24 | 51.02 |
| L1 lasso | 65.72 | 45.53 to 85.90 | 40.37 |
| Group-lasso PPI++ | 66.89 | 45.90 to 87.89 | 41.99 |
Negative control
1,000 permuted labels
All three are consistent with alpha 0.05.
The L1 lasso is narrower here, and it is the method that fails the null sweep. It selects covariates on the same patients it estimates on. The adjusted row uses a score fitted on held-out ACTG controls, not the TCGA expression score.
TCGA-BRCA
780 ER-labelled samples / 5-fold / 20,227 genes
83 genes in the final fit
ESR1, PGR, FOXA1 among the strongest
0 shared patients with the trial
0 expression columns in ACTG 175
The expression score is real and external. It is not transported: the trial has no expression data and the outcomes are on different scales.
What the calculator returns
Simulated 720-patient file / 80% power / $4,200 per patient
App, CLI and API agree to 0.0 on identical input. Cost and time are projections, not observed savings.
101 Python tests / 4 R test files / 460 parity values, max difference 7.4e-9 / R CMD check OK.
What this does not show
- One ACTG split. No split-to-split interval.
- The trial score is internal. The TCGA score is external but cannot be applied.
- The external-cohort PPI term is a simulation result.
- Continuous outcomes and additive effects only.
- Cost and recruitment time are model projections.