Discrete time survival analysis with competing risks
Project description
Discrete Time Survival Analysis
PyDTS is a Python package designed for discrete-time survival analysis with competing risks, offering tools for model fitting, evaluation, and simulation.
For details, usage examples, and API information - check out the package documentation
PyDTS offers:
- Discrete-time competing-risks regression models.
- Automated procedures for hyperparameter tuning.
- Sure Independence Screening methods for feature selection.
- Model evaluation metrics for predictive accuracy and calibration.
- Simulation tools for generating synthetic datasets for research and testing.
Additional simulations and illustrative examples are available in Meir and Gorfine (2025), Discrete-Time Competing-Risks Regression with or without Penalization, Biometrics (2025), and in the accompanying Github Repository
Installation
PyDTS can be installed using PyPI as follows:
pip install pydts
Dependencies
PyDTS supports Python versions 3.9–3.13.
The package requires the following dependencies (with version constraints chosen for compatibility across Python and NumPy/SciPy releases):
-
NumPy
- Python 3.9:
>=1.26,<2.1 - Python 3.10:
>=1.26,<2.3 - Python 3.11–3.13:
>=1.26(including NumPy 2.x)
- Python 3.9:
-
SciPy
- Python 3.9:
>=1.13,<1.14 - Python 3.10:
>=1.14,<1.16 - Python 3.11–3.13:
>=1.15
- Python 3.9:
-
pandas
>=2.2.2 -
scikit-learn
>=1.6 -
statsmodels
>=0.14.2 -
lifelines
>=0.27 -
tqdm
>=4.66 -
psutil
>=5.9 -
seaborn
>=0.13 -
formulaic
>=1.0
All dependencies are installed automatically when you install PyDTS.
Quick Start
The following example demonstrates how to generate synthetic data and fit a TwoStagesFitter model.
Detailed definitions and explanations are available in the methods section of the documentation.
The function generate_quick_start_df simulates a dataset with the following defaults:
- Sample size:
n_patients=10000 - Covariates:
n_cov=5independent covariates, each drawn from Uniform(0,1) distribution - Competing events:
j_events=2event types - Time scale:
d_times=14discrete time intervals - Hazard coefficients (default values):
- $\alpha_{1t}$ = −1 − 0.3 * log(t)
- $\alpha_{2t}$ = −1.75 − 0.15 * log(t)
- $\beta_1$ = −log([0.8, 3, 3, 2.5, 2])
- $\beta_2$ = −log([1, 3, 4, 3, 2])
For each patient, a censoring time $C$ is drawn from Uniform{1, ..., 14}. The observed time is defined as $X = min(T, C)$, where $T$ is the event time which is sampled based on the covariates of each patient and the hazard coefficients. If censoring occurs before the event ($C < T$), the event type is set to $J = 0$.
Once the dataset is generated, you can fit a TwoStagesFitter to the data (without columns $C$ and $T$ which are not observed in practice).
You can generate synthetic data and fit your first TwoStagesFitter model with the following code:
from pydts.fitters import TwoStagesFitter
from pydts.examples_utils.generate_simulations_data import generate_quick_start_df
# Generate a synthetic dataset with 10,000 patients,
# 5 covariates, 14 discrete time intervals, and 2 competing events
patients_df = generate_quick_start_df(n_patients=10000, n_cov=5, d_times=14, j_events=2, pid_col='pid', seed=0)
# Initialize and fit the discrete-time competing-risk model
fitter = TwoStagesFitter()
fitter.fit(df=patients_df.drop(['C', 'T'], axis=1))
# Display model summary
fitter.print_summary()
Citations
If you found PyDTS software useful to your research, please cite the papers:
@article{Meir_PyDTS_2022,
author = {Meir, Tomer and Gutman, Rom, and Gorfine, Malka},
doi = {10.48550/arXiv.2204.05731},
title = {{PyDTS: A Python Package for Discrete Time Survival Analysis with Competing Risks}},
url = {https://arxiv.org/abs/2204.05731},
year = {2022}
}
@article{Meir_Gorfine_DTSP_2025,
author = {Meir, Tomer and Gorfine, Malka},
doi = {10.1093/biomtc/ujaf040},
title = {{Discrete-Time Competing-Risks Regression with or without Penalization}},
year = {2025},
journal = {Biometrics},
volume = {81},
number = {2},
url = {https://academic.oup.com/biometrics/article/81/2/ujaf040/8120014},
}
and please consider starring the project on GitHub
How to Contribute
- Open Github issues to suggest new features or to report bugs\errors.
- Provide feedback on the documentation.
- Contact Tomer or Rom if you want to add a usage example to the documentation.
- If you want to become a developer (thank you, we appreciate it!) - please contact Tomer or Rom for developers' on-boarding.
Tomer Meir: tomer1812@gmail.com, Rom Gutman: rom.gutman1@gmail.com
Running Tests Locally
To run the test suite on your local machine, follow these steps:
- Clone the repository
git clone https://github.com/tomer1812/pydts.git
cd pydts
- Install the package in editable mode
pip install -e .
- Run the test suite with Poetry
pip install poetry
poetry run pytest
Project details
Release history Release notifications | RSS feed
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 pydts-0.10.0.tar.gz.
File metadata
- Download URL: pydts-0.10.0.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.9.19 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc4dfb8089d99d5ca2b4ab528c6f095d872ab0051972257e09e25332babc573d
|
|
| MD5 |
87da28a5598d92209b6a8a52d6694622
|
|
| BLAKE2b-256 |
0dbcda14668c467868baf6bb737389ea2e553f76f0d43fb3f3ea6dc72dc51b0a
|
File details
Details for the file pydts-0.10.0-py3-none-any.whl.
File metadata
- Download URL: pydts-0.10.0-py3-none-any.whl
- Upload date:
- Size: 1.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.9.19 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a90267274b09e39ea1fa9600268dd2ebce7d51ea7199c15fd0301cab14c3e46e
|
|
| MD5 |
7c31f3879d05d4f208ff9329c1d6b4bb
|
|
| BLAKE2b-256 |
4f61e73e3a4a71a6aee787c41b5481e93aa8dff8d0db1b2f6ab0f16d62dd1d84
|