Metadata-Version: 2.4
Name: survmetr
Version: 0.1.0
Summary: Advanced predictive metrics for survival analysis
Keywords: survival analysis,concordance index,antolini,c-index,time-dependent
Author-email: Giovanni Birolo <giovanni.birolo@unito.it>
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-Expression: LGPL-3.0-or-later
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
License-File: LICENSE
Requires-Dist: numpy>=2.0.2
Requires-Dist: scikit-learn>=1.5.2
Requires-Dist: scikit-survival>=0.23.1
Requires-Dist: numba ; extra == "numba"
Project-URL: Homepage, https://github.com/compbiomed-unito/survival-metrics
Project-URL: Issues, https://github.com/compbiomed-unito/survival-metrics/issues
Project-URL: Repository, https://github.com/compbiomed-unito/survival-metrics
Provides-Extra: numba

# survmetr

[![License: LGPL v3](https://img.shields.io/badge/License-LGPLv3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)

Advanced predictive metrics for survival analysis, focused on Antolini's time-dependent concordance index.

## Installation

```bash
pip install survmetr
```

For numba-accelerated computation:

```bash
pip install survmetr[numba]
```

## Quick Start

```python
import numpy as np
from sksurv.util import Surv
from survmetr import c_index_antolini

# Create survival data
y = Surv.from_arrays(
    event=[True, True, False, True, False],
    time=[1.0, 3.0, 4.0, 5.0, 6.0],
)
n_events = y['event'].sum()

# Prediction matrix: (n_samples, n_events) failure probabilities
estimate = np.random.rand(len(y), n_events)

# Compute Antolini's time-dependent C-index
c = c_index_antolini(estimate, y)
print(f"C-index: {c:.3f}")

# Get detailed statistics
result = c_index_antolini(estimate, y, return_all=True)
print(result)
# {'c-index': ..., 'concordant': ..., 'comparable': ...,
#  'tied_risk': ..., 'discordant': ..., 'numerator': ...}
```

## Available Metrics

| Function | Description |
|----------|-------------|
| `c_index_antolini` | Antolini's time-dependent C-index (alias for vector impl) |
| `c_index_antolini_vector` | Vectorized NumPy implementation |
| `c_index_antolini_sksurv` | Implementation using scikit-survival internals |
| `c_index_antolini_pycox` | Numba-JIT parallel implementation |
| `make_survival_scorer` | Factory for time-dependent classification scorers |
| `harrel_c_index_scorer` | Harrell's standard C-index scorer |
| `AntoliniCIndexVecScorer` | Dataclass scorer for the vector implementation |
| `split_y` | Extract event/time from structured arrays |

## Tutorial

See [Tutorial.ipynb](Tutorial.ipynb) for a detailed walkthrough.

## License

This project is licensed under the GNU Lesser General Public License v3.0 - see the [LICENSE](LICENSE) file for details.

