R語言-生存分析與結果的圖像處理

R語言-生存分析與結果的圖像處理

數據準備:

library("survival")
library("survminer")
data("lung")

調用“lung”數據集,使用head()命令調查前6行,得到以下結果:

 inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
1    3  306      2  74   1       1       90       100     1175      NA
2    3  455      2  68   1       0       90        90     1225      15
3    3 1010      1  56   1       0       90        90       NA      15
4    5  210      2  57   1       1       90        60     1150      11
5    1  883      2  60   1       0      100        90       NA       0
6   12 1022      1  74   1       1       50        80      513       0

time是指生存時間,status是二值型的生存狀態,其中“1”代表存活,“2”代表已經死亡。

KM非參數法:

調用survival包中的survfit來進行生存分析,得到每個時間段中的生存率。

fit <- survfit(Surv(time, status) ~ 1, data = lung)

直接查看fit的信息可以看到

> fit
Call: survfit(formula = Surv(time, status) ~ 1, data = lung)

      n  events  median 0.95LCL 0.95UCL 
    228     165     310     285     363 

n:代表總的樣本數爲228個
events:代表status爲2的樣本數(死亡樣本數)
0.95LCL:95% 置信區間的下界
0.95UCL:95%置信區間的上界
median:代表中位數

Log-Rank檢驗:

針對使用KM方法的生存分析,可以使用survdiff()來比較兩組或者多組之間的的生存曲線,調查它們生存率和標準誤之間的差異,輸出p值。

> survdiff(Surv(time, status) ~ ph.karno, data = lung)
Call:
survdiff(formula = Surv(time, status) ~ ph.karno, data = lung)

n=227, 1 observation deleted due to missingness.

              N Observed Expected (O-E)^2/E (O-E)^2/V
ph.karno=50   6        5     5.71    0.0874    0.0935
ph.karno=60  19       16     9.64    4.1905    4.5095
ph.karno=70  32       29    20.53    3.4943    4.0275
ph.karno=80  67       47    43.30    0.3161    0.4390
ph.karno=90  74       49    58.85    1.6489    2.5910
ph.karno=100 29       18    25.97    2.4454    2.9262

 Chisq= 12.3  on 5 degrees of freedom, p= 0.03 

COX半參數法:

使用coxph()函數來進行生存分析:

cox_single <- coxph(Surv(time, status) ~ sex, data = lung)    #單變量
cox_muti <- coxph(Surv(time, status) ~ age + sex + ph.ecog, data =  lung)#多變量

使用summary函數可以查看返回當結果和p值:

> summary(cox_single)
Call:
coxph(formula = Surv(time, status) ~ sex, data = lung)

  n= 228, number of events= 165 

       coef exp(coef) se(coef)      z Pr(>|z|)   
sex -0.5310    0.5880   0.1672 -3.176  0.00149 **
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

    exp(coef) exp(-coef) lower .95 upper .95
sex     0.588      1.701    0.4237     0.816

Concordance= 0.579  (se = 0.021 )
Likelihood ratio test= 10.63  on 1 df,   p=0.001
Wald test            = 10.09  on 1 df,   p=0.001
Score (logrank) test = 10.33  on 1 df,   p=0.001

coxph()會給出Likelihood ratio test,Wald test,Score (logrank) test三種檢驗的結果,當樣本數量足夠大時,三者的值相似,一般情況下Likelihood ratio test的值更加準確。

相似比檢驗:

針對cox模型,R裏面的cox.zph函數可以對其進行檢驗:

R<-cox.zph(cox.muti)

> R
        chisq df    p
age     0.188  1 0.66
sex     2.305  1 0.13
ph.ecog 2.054  1 0.15
GLOBAL  4.464  3 0.22

其原假設爲符合PH假定,代表假定HR值不隨時間發生變化,滿足比例風險假定。在結果中所有變量的p值均>0.1,無法拒絕原假設。

生存曲線和診斷圖:

1,plot()
對於KM方法而言可以直接使用plot()命令來繪製生存曲線:
在這裏插入圖片描述

plot(fit,main="survival-KM",xlab="time",ylab="rate")

2,ggsurvplot
使用ggsurvplot()函數對KM的結果繪製生存曲線:
在這裏插入圖片描述

ggsurvplot(fit,
           pval = FALSE, conf.int = TRUE, #是否顯示p值/顯示風險區域
           risk.table = TRUE, # 將風險表顯示在生存曲線下面
           risk.table.col = "strata", 
           linetype = "strata", 
           surv.median.line = "hv", # 中位數的標記可選(hv,v,h)
           ggtheme = theme_bw(), # 改變ggplot2的樣式
           palette = "green"    #設置曲線顏色
)

3,多組生存曲線
在繪製多組間生存曲線時,pval=TRUE可以輸出log-rank的p值,使用pval.method=T可以顯示計算p值的方法;
在這裏插入圖片描述
調查ph.ecog組間生存曲線的差異:

fit <- survfit(Surv(time, status) ~ ph.ecog, data = lung)
ggsurvplot(fit,data=lung,pval=T,risk.table = T,risk.table.col="red",pval.method=T)

%其他參數:

risk.table = TRUE    #風險表是否顯示
risk.table.col="red" #風險表顏色
surv.median.line = "hv"#中位數標記的方法(hv,h,v)

4,COX模型的Hazard ratio圖:
使用ggforest()函數進行繪製,可以得到log-rank的p值,AIC值
在這裏插入圖片描述5,Schoenfeld individual檢驗診斷圖:
又稱“Schoenfeld Residuals Test”,用於調查殘差與時間的獨立性,從而檢驗Cox模型中的比例風險假設。相當於是cox.zph()結果的可視化表現。P值不顯著,說明符合原假設

R<-cox.zph(cox_muti)  #cox多變量檢驗
ggcoxzph(R,resid=T,se=T,point.col = "red",point.size = 1) 

在這裏插入圖片描述參考文獻:

https://www.mbaskool.com/business-concepts/statistics/8766-schoenfeld-residuals-test.html
https://blog.csdn.net/weixin_43700050/article/details/100938707
https://blog.csdn.net/xiaohukun/article/details/78019726
https://blog.csdn.net/jaen_tail/article/details/79081954

*剛剛接觸生存分析這一塊,還有很多東西需要去學習,望大家一起討論一起學習。Fight!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章