簡體   English   中英

如何在 r 中安裝 Cox PH model(不止一個因素)?

[英]how to fit Cox PH model in r (more than one factors)?

我有一個用於研究乳腺癌患者的數據集。 我想擬合 Cox 比例 model(不考慮交互項)。

變量包含年齡(<40 =1, 40~60=2,>60=3),主要部位(not middle=1, middle=2,unknown=9),最大直徑(<2.5=1, 2.5~5.5 =2),絕經狀態(<2 年=1, >2 年=2,unknown=9),雌激素水平(neg=0, pos=1,unknown=9),孕酮水平(neg=0, pos=1 ,unknown=9) 和w.censored (0=censored,1=not censored)。

    'data.frame':   572 obs. of  6 variables:
 $ age       : Factor w/ 3 levels "1","2","3": 1 1 2 1 2 1 1 2 2 1 ...
 $ mepl.sts  : Factor w/ 3 levels "1","2","9": 1 3 2 1 2 1 1 2 1 1 ...
 $ pre.site  : Factor w/ 3 levels "1","2","9": 1 3 1 3 3 1 3 3 1 3 ...
 $ max.dia   : Factor w/ 4 levels "1","2","3","9": 1 2 4 3 3 3 3 3 2 2 ...
 $ es.level  : Factor w/ 3 levels "0","1","9": 3 3 3 2 2 1 1 1 1 1 ...
 $ prog.level: Factor w/ 3 levels "0","1","9": 3 3 3 1 1 1 1 1 1 1 ...

首先,我使用as. factor as. factor 然后我對 R 中的所有變量進行 Cox 擬合,得到以下結果。

fit <- coxph(Surv(surv.day,w.cens) ~age + mepl.sts + pre.site+max.dia
               + es.level+prog.level ,data=bcnew)
summary(fit)
> summary(fit)
Call:
coxph(formula = Surv(surv.day, w.cens) ~ age + mepl.sts + pre.site + 
    max.dia + es.level + prog.level, data = bcnew)

  n= 572, number of events= 74 

               coef exp(coef) se(coef)      z Pr(>|z|)    
age2        -0.6059    0.5456   0.4408 -1.374 0.169287    
age3        -0.1771    0.8377   0.5457 -0.325 0.745463    
mepl.sts2    0.1884    1.2073   0.4145  0.455 0.649412    
mepl.sts9   -0.1904    0.8266   0.6041 -0.315 0.752580    
pre.site2    0.9555    2.5999   0.3594  2.659 0.007846 ** 
pre.site9    0.6220    1.8627   0.3260  1.908 0.056347 .  
max.dia2     1.0824    2.9518   0.3722  2.908 0.003632 ** 
max.dia3     1.9059    6.7256   0.4570  4.170 3.04e-05 ***
max.dia9    -0.8610    0.4227   0.6148 -1.400 0.161380    
es.level1   -0.6653    0.5141   0.3525 -1.887 0.059152 .  
es.level9   -1.1442    0.3185   0.3101 -3.690 0.000225 ***
prog.level1 -1.1256    0.3245   0.3921 -2.871 0.004095 ** 
prog.level9      NA        NA   0.0000     NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 

Concordance= 0.826  (se = 0.021 )
Likelihood ratio test= 103.8  on 12 df,   p=<2e-16
Wald test            = 94.27  on 12 df,   p=7e-15
Score (logrank) test = 140.6  on 12 df,   p=<2e-16

由於年齡和絕經狀態的 p 值 > 0.1,因此 model 為

h(t|x)=h0(t)exp(0.9555 pre.site(2)+0.622 pre.site(9)+1.0824 max.dia(2)+1.9059 max.dia(3) -0.6653 es.level( 1)-1.1442 es.level(9)-1.1256*prog.level(1))

我不知道這個 model 是否正確,但我認為結果有些奇怪。 一個人的年齡會對生存時間產生影響,這是常識,但每個年齡組的 p 值都遠大於 0.1。

順便說一句,如果我的數據集中有 20 個變量,我可以使用step(fit)過程來獲得最終的 model 嗎?

非常感謝!

您的問題的一個來源是試圖在太小的數據集上擬合太多的系數。 雖然 572 聽起來像是很多案例,但生存 model 中的信息本質上是由事件的數量決定的。 您只有 74 個事件。

避免在生存分析中過度擬合的通常經驗法則是,每個估計的系數有 10-20 個事件,除非您使用某種形式的懲罰。 對於 74 個事件,您應該只嘗試擬合 4 到 7 個系數。 你很適合 12。這會帶來幾種風險。

一是缺少與結果的真正關聯,由於事件數量少,系數的標准誤差很高。 這可能是與年齡有關的情況——在 model 中添加更多預測因子可以降低與結果相關的其他預測因子的明顯重要性。

另一個是發現與可能發生在這個數據集中但不會在另一個數據集中復制的結果的錯誤關聯——你可能只是在這些數據中加入了噪音。 在這種有這么多預測變量的情況下,我猜想在新數據集上找不到您與此 model 相當高的 0.82 一致性。

我建議使用 Frank Harrell 的課程筆記和回歸建模策略書籍作為指南。 您會發現還有其他幾種改進建模的方法,包括:

  • 不要為“未知”設置單獨的類別。 使用插補來估計值,使建模能夠考慮到額外的不確定性。 這是一個備受推崇的程序,有助於防止偏見。
  • 不要將年齡等連續預測變量分組。 Model 它們盡可能連續,並且盡可能靈活。 例如,年輕人通常比老年人患有更具侵襲性的癌症(例如,由於遺傳問題),因此他們在診斷后會更快死亡。 正如您的數據所表明的那樣,診斷后的年齡與生存率呈 U 型關聯是很有可能的。 您的 model 應該能夠處理。
  • 不要擬合 model,然后任意丟棄系數具有 > 0.1 的預測變量。 根本不要太關注 p 值。 避免自動 model 選擇,因為您建議使用step(fit)
  • 使用引導重采樣來驗證和校准 model,檢查可能涉及多少過擬合。

生存分析很棘手。 如果您省略任何與結果相關的預測變量,您可能會對包含的預測變量的結果產生偏差。 但是,如果您包含的預測變量超出了您所允許的事件數量,則可能會出現過度擬合。 Harrell 的參考資料應該為您指明正確的方向。

如果您非常確定地知道協變量具有臨床相關性,那么即使它恰好不適合您的訓練數據,您也可以將其包含在 model 中。 從本質上講,你的先驗足夠強大,以至於你需要大量的負面證據來拒絕它。

現在為什么您的 model 的年齡似乎不顯着? 我不熟悉數據,所以我不能說。 我可以告訴你的是,我在開發 model 時會更有條理。

一個好的第一步是研究各個協變量及其與結果的關系。 去做? 年齡看起來仍然微不足道嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM