Learn R Programming

pec (version 2.0.8)

cindex: Concordance index for right censored survival time data

Description

In survival analysis, a pair of patients is called concordant if the risk of the event predicted by a model is lower for the patient who experiences the event at a later timepoint. The concordance probability (C-index) is the frequency of concordant pairs among all pairs of subjects. It can be used to measure and compare the discriminative power of a risk prediction models. The function provides an inverse of the probability of censoring weigthed estimate of the concordance probability to adjust for right censoring. Cross-validation based on bootstrap resampling or bootstrap subsampling can be applied to assess and compare the discriminative power of various regression modelling strategies on the same set of data.

Usage

cindex(object,...)
## S3 method for class 'list':
cindex(object,
                        formula,
                        data,
                        eval.times,
                        pred.times,
                        cause,
                        cens.model="marginal",
                        ipcw.refit=FALSE,
                        tiedPredictionsIn=TRUE,
                        tiedOutcomeIn=TRUE,
                        tiedMatchIn=TRUE,
                        splitMethod="noPlan",
                        B,
                        M,
                        model.args=NULL,
                        model.parms=NULL,
                        keep.models="Call",
                        keep.residuals=FALSE,
                        keep.pvalues=FALSE,
                        keep.weights=FALSE,
                        keep.index=FALSE,
                        keep.matrix=FALSE,
                        multiSplitTest=FALSE,
                        testTimes,
                        confInt=FALSE,
                        confLevel=0.95,
                        verbose=TRUE,
                        savePath=NULL,
                        ...)

Arguments

