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

以上基本就完成了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

注 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语言生信分析,可视化,你要的全拿走,建议收藏!

R|生存分析 - KM曲线 ,值得拥有姓名和颜值的更多相关文章

  1. R生存分析AFT

    γ = 1/scale =1/0.902 α = exp(−(Intercept)γ)=exp(-(7.111)*γ) > library(survival) > myfit=survre ...

  2. 生存分析与R

    生存分析与R 2018年05月19日 19:55:06 走在码农路上的医学狗 阅读数:4399更多 个人分类: R语言   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  3. Forest plot(森林图) | Cox生存分析可视化

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/2W1W-8JKTM4S4nml3VF51w 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...

  4. 生存分析与R--转载

    生存分析与R 生存分析是将事件的结果和出现这一结果所经历的时间结合起来分析的一类统计分析方法.不仅考虑事件是否出现,而且还考虑事件出现的时间长短,因此这类方法也被称为事件时间分析(time-to-ev ...

  5. R数据分析:生存分析与有竞争事件的生存分析的做法和解释

    今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...

  6. R语言学习 - 非参数法生存分析--转载

    生存分析指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断,研究生存时间和结局与众多影响因素间关系及其程度大小的方法,也称生存率分析或存活率分析.常用于肿瘤等疾病的标志物筛选.疗效及预后的考 ...

  7. survival analysis 生存分析与R 语言示例 入门篇

    原创博客,未经允许,不得转载. 生存分析,survival analysis,顾名思义是用来研究个体的存活概率与时间的关系.例如研究病人感染了病毒后,多长时间会死亡:工作的机器多长时间会发生崩溃等. ...

  8. WOE:信用评分卡模型中的变量离散化方法(生存分析)

    WOE:信用评分卡模型中的变量离散化方法 2016-03-21 生存分析 在做回归模型时,因临床需要常常需要对连续性的变量离散化,诸如年龄,分为老.中.青三组,一般的做法是ROC或者X-tile等等. ...

  9. SPSS数据分析—生存分析

    生存分析是对生存时间进行统计分析的一种技术,所谓生存时间,就是指从某一时间点起到所关心的事件发生的这段时间.这里的时间不一定就是钟表日历上的时间,也有可能是其他的度量单位,比如长度单位等. 生存时间有 ...

随机推荐

  1. .net core 读取json文件

    核心代码 Program.cs: using System; using System.IO; using Microsoft.Extensions.Configuration; namespace ...

  2. 简单php递归无限mysql记录

    <?php header('content-type:text/html;charget=gb2312'); $d='';     get_title($d,0,'='); function g ...

  3. 使用阿里大于平台发送短信验证码java代码实现

    待续..网站app后台还未完成,不能添加签名,短信不能正常发送. Tip: https://help.aliyun.com/document_detail/55284.html?spm=5176.sm ...

  4. MyBatis基本使用步骤

    MyBatis是一个数据持久层(ORM)框架.把实体 类和SQL语句之间建立了映射关系,是一种半自 动化的ORM实现.MyBATIS需要开发人员自己来写sql语句,这可以增加了程序的灵活性,在一定程度 ...

  5. hibernate lazy属性参数说明

    lazy,延迟加载 Lazy的有效期:只有在session打开的时候才有效:session关闭后lazy就没效了. lazy策略可以用在: * <class>标签上:可以取值true/fa ...

  6. 序列化模块ModelSerializer上补充及ListSerializer

    整体单改 路由层.模型层.序列化层不需要做修改,只需要处理视图层:views.py """ 1) 单整体改,说明前台要提供修改的数据,那么数据就需要校验,校验的数据应该在 ...

  7. Python---12函数式编程------12.2返回函数

    返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ...

  8. python Select\Poll\Epoll异步IO与事件驱动

    参考:http://www.cnblogs.com/alex3714/articles/5248247.html 写服务器处理模型的程序时通常采用的模型: (1)每收到一个请求,创建一个新的进程,来处 ...

  9. ERROR 1129 (00000) Host ‘XXXXXX’ is blocked because of many connection errors; unblock with ‘mysqlad

    1.今天早上由于公司网络带宽达到上限,导致多台web服务器连接mysql服务器超时.后来情况好转后,连接数据库服务器出现如下错误. Host '*' is blocked because of man ...

  10. 手术Robot能取代医生吗?

    现在,机械自动化已经成为各领域为之神往的大趋势,从工业组装,到智能物流,再到餐饮.银行服务,以及娱乐等等,管理者无不处心积虑地降低成本.提高效率,其中,一个非常重要的手段就是利用机器取代人工.医院,作 ...