Skip to main content

Discrete time survival analysis with competing risks

Project description

pypi version Tests documentation codecov DOI

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

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=5 independent covariates, each drawn from Uniform(0,1) distribution
  • Competing events: j_events=2 event types
  • Time scale: d_times=14 discrete 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

  1. Open Github issues to suggest new features or to report bugs\errors
  2. Contact Tomer or Rom if you want to add a usage example to the documentation
  3. 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

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

pydts-0.9.8.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

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

pydts-0.9.8-py3-none-any.whl (1.5 MB view details)

Uploaded Python 3

File details

Details for the file pydts-0.9.8.tar.gz.

File metadata

  • Download URL: pydts-0.9.8.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.11 Darwin/24.6.0

File hashes

Hashes for pydts-0.9.8.tar.gz
Algorithm Hash digest
SHA256 3d7f26e558b0800de2855e4c011b0f2293e7e57105884eacf852df7199ea01a2
MD5 30aac27b5b28b0500322cc988e25d649
BLAKE2b-256 ec1cdd53ee7c8a11b63a07ffd03868f73fda48b59ebab6a71063545a72d5ea7a

See more details on using hashes here.

File details

Details for the file pydts-0.9.8-py3-none-any.whl.

File metadata

  • Download URL: pydts-0.9.8-py3-none-any.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.11 Darwin/24.6.0

File hashes

Hashes for pydts-0.9.8-py3-none-any.whl
Algorithm Hash digest
SHA256 a311e310848812d26e06ea65c8b75d5d3c14b4427a22536b23bfb28a3abf9bec
MD5 ff599210336c3d6602d2c0e1bcaf9699
BLAKE2b-256 46c9f23318da9c8ce81e937c269fc17def8c44119e567457726fc2a1593c60cf

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