Skip to main content

A Python package for IPTW-based survival analysis with bootstrapped metrics and covariate balance diagnostics.

Project description

iptw-survival

iptw-survival is a Python package for performing weight-based causal survival analysis. It includes functionality for estimating inverse probability of treatment weights (IPTW) and overlap weights (OW), visualizing propensity score overlap, assessing covariate balance, and computing bootstrapped survival metrics.

Features

  • Calculate IPTW and overlap weights using logistic regression
  • Visualize propensity score distributions for treatment groups
  • Assess covariate balance using standardized mean differences (SMD), including a Love plot
  • Generate bootstrapped Kaplan-Meier survival summaries with point estimates and 95% CIs
  • Compute survival metrics with bootstrapped 95% confidence intervals:
    • Probability of survival at fixed timepoints
    • Restricted mean survival time (RMST)
    • Median survival

Standard variance estimates for survival curves can be biased when using non-integer or extreme weights. To address this, iptw-survival uses bootstrap resampling to provide robust confidence intervals for all survival metrics.

Installation

pip install iptw-survival

Quick Start

from iptw_survival import IPTWSurvivalEstimator

# Instantiate and fit model
estimator = IPTWSurvivalEstimator()
iptw_df = estimator.fit_transform(df,
                                  treatment_col = 'treatment',
                                  cat_var = ['stage', 'ecog'],
                                  cont_var = ['age', 'creatinine'],
                                  binary_var = ['surgery', 'medicaid'],
                                  lr_kwargs = {
                                    'class_weight': 'balanced',
                                    'random_state': 42},
                                  clip_bounds = (0.01, 0.99),
                                  stabilized = True)

# Plot propensity score distribution
estimator.propensity_score_plot()

# Assess covariate balance
smd_df, fig = estimator.standardized_mean_differences(return_fig = True)

# Kaplan-Meier plot with bootstrapped CIs
km_df = estimator.km_confidence_interval(df = iptw_df
                                         event_col='event', 
                                         duration_col = 'duration',
                                         n_bootstrap = 500
                                         random_state = 42)

# Use km_df to plot survival curves 
import matplotlib.pyplot as plt

plt.plot(km_df['time'], km_df['treatment_estimate'], label = 'Treatment')
plt.fill_between(km_df['time'], km_df['treatment_lower_ci'], km_df['treatment_upper_ci'], alpha = 0.1)
plt.xlabel('Time (months)')
plt.ylabel('Survival probability')
plt.legend()
plt.title('IPTW-adjusted Kaplan-Meier Curve')
plt.show()

# Calculate survival metrics
results = estimator.survival_metrics(df = iptw_df
                                     event_col='event', 
                                     duration_col = 'duration',
                                     psurv_time_points = [24, 36],
                                     rmst_time_points = [12],
                                     median_time = True
                                     n_bootstrap = 500
                                     random_state = 42)

Example Tutorial

A full walkthrough using the Flatiron Health advanced urothelial cancer dataset is available in tutorial/tutorial.ipynb.

Requirements

Built and tested in python 3.13

Core dependencies:

  • pandas
  • numpy
  • scikit-learn
  • lifelines
  • matplotlib

Contact

Contributions and feedback are welcome. Contact: xavierorcutt@gmail.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iptw_survival-0.1.8.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iptw_survival-0.1.8-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

Details for the file iptw_survival-0.1.8.tar.gz.

File metadata

  • Download URL: iptw_survival-0.1.8.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for iptw_survival-0.1.8.tar.gz
Algorithm Hash digest
SHA256 67aa5c33c3b3a0e80063dedba422686bd66392ca607b097ed6ae2dbc435f8d94
MD5 841cb31d8485947d113abfa25f49a00f
BLAKE2b-256 60dd4804bb262bef19211b426fa0a054a217459aa153035e34fe61930eee9771

See more details on using hashes here.

File details

Details for the file iptw_survival-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: iptw_survival-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 15.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for iptw_survival-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 6418d56ff72dd1bdcc140ed2a236717a34e9238e4aea9fec71b502b8eee9897b
MD5 8088c48787581a4b6b8860e99b70d1cb
BLAKE2b-256 d5271d9102f721c51c90e1982c10ea96b91f13aa1c55822de511d6322100c099

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page