sksurv.metrics.integrated_brier_score

sksurv.metrics.integrated_brier_score(survival_train, survival_test, estimate, times)[source]

The Integrated Brier Score (IBS) provides an overall calculation of the model performance at all available times \(t_1 \leq t \leq t_\text{max}\).

The integrated time-dependent Brier score over the interval \([t_1; t_\text{max}]\) is defined as

\[\mathrm{IBS} = \int_{t_1}^{t_\text{max}} \mathrm{BS}^c(t) d w(t)\]

where the weighting function is \(w(t) = t / t_\text{max}\). The integral is estimated via the trapezoidal rule.

See [1] for further details.

Parameters:
  • survival_train (structured array, shape = (n_train_samples,)) – Survival times for training data to estimate the censoring distribution from. A structured array containing the binary event indicator as first field, and time of event or time of censoring as second field.
  • survival_test (structured array, shape = (n_samples,)) – Survival times of test data. A structured array containing the binary event indicator as first field, and time of event or time of censoring as second field.
  • estimate (array-like, shape = (n_samples, n_times)) – Estimated risk of experiencing an event for test data at times. The i-th column must contain the estimated probability of remaining event-free up to the i-th time point.
  • times (array-like, shape = (n_times,)) – The time points for which to estimate the Brier score. Values must be within the range of follow-up times of the test data survival_test.
Returns:

ibs – The integrated Brier score.

Return type:

float

Examples

>>> import numpy
>>> from sksurv.datasets import load_gbsg2
>>> from sksurv.linear_model import CoxPHSurvivalAnalysis
>>> from sksurv.metrics import integrated_brier_score
>>> from sksurv.preprocessing import OneHotEncoder

Load and prepare data.

>>> X, y = load_gbsg2()
>>> X.loc[:, "tgrade"] = X.loc[:, "tgrade"].map(len).astype(int)
>>> Xt = OneHotEncoder().fit_transform(X)

Fit a Cox model.

>>> est = CoxPHSurvivalAnalysis(ties="efron").fit(Xt, y)

Retrieve individual survival functions and get probability of remaining event free from 1 year to 5 years (=1825 days).

>>> survs = est.predict_survival_function(Xt)
>>> times = numpy.arange(365, 1826)
>>> preds = numpy.asarray([[fn(t) for t in times] for fn in survs])

Compute the integrated Brier score from 1 to 5 years.

>>> score = integrated_brier_score(y, y, preds, times)
>>> print(score)
0.1815853064627424

See also

brier_score()

References

[1]E. Graf, C. Schmoor, W. Sauerbrei, and M. Schumacher, “Assessment and comparison of prognostic classification schemes for survival data,” Statistics in Medicine, vol. 18, no. 17-18, pp. 2529–2545, 1999.