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)
可以很容易的发现与文献中的差异,可优化:
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|theme主题设置,详解绘图优化-“精雕细琢”
参考资料:
更多参数参见官方文档:https://github.com/kassambara/survminer
◆ ◆ ◆ ◆ ◆
精心整理(含图版)|R语言生信分析,可视化,你要的全拿走,建议收藏!
R|生存分析 - KM曲线 ,值得拥有姓名和颜值的更多相关文章
- R生存分析AFT
γ = 1/scale =1/0.902 α = exp(−(Intercept)γ)=exp(-(7.111)*γ) > library(survival) > myfit=survre ...
- 生存分析与R
生存分析与R 2018年05月19日 19:55:06 走在码农路上的医学狗 阅读数:4399更多 个人分类: R语言 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- Forest plot(森林图) | Cox生存分析可视化
本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/2W1W-8JKTM4S4nml3VF51w 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...
- 生存分析与R--转载
生存分析与R 生存分析是将事件的结果和出现这一结果所经历的时间结合起来分析的一类统计分析方法.不仅考虑事件是否出现,而且还考虑事件出现的时间长短,因此这类方法也被称为事件时间分析(time-to-ev ...
- R数据分析:生存分析与有竞争事件的生存分析的做法和解释
今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...
- R语言学习 - 非参数法生存分析--转载
生存分析指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断,研究生存时间和结局与众多影响因素间关系及其程度大小的方法,也称生存率分析或存活率分析.常用于肿瘤等疾病的标志物筛选.疗效及预后的考 ...
- survival analysis 生存分析与R 语言示例 入门篇
原创博客,未经允许,不得转载. 生存分析,survival analysis,顾名思义是用来研究个体的存活概率与时间的关系.例如研究病人感染了病毒后,多长时间会死亡:工作的机器多长时间会发生崩溃等. ...
- WOE:信用评分卡模型中的变量离散化方法(生存分析)
WOE:信用评分卡模型中的变量离散化方法 2016-03-21 生存分析 在做回归模型时,因临床需要常常需要对连续性的变量离散化,诸如年龄,分为老.中.青三组,一般的做法是ROC或者X-tile等等. ...
- SPSS数据分析—生存分析
生存分析是对生存时间进行统计分析的一种技术,所谓生存时间,就是指从某一时间点起到所关心的事件发生的这段时间.这里的时间不一定就是钟表日历上的时间,也有可能是其他的度量单位,比如长度单位等. 生存时间有 ...
随机推荐
- [LC] 59. Spiral Matrix II
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral ord ...
- [LC] 234. Palindrome Linked List
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- python、anaconda、jupyter notebook、pycharm、spyder
说明: 1.anaconda把任何东西都当做包来管理. 2.anaconda本省集成了python和conda.spyder.numpy等. 3.pip只用于python,conda可用于多种语言. ...
- MIO、EMIO、AXI_GPIO区别与联系
https://blog.csdn.net/u014485485/article/details/78141594 点灯实验
- SpringBoot webjars 映射
添加静态资源映射 @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.a ...
- pressure to compete|listen to sb do|have sb do|felt like|shouldn't have done|spring up|in honour of|not more than|much as|
The pressure to compete causes Americans to be energetic, but it also puts then under a constant emo ...
- orcale 11g安装,创建表空间,用户,授权用户
一.卸载旧oracle 用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下: 1. 开始->设 ...
- Python之configparser配置文件的读取
配置文件名 config.ini 文件内容: [linux] ip:10.0.13.26 port:22 username:root password:W2ynE6b58wheeFho [mysql] ...
- Android开发之《libyuv库的使用》
转自:http://bashell.nodemedia.cn/archives/build-google-libyuv-with-ndk-for-android.html 官方网站:https://c ...
- JavaScript中的document.fullscreenEnabled
本文主要讲述了: 什么是document.fullscreenEnabled 作用 兼容性 正文 什么是document.fullscreenEnabled document.fullscreenEn ...