R - pec包和coxph的cindex函数之间的差异

时间:2014-07-16 15:03:23

标签: r survival-analysis roc

我将pec包中的cindex函数与来自coxph(生存包)的结果索引进行比较。

1)首先,这两个函数之间的结果是不同的

library(pec)
library(survival)
library(prodlim)

# Simulate survival data
set.seed(12)
dat <- SimSurv(1000)

# C-index from coxph    
mod1 <- coxph(Surv(time,status)~X1+X2, data=dat)
summary(mod1)$concordance[1]

0.846249

# C-index from cindex    
cindex(mod1,formula=Surv(time,status)~X1+X2,data=dat)

           AppCindex  Pairs Concordant
coxph.model        83 915194     759712

2)如果我使用计数处理格式,cindex函数会给我一个错误

data(Melanoma)
# Calculate age at entry
Melanoma$age_entry <- Melanoma$age-(Melanoma$time/365.25)
# Use just one outcome (no competing risk scenario)
Melanoma$out <- ifelse(Melanoma$status==1,1,0) 

mod1 <- coxph(Surv(age_entry,age,out)~ulcer+thick, data=Melanoma)
summary(mod1)$concordance[1]

0.7661805 

cindex(mod1,formula=Surv(age_entry,age,out)~ulcer+thick,data=Melanoma)

Error: is.null(entry) | all(entry <= time) is not TRUE

有没有人知道为什么1)两个C索引是不同的2)如果可以在cindex函数中使用计数过程格式?

谢谢!

1 个答案:

答案 0 :(得分:0)

Re:1)coxph :: concordance与pec :: cindex

不同

在计算时,默认情况下绑定的处理方式不同 这两者之间的C指数

coxph中的公式(请参阅?survConcordance()):

(agree + tied/2)/(agree + disagree + tied).

pec::cindex中的公式:

agree/(agree + disagree)

尝试从pec::cindex的输出中手动计算这些内容。对于coxph, 使用此公式获得同意/不同意数字(通过?survConcordance):

fit <- coxph(Surv(time, status) ~ x1, data=df)
survConcordance(Surv(time, status) ~predict(fit), df)

参考

?coxph.object有:

  

一致性:一致性,由survConcordance计算。

?survConcordance有:

  

最终的一致性是(同意+并列/ 2)/(同意+不同意+并列)。

注意:请阅读关于这些关系的重要说明的完整帮助文件。

我通过手动检查数字得到了pec的公式。