Skip to contents

Calculates weighted concordance statistics, which, depending on the chosen weighting method (weight_meth) and tied times parameter (tiex), are equivalent to several proposed methods. By default, no weighting is applied and this is equivalent to Harrell's C-index.


For the Kaplan-Meier estimate of the training survival distribution (\(S\)), and the Kaplan-Meier estimate of the training censoring distribution (\(G\)), we have the following options for time-independent concordance statistics (C-indexes) given the weighted method:


  • "I" = No weighting. (Harrell)

  • "GH" = Gonen and Heller's Concordance Index

  • "G" = Weights concordance by \(1/G\).

  • "G2" = Weights concordance by \(1/G^2\). (Uno et al.)

  • "SG" = Weights concordance by \(S/G\) (Shemper et al.)

  • "S" = Weights concordance by \(S\) (Peto and Peto)

The last three require training data. "GH" is only applicable to LearnerSurvCoxPH.

The implementation is slightly different from survival::concordance. Firstly this implementation is faster, and secondly the weights are computed on the training dataset whereas in survival::concordance the weights are computed on the same testing data.


This Measure can be instantiated via the dictionary mlr_measures or with the associated sugar function msr():



t_maxnumeric-\([0, \infty)\)
p_maxnumeric-\([0, 1]\)
weight_methcharacterII, G, G2, SG, S, GH-
tiexnumeric0.5\([0, 1]\)
epsnumeric0.001\([0, 1]\)

Meta Information

  • Type: "surv"

  • Range: \([0, 1]\)

  • Minimize: FALSE

  • Required prediction: crank

Parameter details

  • eps (numeric(1))
    Very small number to substitute zero values in order to prevent errors in e.g. log(0) and/or division-by-zero calculations. Default value is 0.001.

  • t_max (numeric(1))
    Cutoff time (i.e. time horizon) to evaluate concordance up to.

  • p_max (numeric(1))
    The proportion of censoring to evaluate concordance up to in the given dataset. When t_max is specified, this parameter is ignored.

  • weight_meth (character(1))
    Method for weighting concordance. Default "I" is Harrell's C. See details.

  • tiex (numeric(1))
    Weighting applied to tied rankings, default is to give them half (0.5) weighting.


Peto, Richard, Peto, Julian (1972). “Asymptotically efficient rank invariant test procedures.” Journal of the Royal Statistical Society: Series A (General), 135(2), 185–198.

Harrell, E F, Califf, M R, Pryor, B D, Lee, L K, Rosati, A R (1982). “Evaluating the yield of medical tests.” Jama, 247(18), 2543–2546.

Goenen M, Heller G (2005). “Concordance probability and discriminatory power in proportional hazards regression.” Biometrika, 92(4), 965–970. doi:10.1093/biomet/92.4.965 .

Schemper, Michael, Wakounig, Samo, Heinze, Georg (2009). “The estimation of average hazard ratios by weighted Cox regression.” Statistics in Medicine, 28(19), 2473–2489. doi:10.1002/sim.3623 .

Uno H, Cai T, Pencina MJ, D'Agostino RB, Wei LJ (2011). “On the C-statistics for evaluating overall adequacy of risk prediction procedures with censored survival data.” Statistics in Medicine, n/a–n/a. doi:10.1002/sim.4154 .

Super classes

mlr3::Measure -> mlr3proba::MeasureSurv -> MeasureSurvCindex


Inherited methods

Method new()

This is an abstract class that should not be constructed directly.


Method clone()

The objects of this class are cloneable with this method.


MeasureSurvCindex$clone(deep = FALSE)



Whether to make a deep clone.


task = tsk("rats")
learner = lrn("surv.coxph")
part = partition(task) # train/test split, stratified on `status` by default
learner$train(task, part$train)
p = learner$predict(task, part$test)

# Harrell's C-index
p$score(msr("surv.cindex")) # same as `p$score()`
#> surv.cindex 
#>   0.7620216 

# Uno's C-index
p$score(msr("surv.cindex", weight_meth = "G2"),
        task = task, train_set = part$train)
#> surv.cindex 
#>   0.8030636 

# Harrell's C-index evaluated up to a specific time horizon
p$score(msr("surv.cindex", t_max = 97))
#> surv.cindex 
#>   0.7439024 
# Harrell's C-index evaluated up to the time corresponding to 30% of censoring
p$score(msr("surv.cindex", p_max = 0.3))
#> surv.cindex 
#>   0.7439024