R|生存分析 – KM曲線 ,值得擁有姓名和顏值

  • 2020 年 3 月 12 日
  • 筆記

 

本文首發於“生信補給站”:https://mp.weixin.qq.com/s/lpkWwrLNtkLH8QA75X5STw

 

生存分析作為分析疾病/癌症預後的出鏡頻率超高的分析手段,而其結果展示的KM曲線也必須擁有姓名和顏值

生存分析相關推文:

生存分析和KM曲線:R|生存分析(1)

分析結果一鍵輸出:R|生存分析-結果整理

時間依賴生存分析:R|timeROC-分析

 

一 數據和R包

為方便,使用內置lung數據集

#載入所需的R包
library("survival")
library("survminer")
#載入並查看數據集
data("lung")
head(lung)
 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

 

二 原生KM曲線

#構建模型
fit <- survfit(Surv(time, status) ~ sex, data=lung)

#繪製原生KM曲線

plot(fit)

可以很容易的發現與文獻中的差異,可優化:

1)區分兩條線的顏色和legend

2)坐標軸,標題,主題優化

3)Risk table

4)P值,OR值,CI值等注釋信息

 

三 優化KM曲線

1 survminer繪製KM曲線

p1 <- ggsurvplot(fit)
P1

吶,線的顏色可以和性別對應起來了,Q1解決!

 

2 坐標軸,標題,主題優化

p2 <- ggsurvplot(fit, data = lung,
          surv.median.line = "hv", #添加中位生存曲線
          palette=c("red", "blue"),  #更改線的顏色
          legend.labs=c("Sex1","Sex2"), #標籤
          legend.title="Treatment",
          title="Overall survival", #標題
          ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改橫縱坐標
          censor.shape = 124,censor.size = 2,conf.int = FALSE, #刪失點的形狀和大小
          break.x.by = 100#橫坐標間隔
          )
P2

img

以上基本就完成了KM曲線顏色,線型大小,標籤,橫縱坐標,標題,刪失點等的修改,Q2搞定!

注意中位生存時間表示50 %的個體尚存活的時間,而不是生存時間的中位數

 

3 Risk Table

p3 <- ggsurvplot(fit, data = lung,
          surv.median.line = "hv", #添加中位生存曲線
          palette=c("red", "blue"),
          legend.labs=c("Sex1","Sex2"), #標籤
          legend.title="Treatment",
          title="Overall survival",
          ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改橫縱坐標
          censor.shape = 124,censor.size = 2,conf.int = FALSE,
          break.x.by = 100,
          risk.table = TRUE,tables.height = 0.2,
          tables.theme = theme_cleantable(),
          ggtheme = theme_bw())
p3

img

注 tables.height可調整為看起來“舒服”的高度

根據risk table 可以看出關鍵點的當前狀態,Q3擺平!

4 添加註釋信息

1)添加KM的P值

P4 <- ggsurvplot(fit, data = lung,
          pval = TRUE,#添加P值
          pval.coord = c(0, 0.03), #調節Pval的位置
          surv.median.line = "hv", #添加中位生存曲線
          palette=c("red", "blue"),
          legend.labs=c("Sex1","Sex2"), #標籤
          legend.title="Treatment",
          title="Overall survival",
          ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改橫縱坐標
          censor.shape = 124,censor.size = 2,conf.int = FALSE,
          break.x.by = 100,
          risk.table = TRUE,tables.height = 0.2,
          tables.theme = theme_cleantable(),
          ggtheme = theme_bw())
P4

pval.coord可以調節P值得位置

 

2)添加COX回歸hazard ratio值等相關信息**

###添加COX回歸hazard ratio值相關信息
res_cox<-coxph(Surv(time, status) ~sex, data=lung)
p3$plot = p3$plot + ggplot2::annotate("text",x = 50, y = 0.15,
                            label = paste("HR :",round(summary(res_cox)$conf.int[1],2))) + ggplot2::annotate("text",x = 50, y = 0.10,
                   label = paste("(","95%CI:",round(summary(res_cox)$conf.int[3],2),"-",round(summary(res_cox)$conf.int[4],2),")",sep = ""))+
 ggplot2::annotate("text",x = 50, y = 0.05,
                   label = paste("P:",round(summary(res_cox)$coef[5],4)))
p3

 

3)添加其他信息

可類似上述annotation得方式,使用ggplot2添加文字,箭頭,公式等其他信息,下面為你可能需要的ggplot2的幾個知識:

ggplot2|詳解八大基本繪圖要素

ggplot2|theme主題設置,詳解繪圖優化-“精雕細琢”

ggplot2 |legend參數設置,圖形精雕細琢

ggplot2|ggpubr進行“paper”組圖合併

參考資料:

更多參數參見官方文檔:https://github.com/kassambara/survminer

◆ ◆ ◆ ◆ ◆

精心整理(含圖版)|R語言生信分析,可視化,你要的全拿走,建議收藏!