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

问题描述 投票:1回答: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函数中使用计数过程格式?

谢谢!

r survival-analysis roc
1个回答
0
投票

Re: 1) coxph::concordance differs from pec::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的公式。

© www.soinside.com 2019 - 2024. All rights reserved.