我正在将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函数中使用计数过程格式?
谢谢!
在计算这两者之间的C-index时,默认情况下看起来联系的处理方式不同。
在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的公式。