熱線電話:13121318867

登錄
首頁大數據時代基于R語言實現COX模型診斷
基于R語言實現COX模型診斷
2017-05-11
收藏

基于R語言實現COX模型診斷

一般在建立好Cox模型之后,需要對模型進行診斷。診斷內容包括模型的前提條件,諸如Cox模型的PH假定(比例風險假定),共線性假定等。本篇我們通過合實際例子講解Cox模型診斷過程,實現軟件R語言。

1.1 COX模型的診斷內容

Cox模型的診斷一般包括三方面的內容:

比例風險假定;

模型影響點(異常值)識別;

比例風險的對數值與協變量之間的非線性關系識別;

對上述三方面的診斷,常見的方法為殘差法。

Schoenfeld殘差用于檢驗比例風險假定;

Deviance殘差用于影響點(異常值)識別;

Martingale殘差用于非線性檢驗;

1.2 R中用于評估Cox模型的包

我們將會用到以下兩個包:

survival #用于cox模型建立

survminer #用于cox模型診斷結果的可視化

安裝包

install.packages(c("survival","survminer"))

加載包

library("survival")

library("survminer")

1.3 建立Cox模型

我們利用survial包中自帶的肺癌數據“data(lung)”建立cox模型。

library("survival")

res.cox <- coxph(Surv(time, status) ~ age + sex +wt.loss, data =lung)#模型中有三個變量;

res.cox#顯示模型結果

Call:

coxph(formula = Surv(time, status) ~ age + sex + wt.loss,data = lung)


            coefexp(coef) se(coef)     z      p

age      0.02009   1.02029 0.00966  2.08 0.0377

sex     -0.52103   0.59391 0.17435 -2.99 0.0028

wt.loss  0.00076   1.00076 0.00619  0.12 0.9024


Likelihood ratio test=14.7 on 3 df, p=0.00212

n= 214, number of events= 152

   (14 observationsdeleted due to missingness)

1.4 模型診斷——PH假定

PH假定可通過假設檢驗和殘差圖檢驗。正常情況下,Schoenfeld殘差應該與時間無關,如果殘差與時間有相關趨勢,則違反PH假設的證據。殘差圖上,橫軸代表時間,如果殘差均勻的分布則,表示殘差與時間相互獨立。

R語言survival包中的函數cox.zph()可以實現這一個檢驗過程。

test.ph <- cox.zph(res.cox)

test.ph

            rhochisq     p

age     -0.0483 0.3780.538

sex      0.1265 2.3490.125

wt.loss  0.0126 0.0240.877

GLOBAL       NA 2.8460.416

從上面的結果可以看出,三個變量的P值都大于0.05,說明每個變量均滿足PH檢驗,而模型的整體檢驗P值0.416,模型整體滿足PH檢驗。

R語言 survminer中ggcoxzph( )函數可以畫出Schoenfeld殘差圖。

ggcoxzph(test.ph)

上圖中實線是擬合的樣條平滑曲線,虛線表示擬合曲線上下2個單位的標準差。如果曲線偏離2個單位的標準差則表示不滿足比例風險假定。從上圖中可見,各協變量滿足PH風險假設。

另一種檢查比例風險假定的圖形方法是繪制log(-log(S(t)))與t或log(t)是非平行,這個方法只能用于協變量是分類變量的情形。

如果違反比例風險假設可以通過以下方式解決:

模型中添加協變量與時間的交互相應;

分層分析;

至于如何實現,我們后期再做介紹。

1.5 模型診斷——模型影響點(異常值)識別

我們可以通過繪制Deviance殘差圖或者dfbeta值實現上述診斷。在R語言survminer中ggcoxdiagnostics()函數可以畫出Deviance殘差圖。

ggcoxdiagnostics(res.cox,type = "deviance",

                 linear.predictions = FALSE,ggtheme = theme_bw())

殘差值均勻的分布在0上下,表明滿足上述假定。

ggcoxdiagnostics(res.cox,type = "dfbeta",

                 linear.predictions = FALSE,ggtheme = theme_bw())

影響點的可能來源于數據錄入錯誤,樣本中的極值點、協變量不均衡,數據不足等。對本例,上圖顯示,將dfbeta值大小與回歸系數比較表明,即使某些dfbeta值非常大,但它們不足以對模型系數的估計值產生影響。

1.6 模型診斷——非線性診斷

一般情況下,我們假設協變量與-log(s(t))之間是線性關系。通過繪制Martingale殘差圖可以實現模型協變量的非線性診斷。非線性診斷一般是針對模型中的連續型變量。

R語言survminer中ggcoxfunctional()函數可以畫出Martingale殘差圖。

ggcoxfunctional(Surv(time, status) ~ age + log(age) + sqrt(age),data = lung)

圖中顯示年齡局部有非線性趨勢,但整體表現出線性趨勢。

推薦學習書籍
《CDA一級教材》適合CDA一級考生備考,也適合業務及數據分析崗位的從業者提升自我。完整電子版已上線CDA網校,累計已有10萬+在讀~

免費加入閱讀:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