survival
A high-performance survival analysis library written in Rust, with a Python API powered by PyO3 and maturin.
Features
- Core survival analysis routines
- Cox proportional hazards models with frailty
- Kaplan-Meier and Aalen-Johansen (multi-state) survival curves
- Nelson-Aalen estimator
- Parametric accelerated failure time models
- Fine-Gray competing risks model
- Penalized splines (P-splines) for smooth covariate effects
- Concordance index calculations
- Person-years calculations
- Score calculations for survival models
- Residual analysis (martingale, Schoenfeld, score residuals)
- Bootstrap confidence intervals
- Cross-validation for model assessment
- Statistical tests (log-rank, likelihood ratio, Wald, score, proportional hazards)
- Sample size and power calculations
- RMST (Restricted Mean Survival Time) analysis
- Landmark analysis
- Calibration and risk stratification
- Time-dependent AUC
- Conditional logistic regression
- Time-splitting utilities
Installation
From PyPI (Recommended)
From Source
Prerequisites
Install maturin:
Build and Install
Build the Python wheel:
Install the wheel:
For development:
Usage
Aalen's Additive Regression Model
=
=
# Create options with required parameters (formula, data, variable_names)
=
# Optional: modify default values via setters
# options.weights = [1.0, 1.0, 1.0]
# options.qrtol = 1e-8
# options.dfbeta = True
=
Penalized Splines (P-splines)
=
=
Concordance Index
=
=
=
= 5
=
Cox Regression with Frailty
=
Person-Years Calculation
=
Kaplan-Meier Survival Curves
# Example survival data
=
= # 1 = event, 0 = censored
= * # Optional: equal weights
=
Fine-Gray Competing Risks Model
# Example competing risks data
=
=
= # Cut points
= # Cumulative probabilities
= # Whether to extend intervals
= # Which cut points to keep
=
Parametric Survival Regression (Accelerated Failure Time Models)
# Example survival data
=
= # 1 = event, 0 = censored
=
# Fit parametric survival model
=
Cox Proportional Hazards Model
# Create a Cox PH model
=
# Or create with data
=
=
= # 1 = event, 0 = censored
=
# Fit the model
# Get results
# Predict on new data
=
=
# Calculate Brier score
=
# Compute survival curves for new covariates
=
= # Optional: specific time points
, =
# One curve per covariate set
# Create and add subjects
=
Cox Martingale Residuals
# Example survival data
=
= # 1 = event, 0 = censored
= # Risk scores
# Calculate martingale residuals
=
Survival Difference Tests (Log-Rank Test)
# Example: Compare survival between two groups
=
=
= # Group 1 and Group 2
# Perform log-rank test (rho=0 for standard log-rank)
=
Built-in Datasets
The library includes 30 classic survival analysis datasets:
# Load the lung cancer dataset
=
# Load the acute myelogenous leukemia dataset
=
# Load the veteran's lung cancer dataset
=
Available datasets:
load_lung()- NCCTG Lung Cancer Dataload_aml()- Acute Myelogenous Leukemia Survival Dataload_veteran()- Veterans' Administration Lung Cancer Studyload_ovarian()- Ovarian Cancer Survival Dataload_colon()- Colon Cancer Dataload_pbc()- Primary Biliary Cholangitis Dataload_cgd()- Chronic Granulomatous Disease Dataload_bladder()- Bladder Cancer Recurrencesload_heart()- Stanford Heart Transplant Dataload_kidney()- Kidney Catheter Dataload_rats()- Rat Treatment Dataload_stanford2()- Stanford Heart Transplant Data (Extended)load_udca()- UDCA Clinical Trial Dataload_myeloid()- Acute Myeloid Leukemia Clinical Trialload_flchain()- Free Light Chain Dataload_transplant()- Liver Transplant Dataload_mgus()- Monoclonal Gammopathy Dataload_mgus2()- Monoclonal Gammopathy Data (Updated)load_diabetic()- Diabetic Retinopathy Dataload_retinopathy()- Retinopathy Dataload_gbsg()- German Breast Cancer Study Group Dataload_rotterdam()- Rotterdam Tumor Bank Dataload_logan()- Logan Unemployment Dataload_nwtco()- National Wilms Tumor Study Dataload_solder()- Solder Joint Dataload_tobin()- Tobin's Tobit Dataload_rats2()- Rat Tumorigenesis Dataload_nafld()- Non-Alcoholic Fatty Liver Disease Dataload_cgd0()- CGD Baseline Dataload_pbcseq()- PBC Sequential Data
API Reference
Classes
Core Models:
AaregOptions: Configuration options for Aalen's additive regression modelPSpline: Penalized spline class for smooth covariate effectsCoxPHModel: Cox proportional hazards model classSubject: Subject data structure for Cox PH modelsConditionalLogisticRegression: Conditional logistic regression modelClogitDataSet: Dataset for conditional logistic regression
Survival Curves:
SurvFitKMOutput: Output from Kaplan-Meier survival curve fittingSurvfitKMOptions: Options for Kaplan-Meier fittingKaplanMeierConfig: Configuration for Kaplan-MeierSurvFitAJ: Output from Aalen-Johansen survival curve fittingNelsonAalenResult: Output from Nelson-Aalen estimatorStratifiedKMResult: Output from stratified Kaplan-Meier
Parametric Models:
SurvivalFit: Output from parametric survival regressionSurvregConfig: Configuration for parametric survival regressionDistributionType: Distribution types for parametric models (extreme_value, logistic, gaussian, weibull, lognormal)FineGrayOutput: Output from Fine-Gray competing risks model
Statistical Tests:
SurvDiffResult: Output from survival difference testsLogRankResult: Output from log-rank testTrendTestResult: Output from trend testsTestResult: General test result outputProportionalityTest: Output from proportional hazards testSurvObrienResult: Output from O'Brien transformation
Validation:
BootstrapResult: Output from bootstrap confidence interval calculationsCVResult: Output from cross-validationCalibrationResult: Output from calibration analysisPredictionResult: Output from prediction functionsRiskStratificationResult: Output from risk stratificationTdAUCResult: Output from time-dependent AUC calculation
RMST and Survival Metrics:
RMSTResult: Output from RMST calculationRMSTComparisonResult: Output from RMST comparison between groupsMedianSurvivalResult: Output from median survival calculationCumulativeIncidenceResult: Output from cumulative incidence calculationNNTResult: Number needed to treat result
Landmark Analysis:
LandmarkResult: Output from landmark analysisConditionalSurvivalResult: Output from conditional survival calculationHazardRatioResult: Output from hazard ratio calculationSurvivalAtTimeResult: Output from survival at specific timesLifeTableResult: Output from life table calculation
Power and Sample Size:
SampleSizeResult: Output from sample size calculationsAccrualResult: Output from accrual calculations
Utilities:
CoxCountOutput: Output from Cox counting functionsSplitResult: Output from time-splittingCondenseResult: Output from data condensingSurv2DataResult: Output from survival-to-data conversionTimelineResult: Output from timeline conversionIntervalResult: Output from interval calculationsLinkFunctionParams: Link function parametersCchMethod: Case-cohort method specificationCohortData: Cohort data structure
Functions
Model Fitting:
aareg(options): Fit Aalen's additive regression modelsurvreg(...): Fit parametric accelerated failure time modelsperform_cox_regression_frailty(...): Fit Cox proportional hazards model with frailty
Survival Curves:
survfitkm(...): Fit Kaplan-Meier survival curvessurvfitkm_with_options(...): Fit Kaplan-Meier with configuration optionssurvfitaj(...): Fit Aalen-Johansen survival curves (multi-state)nelson_aalen_estimator(...): Calculate Nelson-Aalen estimatorstratified_kaplan_meier(...): Calculate stratified Kaplan-Meier curvesagsurv4(...): Anderson-Gill survival calculations (version 4)agsurv5(...): Anderson-Gill survival calculations (version 5)
Statistical Tests:
survdiff2(...): Perform survival difference tests (log-rank, Wilcoxon, etc.)logrank_test(...): Perform log-rank testfleming_harrington_test(...): Perform Fleming-Harrington weighted testlogrank_trend(...): Perform log-rank trend testlrt_test(...): Likelihood ratio testwald_test_py(...): Wald testscore_test_py(...): Score testph_test(...): Proportional hazards assumption testsurvobrien(...): O'Brien transformation for survival data
Residuals:
coxmart(...): Calculate Cox martingale residualsagmart(...): Calculate Anderson-Gill martingale residualsschoenfeld_residuals(...): Calculate Schoenfeld residualscox_score_residuals(...): Calculate Cox score residuals
Concordance:
perform_concordance1_calculation(...): Calculate concordance index (version 1)perform_concordance3_calculation(...): Calculate concordance index (version 3)perform_concordance_calculation(...): Calculate concordance index (version 5)compute_concordance(...): General concordance calculation
Validation:
bootstrap_cox_ci(...): Bootstrap confidence intervals for Cox modelsbootstrap_survreg_ci(...): Bootstrap confidence intervals for parametric modelscv_cox_concordance(...): Cross-validation for Cox model concordancecv_survreg_loglik(...): Cross-validation for parametric model log-likelihoodcalibration(...): Model calibration assessmentpredict_cox(...): Predictions from Cox modelsrisk_stratification(...): Risk group stratificationtd_auc(...): Time-dependent AUC calculationbrier(...): Calculate Brier scoreintegrated_brier(...): Calculate integrated Brier score
RMST and Survival Metrics:
rmst(...): Calculate restricted mean survival timermst_comparison(...): Compare RMST between groupssurvival_quantile(...): Calculate survival quantiles (median, etc.)cumulative_incidence(...): Calculate cumulative incidencenumber_needed_to_treat(...): Calculate NNT
Landmark Analysis:
landmark_analysis(...): Perform landmark analysislandmark_analysis_batch(...): Perform batch landmark analysis at multiple time pointsconditional_survival(...): Calculate conditional survivalhazard_ratio(...): Calculate hazard ratiossurvival_at_times(...): Calculate survival at specific time pointslife_table(...): Generate life table
Power and Sample Size:
sample_size_survival(...): Calculate required sample sizesample_size_survival_freedman(...): Sample size using Freedman's methodpower_survival(...): Calculate statistical powerexpected_events(...): Calculate expected number of events
Utilities:
finegray(...): Fine-Gray competing risks model data preparationperform_pyears_calculation(...): Calculate person-years of observationperform_pystep_calculation(...): Perform step calculationsperform_pystep_simple_calculation(...): Perform simple step calculationsperform_score_calculation(...): Calculate score statisticsperform_agscore3_calculation(...): Calculate score statistics (version 3)survsplit(...): Split survival data at specified timessurvcondense(...): Condense survival data by collapsing adjacent intervalssurv2data(...): Convert survival objects to data formatto_timeline(...): Convert data to timeline formatfrom_timeline(...): Convert from timeline format to intervalstmerge(...): Merge time-dependent covariatestmerge2(...): Merge time-dependent covariates (version 2)tmerge3(...): Merge time-dependent covariates (version 3)collapse(...): Collapse survival datacoxcount1(...): Cox counting process calculationscoxcount2(...): Cox counting process calculations (version 2)agexact(...): Exact Anderson-Gill calculationsnorisk(...): No-risk calculationscipoisson(...): Poisson confidence intervalscipoisson_exact(...): Exact Poisson confidence intervalscipoisson_anscombe(...): Anscombe Poisson confidence intervalscox_callback(...): Cox model callback for iterative fitting
PSpline Options
The PSpline class provides penalized spline smoothing:
Constructor Parameters:
x: Covariate vector (list of floats)df: Degrees of freedom (integer)theta: Roughness penalty (float)eps: Accuracy for degrees of freedom (float)method: Penalty method for tuning parameter selection. Supported methods:"GCV"- Generalized Cross-Validation"UBRE"- Unbiased Risk Estimator"REML"- Restricted Maximum Likelihood"AIC"- Akaike Information Criterion"BIC"- Bayesian Information Criterion
boundary_knots: Tuple of (min, max) for the spline basisintercept: Whether to include an intercept in the basispenalty: Whether or not to apply the penalty
Methods:
fit(): Fit the spline model, returns coefficientspredict(new_x): Predict values at new x points
Properties:
coefficients: Fitted coefficients (None if not fitted)fitted: Whether the model has been fitteddf: Degrees of freedomeps: Convergence tolerance
Development
Build the Rust library:
Run tests:
Format code:
The codebase is organized with:
- Core routines in
src/ - Tests and examples in
test/ - Python bindings using PyO3
Dependencies
- PyO3 - Python bindings
- ndarray - N-dimensional arrays
- faer - Pure-Rust linear algebra
- itertools - Iterator utilities
- rayon - Parallel computation
Compatibility
- This build is for Python only. R/extendr bindings are currently disabled.
- macOS users: Ensure you are using the correct Python version and have Homebrew-installed Python if using Apple Silicon.
License
This project is licensed under the MIT License - see the LICENSE file for details.