Introduction to FastSurvival

Overview

FastSurvival provides fast alternatives to the standard survival analysis functions in the survival package, together with a simulation layer for designing and evaluating time-to-event trials. Every function is designed for repeated evaluation inside large simulation loops, where the iterative or object-building overhead of the standard implementations becomes a bottleneck. Core computations are implemented in C++ via Rcpp.

library(FastSurvival)

Function families

The package has two families of functions. Collett (2014) gives the methodological background of the standard methods they implement.

The estimation and testing functions operate on a single dataset and return an S3 object with a print() method. survfit_fast() evaluates the Kaplan-Meier estimate at a single time point. survdiff_fast() computes the log-rank test and its weighted and stratified variants. coxph_fast() returns a closed-form hazard ratio, the Pike-Halley Estimator (Homma, 2025). rmst_fast() returns the restricted mean survival time, and wmst_fast() the window mean survival time over an interval. milestone_fast() compares survival at a milestone timepoint, and medsurv_fast() compares median survival times. maxcombo_fast() computes the max-combo test, rmw_fast() the robust modestly-weighted log-rank test, and wkm_fast() the weighted Kaplan-Meier (Pepe-Fleming) test. ahsw_fast() computes the average hazard with survival weight, and ahr_fast() the Kalbfleisch-Prentice average hazard ratio.

The simulation functions support a full simulation study. simdata_fast() generates individual patient data for one-group, two-group, or multi-arm trials. cutoff_fast() determines the calendar time of every analysis look in every simulated trial from combined event and calendar-time rules. analysis_fast() performs interim or sequential analyses of the simulated data at one or more looks, and can compute any of the estimation and testing statistics above, optionally within subgroups. switch_fast() applies treatment switching to the simulated data, at progression or after an interim analysis. pairwise_fast() compares each experimental arm of a multi-arm trial with a shared control. simsummary_fast() aggregates the operating characteristics from the analysis output against supplied boundaries.

A minimal example

The following example uses the ovarian dataset from the survival package, with a one-sided test of treatment benefit (side = 1).

library(survival)
#> Warning: package 'survival' was built under R version 4.6.1

# Single-time-point Kaplan-Meier estimate
ord <- order(ovarian$futime)
survfit_fast(ovarian$futime[ord], ovarian$fustat[ord],
             t_eval = 500, conf.type = "log")
#> Kaplan-Meier survival estimate (single time point)
#> 
#>         survival std.err lower 95% upper 95%
#> t = 500   0.5961  0.0999    0.4291    0.8279
#> 
#>  Confidence interval type: log

# Log-rank test
survdiff_fast(ovarian$futime, ovarian$fustat, ovarian$rx,
              control = 1, side = 1)
#> Log-rank test (two-group)
#> 
#>   N = 26,  control = 1
#> 
#>           Observed Expected (O-E)^2/E (O-E)^2/V
#> control          7   5.2335    0.5962    1.0627
#> treatment        5   6.7665    0.4612    1.0627
#> 
#>  Z = -1.031,  one-sided p-value = 0.1513  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

# Hazard ratio via the Pike-Halley Estimator
coxph_fast(ovarian$futime, ovarian$fustat, ovarian$rx,
           control = 1, side = 1)
#> Pike-Halley estimator for the hazard ratio (two-group)
#> 
#>   control = 1
#>   alternative = one.sided
#> 
#> Coefficients:
#>          coef exp(coef) se(coef)      z Pr(>|z|)
#> group -0.5964    0.5508   0.5868 -1.016    0.155
#> 
#> Hazard ratio and 95% Wald confidence interval:
#>       exp(coef) exp(-coef) lower .95 upper .95
#> group    0.5508     1.8155    0.1744    1.7399

Where to go next

Several further vignettes cover the package in depth. Validation of FastSurvival checks numerical agreement with established packages on a real clinical-trial dataset. Speed comparison quantifies the performance gain. Group sequential design with the simulation trio demonstrates simdata_fast(), analysis_fast(), and simsummary_fast() against a gsDesign reference. Further applied vignettes work the simulation functions through nonproportional-hazards, correlated multiple-endpoint, multi-arm, multiregional, and treatment-switching settings, and Using your own data generator analyzes data generated outside the package with the same functions.

References

Homma, G. (2025). One step from Pike to Cox: a closed-form hazard ratio estimator. Manuscript under review.

Collett, D. (2014). Modelling Survival Data in Medical Research (3rd ed.). Chapman and Hall/CRC.

mirror server hosted at Truenetwork, Russian Federation.