Answers:
predict.coxph()
计算所有预测变量的相对于样本平均值的风险比。像往常一样,将因子转换为虚拟预测变量,可以计算其平均值。回想一下Cox PH模型是对数风险的线性模型:LN ħ (吨)
其中是未指定的基准危害。等效地,将危害建模为。因此,具有预测值\ bf {X} _ {i}和\ bf {X} _ {i'}的两个人和i'之间的危险比与基线危险无关,与时间t无关:ħ (吨)ħ (吨)= H ^ 0(吨)⋅ ë β 1 X 1 + ⋯ + β p X p = ħ 0(吨)⋅ Ë X β我我' X 我X 我' Ť
为人物之间的估计的危害比和中,我们只需插入系数估计为,给予和。
作为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
现在,将预测变量的样本平均值插入公式中:
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个人的预测值插入公式中。
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
帮助页面中说明的选项进行控制。
meanFin <- mean(as.numeric(Rossi$fin) - 1)
因为fin
是绝对的,所以没有多大意义。modeFin <- get_Mode(Rossi$fin)
在这种情况下,您不需要吗?
fin
是二进制的,因此该因子的数值表示形式仅具有值1和2。减1会为我们提供虚拟编码变量,其值0和1也出现在设计矩阵中。请注意,这不适用于超过2个级别的因子。平均伪变量是否有意义当然是有争议的,但这就是predict.coxph()
事实。