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 calculating inverse probability of treatment weights (IPTW) and performing survival analysis using real-world data. It includes functionality for estimating stabilized weights, checking covariate balance, visualizing propensity scores, and calculating bootstrapped survival metrics.
Features
- Calculate stabilized or unstabilized IPTW using logistic regression
- Visualize propensity score distributions for treatment groups
- Assess covariate balance using standardized mean differences (SMD), including a Love plot
- Generate a bootstrapped Kaplan-Meier survival summary DataFrame with point estimates and bootstrapped 95% confidence intervals (useful for plotting with your preferred visualization library)
- Compute survival metrics -- all with bootstrapped 95% condience intervals -- including:
- Probability of survival at fixed timepoints
- Restricted mean survival time (RMST)
- Median survival
Standard variance estimates for survival curves can be biased when using IPTW, especially when weights are non-integer or extreme. To address this, iptw-survival uses bootstrapping to provide robust confidence intervals for 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file iptw_survival-0.1.6.tar.gz.
File metadata
- Download URL: iptw_survival-0.1.6.tar.gz
- Upload date:
- Size: 14.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4a7bee32862ccc5c5810ea6bc85321da48396eab16e2bd3d988823a617c12d1
|
|
| MD5 |
ebab7691f9488a99bb5931cbe186d50d
|
|
| BLAKE2b-256 |
58e686ae9f545f147e55df47d0af90b8682842a0565e97db278979618d976bc1
|
File details
Details for the file iptw_survival-0.1.6-py3-none-any.whl.
File metadata
- Download URL: iptw_survival-0.1.6-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34619e3f77a6e69f0e204a5a990307dc8538e10d87794180c2b745615ebfa0b0
|
|
| MD5 |
b9afd1d4adee95d945f567bb47384d78
|
|
| BLAKE2b-256 |
904f9fe29ff197c2fb2eafc31bc586b259b236fcf45bc4d450f143004edf2169
|