object
A named list of prediction models, where allowed entries are (1) R-objects for which a predictSurvProb method exists (see details), (2) a call that evaluates to such an R-object (see exa
formula
A survival formula. The left hand side is used to finde the status response variable in data. For right censored data, the right hand side of the formula is used to specify conditional censoring models. For example, set
data
A data frame in which to validate the prediction models and to fit the censoring model. If data is missing, the data of the first model in list is used.
eval.times
A vector of timepoints for evaluating the discriminative ability. At each timepoint the c-index is computed using only those pairs where one of the event times is known to be earlier than this timepoint. If eval.times is missing
pred.times
A vector of timepoints for evaluating the prediction models. This should either be exactly one timepoint used for all eval.times, or be as long as eval.times, in which case the predicted order of risk for the jth entry of e
cause
For competing risks, the event of interest. Defaults to the first state of the response, which is obtained by evaluating the left hand side of formula in data.
cens.model
Method for estimating inverse probability of censoring weigths: cox: A semi-parametric Cox proportional hazard model is fitted to the censoring times marginal: The Kaplan-Meier estimator for the censorin
ipcw.refit
If TRUE the inverse probability of censoring weigths are estimated separately in each training set during cross-validation.
tiedPredictionsIn
If FALSE pairs with identical predictions are excluded, unless also the event times are identical and uncensored and tiedMatchIn is set to TRUE.
tiedOutcomeIn
If TRUE pairs with identical and uncensored event times are excluded, unless also the predictions are identical and tiedMatchIn is set to TRUE.
tiedMatchIn
If TRUE then pairs with identical predictions and identical and uncensored event times are counted as concordant pairs.
splitMethod
SplitMethod for estimating the prediction error curves. none/noPlan: Assess the models in the give data, usually either in the same data where they are fitted, or in independent test data. BootCv<
B
Number of bootstrap samples. The default depends on argument splitMethod. When splitMethod in c("BootCv","Boot632") the default is 100. For splitMethod="none" B is the number of bootstrap
M
The size of the bootstrap samples for resampling without replacement. Ignored for resampling with replacement.
model.args
List of extra arguments that can be passed to the predictSurvProb methods. The list must have an entry for each entry in object.
model.parms
Experimental. List of with exactly one entry for each entry in object. Each entry names parts of the value of the fitted models that should be extracted and added to the value.
keep.index
Logical. If FALSE remove the bootstrap or cross-validation index from the output list which otherwise is included in the method part of the output list.
keep.matrix
Logical. If TRUE add all B prediction error curves from bootstrapping or cross-validation to the output.
keep.models
Logical. If TRUE keep the models in object. If "Call" keep only the call of these models.
keep.residuals
Experimental.
keep.pvalues
Experimental.
keep.weights
Experimental.
multiSplitTest
Experimental.
testTimes
A vector of time points for testing differences between models in the time-point specific Brier scores.
confInt
Experimental.
confLevel
Experimental.
verbose
if TRUE report details of the progress, e.g. count the steps in cross-validation.
savePath
Place in your filesystem (directory) where training models fitted during cross-validation are saved. If missing training models are not saved.
...
Not used.

Value

  • Estimates of the C-index.

Details

Pairs with identical observed times, where one is uncensored and one is censored, are always considered usuable (independent of the value of tiedOutcomeIn), as it can be assumed that the event occurs at a later timepoint for the censored observation.

For uncensored response the result equals the one obtained with the functions rcorr.cens and rcorrcens from the Hmisc package (see examples).

References

Gerds, TA and Kattan, M and Schumacher, M and Yu, C (2010) Estimating a time-dependent concordance index for survival prediction models with covariate dependent censoring Research report 10/7. Department of Biostatistics, University of Copenhagen

Examples

Run this code
# simulate data based on Weibull regression  
 set.seed(13)
 dat <- SimSurv(300)
 # fit three different Cox models and a random survival forest
 # note: low number of trees for the purpose of illustration 
 library(survival)
 library(randomSurvivalForest)
 rsf.default=randomSurvivalForest:::rsf.default
 cox12 <- coxph(Surv(time,status)~X1+X2,data=dat)
 cox1 <- coxph(Surv(time,status)~X1,data=dat)
 cox2 <- coxph(Surv(time,status)~X2,data=dat)
 rsf1 <- rsf(Survrsf(time,status)~X1+X2,data=dat,ntree=15,forest=TRUE)
 #
 # compute the apparent estimate of the C-index at different time points
 #
ApparrentCindex  <- cindex(list("Cox X1"=cox1,
		       "Cox X2"=cox2,
		       "Cox X1+X2"=cox12,
                       "RSF"=rsf1),
		  formula=Surv(time,status)~X1+X2,
		  data=dat,
		  eval.times=seq(5,500,50))
  print(ApparrentCindex)
  plot(ApparrentCindex)
 #
 # compute the bootstrap-crossvalidation estimate of the C-index at different time points
 #
set.seed(142)
bcvCindex  <- cindex(list("Cox X1"=cox1,
		       "Cox X2"=cox2,
		       "Cox X1+X2"=cox12,
                       "RSF"=rsf1),
		  formula=Surv(time,status)~X1+X2,
		  data=dat,
                  splitMethod="bootcv",
                  B=10,
		  eval.times=seq(5,500,50))
  print(bcvCindex)
  plot(bcvCindex)
# for uncensored data the results are the same as obtained with the function rcorr.cens from Hmisc
library(Hmisc)
set.seed(16)
dat <- SimSurv(30,cens=FALSE)
fit12 <- coxph(Surv(time,status)~X1+X2,data=dat)
fit1 <- coxph(Surv(time,status)~X1,data=dat)
fit2 <- coxph(Surv(time,status)~X2,data=dat)
Cpec <- cindex(list("Cox X1+X2"=fit12,"Cox X1"=fit1,"Cox X2"=fit2),formula=Surv(time,status)~1,data=dat,eval.times=Inf)
p1 <- predictSurvProb(fit1,newdata=dat,times=100)
p2 <- predictSurvProb(fit2,newdata=dat,times=100)
p12 <- predictSurvProb(fit12,newdata=dat,times=100)
harrelC1 <- rcorr.cens(p1,with(dat,Surv(time,status)))
harrelC2 <- rcorr.cens(p2,with(dat,Surv(time,status)))
harrelC12 <- rcorr.cens(p12,with(dat,Surv(time,status)))
harrelC1[["C Index"]]==Cpec$AppCindex[["Cox.X1"]]
harrelC2[["C Index"]]==Cpec$AppCindex[["Cox.X2"]]
harrelC12[["C Index"]]==Cpec$AppCindex[["Cox.X1.X2"]]

Run the code above in your browser using DataLab