如何解釋 predict.coxph 的輸出?
擬合 coxmodel 後,可以進行預測並檢索新數據的相對風險。我不明白的是如何計算個人的相對風險以及它相對於什麼(即人口的平均值)?有什麼資源建議可以幫助理解(我在生存分析方面不是很先進,所以越簡單越好)?
編輯:以下描述適用於
survival
3.2-8 及以下版本。從版本 3.2-9 開始,predict.coxph()
關於處理 0/1(虛擬指標)變量的默認行為發生了變化。見新聞。
predict.coxph()
計算相對於所有樣本平均值的風險比 $ p $ 預測變量。像往常一樣將因子轉換為可以計算其平均值的虛擬預測變量。回想一下,Cox PH 模型是對數風險的線性模型 $ \ln h(t) $ :$$ \ln h(t) = \ln h_{0}(t) + \beta_{1} X_{1} + \dots + \beta_{p} X_{p} = \ln h_{0}(t) + \bf{X} \bf{\beta} $$
在哪裡 $ h_{0}(t) $ 是未指定的基線危害。等效地,危險 $ h(t) $ 被建模為 $ h(t) = h_{0}(t) \cdot e^{\beta_{1} X_{1} + \dots + \beta_{p} X_{p}} = h_{0}(t) \cdot e^{\bf{X} \bf{\beta}} $ . 兩個人之間的風險比 $ i $ 和 $ i' $ 帶有預測值 $ \bf{X}{i} $ 和 $ \bf{X}{i'} $ 因此獨立於基線危險並且獨立於時間 $ t $ :
$$ \frac{h_{i}(t)}{h_{i'}(t)} = \frac{h_{0}(t) \cdot e^{\bf{X}{i} \bf{\beta}}}{h{0}(t) \cdot e^{\bf{X}{i'} \bf{\beta}}} = \frac{e^{\bf{X}{i} \bf{\beta}}}{e^{\bf{X}_{i'} \bf{\beta}}} $$
對於估計的人與人之間的風險比 $ i $ 和 $ i' $ ,我們只需插入係數估計 $ b_{1}, \ldots, b_{p} $ 為了 $ \beta_{1}, \ldots, \beta_{p} $ , 給 $ e^{\bf{X}{i} \bf{b}} $ 和 $ e^{\bf{X}{i'} \bf{b}} $ .
作為 R 中的一個示例,我使用了來自John Fox 附錄的 Cox-PH 模型的數據,該模型提供了非常好的介紹性文本。首先,我們獲取數據並為釋放囚犯的逮捕時間建立一個簡單的 Cox-PH 模型(
fin
:因子 - 接受了虛擬編碼的經濟援助"no"
-> 0,"yes"
-> 1age
,:釋放時的年齡,prio
:先前定罪的數量):> URL <- "https://socialsciences.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
現在我們將預測變量的樣本平均值插入 $ e^{\bf{X} \bf{b}} $ 公式:
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 個人的預測值代入 $ e^{\bf{X} \bf{b}} $ 公式。
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
幫助頁面中解釋的選項進行控制。