Predictive-Models

如何解釋 predict.coxph 的輸出?

  • December 2, 2012

擬合 coxmodel 後,可以進行預測並檢索新數據的相對風險。我不明白的是如何計算個人的相對風險以及它相對於什麼(即人口的平均值)?有什麼資源建議可以幫助理解(我在生存分析方面不是很先進,所以越簡單越好)?

編輯:以下描述適用於survival3.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"-> 1 age,:釋放時的年齡,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幫助頁面中解釋的選項進行控制。

引用自:https://stats.stackexchange.com/questions/44896

comments powered by Disqus