R|生存分析 - KM曲线 ,值得拥有姓名和颜值

> 本文首发于“生信补给站”: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)
img

可以很容易的发现与文献中的差异,可优化:

1)区分两条线的颜色和legend

2)坐标轴,标题,主题优化

3)Risk table

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

三 优化KM曲线

1 survminer绘制KM曲线

p1 <- ggsurvplot(fit)
P1
img

呐,线的颜色可以和性别对应起来了,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
img

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
img

3)添加其他信息

可类似上述annotation得方式,使用ggplot2添加文字,箭头,公式等其他信息,下面为你可能需要的ggplot2的几个知识:

ggplot2|详解八大基本绘图要素

ggplot2|theme主题设置,详解绘图优化-“精雕细琢”

ggplot2 |legend参数设置,图形精雕细琢

ggplot2|ggpubr进行“paper”组图合并

参考资料:

更多参数参见官方文档:https://github.com/kassambara/survminer

◆ ◆ ◆ ◆ ◆

精心整理(含图版)|R语言生信分析,可视化,你要的全拿走,建议收藏!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容

  • 图文原创:想想(程冬容) 我不知道 脚下的路有多长 日头还有多远 漫漫无期的等待正 层层剥离我的希冀 岁月冲走了旧...
    闲耕堂一一想想阅读 462评论 2 5
  • 文|沐木西 《香蜜》看得我心生荡漾,恋爱常有的情景,看着心动,但自己置身于现实,心思却很平静。三生三世,只...
    沐木西阅读 431评论 0 1
  • 当前,融资难、融资贵问题可以说是挡在我国中小企业发展面前的“一座大山”。企业的社会融资成本究竟处在什么水平?中小企...
    带鱼圈阅读 621评论 0 0
  • 门 我今年二十四岁。 周末,我正坐在租住的房间里。眼里是时下流行的电视剧,手里不自觉的翻动屏幕,考虑午餐是吃个盖浇...
    p_fish阅读 196评论 0 0