This release adds support for scikit-learn 1.6, which includes missing-values support for [sksurv.ensemble.ExtraSurvivalTrees](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.ensemble.ExtraSurvivalTrees.html#sksurv.ensemble.ExtraSurvivalTrees). Moreover, the release features [sksurv.nonparametric.cumulative_incidence_competing_risks()](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.nonparametric.cumulative_incidence_competing_risks.html#sksurv.nonparametric.cumulative_incidence_competing_risks) which implements a non-parameteric estimator of the cumulative incidence function for competing risks. See the [user guide on the analysis of competing risks](https://scikit-survival.readthedocs.io/en/v0.24.0/user_guide/competing-risks.html).
Bug fixes
- In the C++ code of [sksurv.linear_model.CoxnetSurvivalAnalysis](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.linear_model.CoxnetSurvivalAnalysis.html#sksurv.linear_model.CoxnetSurvivalAnalysis), set type of n_alphas to VectorType::Index instead of ìnt, because on Windows, int and Eigen’s Index differ in size.
- Fix printing of Python version in sksurv.show_versions().
- Give an error if max_sample is set, but bootstrap is False in [sksurv.ensemble.RandomSurvivalForest](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.ensemble.RandomSurvivalForest.html#sksurv.ensemble.RandomSurvivalForest) and [sksurv.ensemble.ExtraSurvivalTrees](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.ensemble.ExtraSurvivalTrees.html#sksurv.ensemble.ExtraSurvivalTrees).
Enhancements
- Add [sksurv.nonparametric.cumulative_incidence_competing_risks()](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.nonparametric.cumulative_incidence_competing_risks.html#sksurv.nonparametric.cumulative_incidence_competing_risks) to estimate the cumulative incidence function in the case of competing risks ([491](https://github.com/sebp/scikit-survival/issues/491), [#500](https://github.com/sebp/scikit-survival/issues/500)).
- Add [sksurv.datasets.load_bmt()](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.datasets.load_bmt.html#sksurv.datasets.load_bmt) and [sksurv.datasets.load_cgvhd()](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.datasets.load_cgvhd.html#sksurv.datasets.load_cgvhd) which are datasets with competing risks ([491](https://github.com/sebp/scikit-survival/issues/491), [#500](https://github.com/sebp/scikit-survival/issues/500)).
- Add missing-values support to [sksurv.ensemble.ExtraSurvivalTrees](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.ensemble.ExtraSurvivalTrees.html#sksurv.ensemble.ExtraSurvivalTrees) ([504](https://github.com/sebp/scikit-survival/issues/504)).
- Add estimators_samples_ property to [sksurv.ensemble.RandomSurvivalForest](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.ensemble.RandomSurvivalForest.html#sksurv.ensemble.RandomSurvivalForest) and [sksurv.ensemble.ExtraSurvivalTrees](https://scikit-survival.readthedocs.io/en/v0.24.0/api/generated/sksurv.ensemble.ExtraSurvivalTrees.html#sksurv.ensemble.ExtraSurvivalTrees).
- Upgrade syntax to Python 3.10.
- Run nbval with Python 3.12, matplotlib 3.9, and seaborn 0.13.
Documentation
- Fix links in documentation.
- Add [user guide on the analysis of competing risks](https://scikit-survival.readthedocs.io/en/v0.24.0/user_guide/competing-risks.html).
Backwards incompatible changes
- Support for scikit-learn versions before 1.6.1 has been dropped ([504](https://github.com/sebp/scikit-survival/issues/504)).
- Support for Python versions before 3.10 has been dropped.
New Contributors
* mvlvrd made their first contribution in https://github.com/sebp/scikit-survival/pull/491
**Full Changelog**: https://github.com/sebp/scikit-survival/compare/v0.23.1...v0.24.0