如何解释predict.coxph的输出?


17

拟合coxmodel之后,可以进行预测并检索新数据的相对风险。我不了解的是如何计算一个人的相对风险,以及相对风险是什么(即人口的平均值)?有什么建议可以帮助您理解(我在生存分析方面不是很先进,所以越简单越好)?

Answers:


32

predict.coxph()计算所有预测变量的相对于样本平均值的风险比。像往常一样,将因子转换为虚拟预测变量,可以计算其平均值。回想一下Cox PH模型是对数风险的线性模型:LN ħ plnh(t)

lnh(t)=lnh0(t)+β1X1++βpXp=lnh0(t)+Xβ

其中是未指定的基准危害。等效地,将危害建模为。因此,具有预测值\ bf {X} _ {i}\ bf {X} _ {i'}的两个人和i'之间的危险比与基线危险无关,与时间t无关:ħ ħ = H ^ 0ë β 1 X 1 + + β p X p = ħ 0Ë X β' X X ' Ťh0(t)h(t)h(t)=h0(t)eβ1X1++βpXp=h0(t)eXβiiXiXit

hi(t)hi(t)=h0(t)eXiβh0(t)eXiβ=eXiβeXiβ

为人物之间的估计的危害比ii中,我们只需插入系数估计b1,,bpβ1,,βp,给予eXibËX一世b

作为R中的示例,我使用John Fox在Cox-PH模型上的附录中的数据,该附录提供了非常好的介绍性文字。首先,我们获取数据并为释放释放的囚犯的时间建立一个简单的Cox-PH模型(fin:因素-使用虚拟编码获得的经济援助"no"-> 0,"yes"-> 1 age:释放时的年龄,prio:先前被定罪的次数):

> URL   <- "http://socserv.mcmaster.ca/jfox/Books/Companion/data/Rossi.txt"
> Rossi <- read.table(URL, header=TRUE)                  # our data
> Rossi[1:3, c("week", "arrest", "fin", "age", "prio")]  # looks like this
  week arrest fin age prio
1   20      1  no  27    3
2   17      1  no  18    8
3   25      1  no  19   13

> library(survival)                                      # for coxph()    
> fitCPH <- coxph(Surv(week, arrest) ~ fin + age + prio, data=Rossi)    # Cox-PH model
> (coefCPH <- coef(fitCPH))                              # estimated coefficients
     finyes         age        prio 
-0.34695446 -0.06710533  0.09689320 

现在,将预测变量的样本平均值插入公式中:ËXb

meanFin  <- mean(as.numeric(Rossi$fin) - 1)   # average of financial aid dummy
    meanAge  <- mean(Rossi$age)                   # average age
meanPrio <- mean(Rossi$prio)                  # average number of prior convictions
rMean <- exp(coefCPH["finyes"]*meanFin        # e^Xb
           + coefCPH["age"]   *meanAge
           + coefCPH["prio"]  *meanPrio)

现在,我们将前4个人的预测值插入公式中。ËXb

r1234 <- exp(coefCPH["finyes"]*(as.numeric(Rossi[1:4, "fin"])-1)
           + coefCPH["age"]   *Rossi[1:4, "age"]
           + coefCPH["prio"]  *Rossi[1:4, "prio"])

现在计算前4个人相对于样本平均值的相对风险,并将其与的输出进行比较predict.coxph()

> r1234 / rMean
[1] 1.0139038 3.0108488 4.5703176 0.7722002

> relRisk <- predict(fitCPH, Rossi, type="risk")   # relative risk
> relRisk[1:4]
        1         2         3         4 
1.0139038 3.0108488 4.5703176 0.7722002

如果您有分层模型,则将与分层predict.coxph()平均值进行比较,可以通过reference帮助页面中说明的选项进行控制。


2
+1是因为从帮助页面上无法确切地了解预报.coxph的功能!
ocram

那很棒!很简单的理解!
user4673 2012年

meanFin <- mean(as.numeric(Rossi$fin) - 1)因为fin是绝对的,所以没有多大意义。modeFin <- get_Mode(Rossi$fin)在这种情况下,您不需要吗?
朱巴卜2014年

1
@Zhubarb fin是二进制的,因此该因子的数值表示形式仅具有值1和2。减1会为我们提供虚拟编码变量,其值0和1也出现在设计矩阵中。请注意,这不适用于超过2个级别的因子。平均伪变量是否有意义当然是有争议的,但这就是predict.coxph()事实。
caracal 2014年

换句话说,您将如何解释3.01的危险比(例如relRisk [2])?
RNB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.