1

我将 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 函数中使用计数过程格式?

谢谢!

4

1 回答 1

0

回复:1)coxph::concordance 与 pec::cindex 不同

在计算这两者之间的 C-index 时,默认情况下似乎对 ties 的处理方式不同。

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有:

concordance:一致性,由 survConcordance 计算得出。

?survConcordance有:

最后的一致性是(同意 + 捆绑/2)/(同意 + 不同意 + 捆绑)。

注意:阅读完整的帮助文件以获取有关这些关系的重要说明

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

于 2017-12-17T05:32:14.073 回答