[英]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 的課程筆記和回歸建模策略書籍作為指南。 您會發現還有其他幾種改進建模的方法,包括:
step(fit)
。生存分析很棘手。 如果您省略任何與結果相關的預測變量,您可能會對包含的預測變量的結果產生偏差。 但是,如果您包含的預測變量超出了您所允許的事件數量,則可能會出現過度擬合。 Harrell 的參考資料應該為您指明正確的方向。
如果您非常確定地知道協變量具有臨床相關性,那么即使它恰好不適合您的訓練數據,您也可以將其包含在 model 中。 從本質上講,你的先驗足夠強大,以至於你需要大量的負面證據來拒絕它。
現在為什么您的 model 的年齡似乎不顯着? 我不熟悉數據,所以我不能說。 我可以告訴你的是,我在開發 model 時會更有條理。
一個好的第一步是研究各個協變量及其與結果的關系。 去做? 年齡看起來仍然微不足道嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.