← Back to all sparks
G

gsDesign2

ANALYTICS
Velocity3.8

Group Sequential Design Under Non-Proportional Hazards

Group sequential design tooling that now monitors for harm, not just efficacy and futility.

clinical-trialsgroup-sequentialbiostatisticspharmaverser-packageregulatory-output
Current state
gsDesign2 is the Merck-authored R package for group sequential clinical trial design under non-proportional hazards, and it has spent the last two years filling in the statistical surface its predecessor gsDesign established. Recent releases added conditional power (gs_cp, gs_cp_npe), sequential p-values, risk-difference designs with minimal risk weighting, and boundary updates from blinded interim estimates. Version 1.2.0 adds harm boundaries across the AHR and NPE design and power functions, wired through every summary and table export path.
Where it's heading
The package is converging on parity with gsDesign while extending past it — each release either closes a gap against the older package or adds a boundary type gsDesign never had. A visible second track is output plumbing: every new statistical feature now arrives already threaded through summary(), gs_bound_summary(), as_gt(), and as_rtf(), which is what regulatory submission work actually consumes. Performance work is steady but secondary, with gs_design_ahr() roughly 2x faster in 1.1.9.
Prediction
Expect the harm boundary work to propagate into the WLR and risk-difference design families, which are the two design branches 1.2.0 left untouched, along with a vignette bridging harm boundaries to the remaining gsDesign test types.

Recent moves

  1. 8d ago

    Harm boundaries land in AHR and NPE group sequential designs

    ⚡ SPARK

    Harm boundaries arrive in gs_design_ahr(), gs_power_ahr(), gs_design_npe(), and gs_power_npe(), and flow straight through to summary(), gs_bound_summary(), as_gt(), and as_rtf(). This is the first boundary type the package adds that monitors patient safety rather than treatment benefit, extending the design surface rather than refining it.

    View source ↗
  2. 1mo ago

    Conditional power, sequential p-values, and minimal risk weighting

    The largest feature release before harm boundaries: gs_cp() and gs_cp_simple() for conditional power under non-constant effect sizes, sequential_pval() for AHR designs, and minimal risk weighting for risk-difference designs. Several stratified-design reporting bugs were corrected and gs_design_ahr() got roughly 2x faster.

    View source ↗
  3. 5mo ago

    gs_design_ahr() can output spending time

    A narrow release: gs_design_ahr() gains spending time output, plus a roxygen2 migration and a worked example for updating a stratified design at analysis time. Consistent with the pattern of exposing intermediate design quantities users previously had to recompute.

    View source ↗
  4. 8mo ago

    S3 class refactor and futility boundary vignette

    Internal S3 class restructuring, suppressed input echo when printing objects, and documentation consolidation via @inheritparams. The user-visible surface is essentially unchanged; this is groundwork for the class hierarchy later releases build on.

    View source ↗
  5. 11mo ago

    h1_spending for WLR power, info_scale across fixed designs

    gs_power_wlr() gains an h1_spending argument for spending under the alternative, and info_scale becomes available across the four fixed_design_* functions. The magrittr dependency was dropped in favor of the native R pipe.

    View source ↗
  6. 1y ago

    WLR design spending default corrected to information fraction

    A single-fix release correcting the spending of weighted log-rank designs, whose default is information fraction. Narrow in scope but it changes computed boundaries, so designs derived under the prior default do not reproduce.

    View source ↗