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.
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.
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.7399Several 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.
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.