📚 Part of the GLPI-103 Regulatory Dossier — Reader's Guide. This article shows the live document; edits to the source appear here automatically.
This is a mock / simulation document, made for a portfolio and for learning. The drug (GLPI-103), the sponsor, the people, and the data are all fictional. It is not a real regulatory submission and has no clinical, legal, or regulatory standing. What is real is the shape of the thing — the document structure, the standards it follows, and the analysis methods; the content inside is illustrative.
What it is. The Statistical Analysis Plan — exactly how the trial will be analysed, locked before the blind is broken.
Why it exists. The SAP removes analyst discretion: it fixes the estimands, primary model (MMRM), missing-data handling, and multiplicity control in advance, so the reported result cannot be reverse-engineered from the data.
How it is produced here. The numbers come straight from the study's simulated Phase 3 dataset — they are calculated from the data, not typed in by hand. That is why you see the same figures repeated across the protocol, the analysis plan, the report, and the summaries: they all read from the same source.
Format & governing standard. —
The SAP is locked before the blind is broken. Its whole job is to remove the analyst's freedom — the exact model, how missing data are handled, and the order in which things are tested are all fixed in advance — so the reported result can't be reverse-engineered out of the data.
No comments yet. Be the first to say something!
| Field | Value |
|---|
| Document ID | SAP-301 |
| Version | 3.0 (full submission-grade) |
| Status | Final (prior to database lock and unblinding) |
| Study No. | GLPI103-301 |
| Sponsor | Virtual Biopharma Inc. |
| Standard(s) | ICH E9 · E9(R1) (estimands) · E3 (alignment) · E6(R3) |
| Confidentiality | Confidential |
Statistical methods, model specifications, and analysis-set definitions correspond exactly to the executable analysis suite (
src/biostat/:run_analysis.R,mmrm_estimands.R,missing_data_sensitivity.R,secondary_subgroup.py,survival_recurrent.R) and the ADaM datasets (ADaM-SPEC-301); the table/listing/figure shells map to the generated outputs (outputs/), and each result is traced in the Analysis Results Metadata (ARM-301). This SAP is finalized before unblinding. Companions: ADaM-SPEC-301, TLF-301, SAR-301 (executed report).
| Version | Date | Author | Summary of Change |
|---|---|---|---|
| 1.0 | 2026-06-29 | Biostatistics | Initial SAP (skeleton) |
| 2.0 | 2026-06-29 | Biostatistics | Full SAP (estimands, multiplicity, missing data, safety) |
| 3.0 | 2026-06-29 | Biostatistics | Submission-grade expansion — full prose detail on conventions, model specifications, assumptions/diagnostics, all secondary analyses, sensitivity framework, safety analysis detail, ARM |
ANCOVA analysis of covariance · CMH Cochran–Mantel–Haenszel · CFB change from baseline · CI confidence interval · DF degrees of freedom · FAS full analysis set · ICE intercurrent event · KR Kenward–Roger · LS least squares · MAR/MNAR missing at random / not at random · MI multiple imputation · MMRM mixed model for repeated measures · PMM pattern-mixture model · PPS per-protocol set · SAF safety set · SE standard error · TEAE treatment-emergent adverse event.
This Statistical Analysis Plan (SAP) describes in detail the statistical methods for the analysis of efficacy, safety, and other data from Study GLPI103-301, a Phase 3, randomized, double-blind, double-dummy, active-controlled, parallel-group, multicenter trial of GLPI-103 (intravenous and oral) versus oral semaglutide in adults with type 2 diabetes mellitus (T2DM) inadequately controlled on metformin. The SAP elaborates the statistical sections of the protocol (PROT-301 §11) and is finalized prior to database lock and unblinding. Any deviation from the planned analyses identified after finalization will be documented in this SAP (with version control) or described as post-hoc in the Clinical Study Report (CSR-301).
The objectives and endpoints are reproduced from PROT-301 §2. The primary objective is to demonstrate superiority of GLPI-103 (IV and Oral) versus oral semaglutide on change from baseline (CFB) in HbA1c at Week 52. Key secondary objectives address body-weight reduction, attainment of HbA1c <7.0%, and ≥10% body-weight reduction at Week 52; additional secondary endpoints include FPG, blood pressure, and cardiometabolic biomarkers.
Secondary endpoints share the primary ICE framework. Responder endpoints use a composite strategy (discontinuation/missing → non-responder) for the main analysis. Sensitivity estimands: a treatment-policy estimand for the rescue ICE (post-rescue data retained) and a trial-product (while-on-treatment) estimand assess robustness to ICE handling.
A total of approximately 900 randomized subjects (≈300 per arm) provides ≥90% power at a two-sided α=0.05 to detect a between-treatment difference of 0.4% in HbA1c CFB versus semaglutide, assuming a common SD of approximately 1.1% and allowing for dropout (per-arm evaluable ≈191; total with dropout inflation ≈624; target 900 for margin — REF-002). The actual number randomized was 900; achieved power for the observed effect sizes is reported in CSR-301.
ABLFL = "Y", VISITNUM = 1).CHG = AVAL − BASE; percent change PCHG = CHG/BASE × 100 (where BASE ≠ 0).Continuous variables are summarized by n, mean, standard deviation, median, minimum, and maximum; categorical variables by frequency and percentage (denominator = number with non-missing data unless otherwise stated). Two-sided 95% confidence intervals and p-values are reported. Partial/missing dates for AE onset and concomitant medications are imputed conservatively per pre-specified rules. No imputation is applied to the primary efficacy variable beyond the model-based handling described in §8.
| Set | Definition | Use | ADaM flag |
|---|---|---|---|
| Full Analysis Set (FAS) | all randomized subjects, analysed as randomized | primary efficacy | FASFL="Y" |
| Per-Protocol Set (PPS) | FAS subjects without major protocol deviations affecting the primary endpoint | supportive efficacy | PPSFL="Y" |
| Safety Set (SAF) | all subjects receiving ≥1 dose, analysed as treated | safety | SAFFL="Y" |
| Completers | subjects with a non-missing Week-52 HbA1c | supportive | derived |
Data note: in the executed dataset major protocol deviations are modeled (53 subjects), so the PPS (847) is a strict subset of the FAS (900); the primary conclusions are consistent between FAS and PPS, supporting robustness (CSR-301 §10.2; ADRG, DEF-301).
MMRM ('mixed model for repeated measures') is a way of analysing results measured at many visits that uses every visit a patient contributed, instead of throwing away people who drop out or crudely carrying their last value forward. It handles dropouts under a reasonable 'missing at random' assumption and keeps the statistics honest at this sample size.
The primary endpoint (CFB in HbA1c at Week 52) is analysed on the FAS using analysis of covariance:
CHG ~ TRT01A + BASE + STRAT_HBA1C + STRAT_BMI
where TRT01A is the randomized treatment (3 levels, reference = Semaglutide Oral), BASE is the baseline HbA1c, and STRAT_HBA1C/STRAT_BMI are the randomization strata (derived from baseline values; consistency verified in the ADRG). The model is fitted by ordinary least squares; least-squares means and their standard errors are obtained by the method of estimated marginal means.
For each arm, the LS-mean CFB and 95% CI are reported. The pairwise differences of each GLPI-103 arm versus semaglutide, with 95% CIs and p-values (no multiplicity adjustment within the contrast set beyond the testing hierarchy of §7.3), are the primary inferential quantities. Superiority is concluded if the upper bound of the 95% CI for the difference (GLPI-103 minus semaglutide) is below zero and the corresponding hierarchy step is significant.
Test enough things and something will look significant by chance. A fixed-sequence 'gatekeeping' procedure sets the order of tests in advance and only proceeds to the next once the previous one passes, which controls that false-positive risk across the whole family of endpoints.
Family-wise type-I error is strongly controlled at the two-sided 0.05 level by a pre-specified fixed-sequence (hierarchical) procedure. Each hypothesis is tested at α=0.05 only if all preceding hypotheses were rejected:
Normality of residuals and homogeneity of variance are assessed graphically (residual and Q–Q plots); influential observations are examined. If assumptions are materially violated, a rank-based or robust sensitivity analysis is performed. The covariate-by-treatment interaction (BASE×TRT01A) is examined as a supportive check of the common-slope assumption but is not part of the primary model.
Real trials always have missing data, and the main analysis assumes it went missing for benign reasons. Regulators want to know: what if it didn't? So the plan adds conservative 'reference-based' imputation and a 'tipping-point' analysis that measures exactly how much worse the missing GLPI-103 results would have to be to overturn the conclusion. Superiority survives both.
The primary analysis handles intercurrent events per the estimand (§3.1). For the longitudinal model (§9), missing post-baseline HbA1c values are accommodated by the MMRM under a missing-at-random (MAR) assumption (direct likelihood), which provides valid inference under MAR without explicit imputation. Robustness to departures from MAR is assessed by: (a) pattern-mixture models (PMM) under MNAR assumptions (e.g., a delta-adjustment penalizing missing values in the active arms); (b) reference-based multiple imputation (jump-to-reference / copy-reference) with Rubin's rules; and (c) a tipping-point analysis identifying the magnitude of departure from MAR that would overturn the primary conclusion. Last-observation-carried-forward is not used for the primary analysis.
CHG ~ TRT01A * VISIT + BASE, random = ~1 | USUBJID,
correlation = unstructured (corSymm); AR(1) (corAR1) pre-specified fallback on non-convergence
Restricted maximum likelihood estimation; visits Week 4–Week 52 (VISITNUM 2–8). LS means by arm and visit, with treatment-by-visit contrasts at Week 52, are reported. Degrees of freedom use the Kenward–Roger approximation where the unstructured model converges; the pre-specified AR(1) fallback ensures an estimable, reproducible model otherwise.
Analysed by ANCOVA analogous to the primary model (treatment, baseline value, strata). LS means and pairwise differences versus semaglutide with 95% CIs are reported.
The proportions achieving HbA1c <7.0% and ≥10% weight loss at Week 52 are analysed by logistic regression (treatment, baseline value, strata) and by the Cochran–Mantel–Haenszel test stratified by the randomization factors; risk differences with 95% CIs are presented.
NT-proBNP and hsCRP CFB are analysed by ANCOVA on log-transformed values [MOCK — not in dataset]; SBP/DBP CFB are summarized descriptively and by ANCOVA.
The primary HbA1c treatment effect is examined within pre-specified subgroups — baseline HbA1c (<8.5 vs ≥8.5%), BMI (<30 vs ≥30 kg/m²), age (<65 vs ≥65 years), and sex — using the primary model within each subgroup, displayed as a forest plot of treatment differences with 95% CIs. Treatment-by-subgroup interaction terms are tested as supportive (no multiplicity adjustment; interpreted descriptively).
Subject disposition (screened, randomized, treated, completed, discontinued with reason) is summarized and depicted in a CONSORT diagram. Demographics and baseline disease characteristics (age, sex, race, region, BMI, body weight, HbA1c, FPG, eGFR, disease duration) are summarized by arm and overall. Extent of exposure (duration, dose level reached) and treatment compliance are summarized for the Safety Set.
Treatment-emergent adverse events are coded to MedDRA (version fixed at lock) and summarized by system organ class and preferred term as the number and percentage of subjects with ≥1 event, by arm, overall, by maximum severity, and by relationship. A pre-specified between-arm comparison of nausea incidence (GLPI-103 IV vs semaglutide) uses a test of proportions, reporting the difference, 95% CI, and p-value.
Adverse events of special interest (gastrointestinal events, acute pancreatitis, thyroid C-cell/MTC, hypoglycaemia, cardiovascular/heart-rate) are summarized separately with targeted follow-up data. Hypoglycaemia is classified per international consensus (Level 1 <3.9 mmol/L; Level 2 <3.0 mmol/L; Level 3 severe requiring assistance) and summarized by level and arm.
Clinical laboratory results (hepatic ALT/AST, renal eGFR, haematology) are summarized as CFB and by shift relative to the reference range (shift tables); markedly abnormal values are flagged. Vital signs including heart rate are summarized as CFB by arm. ECG findings are summarized categorically [MOCK].
Deaths, SAEs, and AEs leading to discontinuation are listed and summarized.
No confirmatory interim efficacy analysis is planned. The independent DSMB performs periodic unblinded safety reviews per its charter (TMF-DSMB). Should any interim efficacy/futility assessment be added by amendment, an alpha-spending function (e.g., O'Brien–Fleming) would preserve the overall type-I error, documented in an updated SAP.
Analyses are performed in R (packages nlme, emmeans, broom) and Python (pandas, statsmodels). The analysis is fully reproducible from a fixed random seed (config/config.yaml, seed=42) via the project build (build.py); the verification gates (verify_pipeline, validate_cdisc, reconcile_csr, check_format) provide automated quality control, and CSR results are reconciled to the analysis outputs (reconcile_csr.py).
None at finalization. Any post-hoc analyses will be clearly labeled as such in CSR-301.
| Analysis | Input dataset (filter) | Method | Output artifact |
|---|---|---|---|
| Primary HbA1c CFB W52 | ADLB (FAS, PARAMCD=HBA1C, VISITNUM=8, ANL01FL=Y) | ANCOVA | outputs/stats/ancova_results.csv; Table 14.2.2 |
| Longitudinal HbA1c | ADLB (FAS, VISITNUM 2–8) | MMRM (UN→AR1) | outputs/stats/mmrm_results.csv; Figure 2 |
| Nausea incidence (IV vs Sema) | AE domain + ADSL denominators | test of proportions | outputs/stats/ae_prop_test.csv |
| Demographics & baseline | ADSL / ADLB | descriptive | Table 14.1.3 / Table 1 |
| TEAE summary | AE domain | descriptive | Table 14.3.1 / Table 3 |
| Disposition (CONSORT) | ADSL / ADLB | descriptive | Figure 1 |
| Subgroup forest | ADLB/ADSL (by subgroup) | ANCOVA | Figure 3 |
The planned TLFs and their shells are specified in TLF-301, mapped 1:1 to the generated outputs (outputs/tfl/, outputs/stats/).
| Derived variable | Rule |
|---|---|
BASE | Last non-missing value on/before first dose (ABLFL="Y", VISITNUM=1), per parameter |
CHG | AVAL − BASE |
PCHG | CHG / BASE × 100 (BASE ≠ 0) |
AGEGR1 | <65 / >=65 from AGE |
STRAT_HBA1C | <8.5 / >=8.5 from baseline HbA1c (IRT-recorded; consistency verified) |
STRAT_BMI | <30 / >=30 from baseline BMI |
| Analysis visit | Nominal week mapped to the nearest scheduled visit within ±7 days; the Week-52 window defines the primary timepoint |
| Responder (HbA1c<7.0%) | 1 if Week-52 AVAL < 7.0, else 0; missing → non-responder (composite) |
| Responder (≥10% wt loss) | 1 if Week-52 weight PCHG ≤ −10, else 0; missing → non-responder |
Primary longitudinal model (R nlme):
lme(CHG ~ TRT01A * VISIT + BASE,
random = ~ 1 | USUBJID,
correlation = corSymm(form = ~ 1 | USUBJID), # unstructured
weights = varIdent(form = ~ 1 | VISIT),
method = "REML", na.action = na.omit)
# On non-convergence, the pre-specified fallback is:
lme(CHG ~ TRT01A * VISIT + BASE,
random = ~ 1 | USUBJID,
correlation = corAR1(form = ~ 1 | USUBJID), # AR(1)
method = "REML")
LS means are obtained via emmeans(model, ~ TRT01A | VISIT); Week-52 contrasts versus semaglutide are reported. Degrees of freedom use the Kenward–Roger approximation for the unstructured model.
[1] IV vs Sema (HbA1c) ──► [2] Oral vs Sema (HbA1c) ──► [3] IV vs Sema (weight)
│ │
└─ tested at α=0.05 only if all prior steps rejected ───┘
[3] ─► [4] IV<7.0% ─► [5] IV ≥10% wt ─► [6] Oral weight ─► [7] Oral<7.0% ─► [8] Oral ≥10% wt
Family-wise type-I error strongly controlled at two-sided α=0.05 (fixed sequence).
Hypoglycaemia (international consensus): Level 1 (glucose 3.0–<3.9 mmol/L); Level 2 (<3.0 mmol/L); Level 3 (severe event requiring assistance). Summarized by level and arm (Safety Set). Laboratory shift tables: each analyte is classified relative to the central-laboratory reference range as Low / Normal / High at baseline and at the post-baseline worst value; shift frequencies (baseline category × worst post-baseline category) are tabulated by arm. Markedly abnormal criteria (e.g., ALT/AST >3×ULN; eGFR <45) are flagged separately and reconciled with the AESI listings.