本期R包:survival和survminer,survival建立生存函数,survminer内置ggplot2,ggpubrg等包,美化曲线。
一行代码配一个图,逐步讲解代码含义。
喜欢的小伙伴记得关注、点赞加转发,分享给更多的人。
公众号回复20210201获取本期代码和数据。
或在本公众号后台回复 KM 。
目录
一、人群总体生存的KM曲线
二、某个变量的KM曲线
三、KM曲线美颜
累计死亡曲线
xy轴标签
图例位置-1
图例位置-2
xy轴刻度/数字等
生存率置信区间
删失点修改
P值及log-rank检验
配色方案-1
配色方案-2
综合版的KM曲线
0
载入数据
#1.载入包
library(survival)
library(survminer)
#2.清理工作环境
rm(list = ls())
#3.读入数据
aa<- read.csv('20210201.csv')
#4.查看数据前6行
head(aa)
#5.查看数据数据性质
str(aa)
#6.查看生存或死亡人数
aa$status<-factor(aa$status)
summary(aa$status)
一
建立人群总体生存函数
km<-survfit(Surv(time,status==0)~1,data=aa)
注:status==0是指定0是结局即死亡,~1是看总体生存的情况。(status,0=死亡;1=生存)
#查看整个数据集结局(死亡)的发生时间
#详细见图片说明
summary(km)
summary(km)是该生存函数最重要的结果,它总结了生存分析所有的信息。包括3.5年生存率及其95%CI ,中位生存时间,每个时间点的患者总数和死亡患者数目。之后的操作和美化时所汇报的信息均来自于它。
详见图片:
查看3.5年生存率
summary(km,time=c(36,60))
画一个最常用的美化图形
ggsurvplot(km,
conf.int=T, #是否显示生存率的95%CI
risk.table=TRUE,#显示风险表
palette="lancet", #柳叶刀配色
title="Kaplan-Meier Curve ", #大标题
risk.table.height = 0.25 #风险表的高度比例
)
二
某个变量的KM曲线
km1<-survfit(Surv(time,status==0)~sur,data=aa)
~后1改为sur或其他变量即可(sur=手术,亚变量sur=保乳术;MAST=根治术 ;No=未手术)
summary(km1)
#查不同手术方式的3.5年生存率
summary(km1,time=c(36,60))
ggsurvplot(km1,
pval=TRUE, #显示p值
pval.coord = c(0, 0.2),#p值位置坐标
pval.size =5,#p值字体大小
conf.int=T, #是否显示生存率的95%CI
risk.table=TRUE,#显示风险表
risk.table.height = 0.25, #风险表的高度
palette="lancet", #柳叶刀配色
title="Kaplan-Meier Curve for OS ", #大标题
legend.labs=c("保乳", "全切","无手术"),
legend.title="手术", #改图例名称
surv.median.line = "hv" #中位生存期。
)
三
km曲线美颜
美化其实就是在ggsurvplot()内加一行行的代码,下面是一码一图
0. 先看无美化的ggsurvplot(km1)
ggsurvplot(km1)
1. 将生存曲线改为累计死亡曲线
ggsurvplot(km1,
fun = "cumhaz"# 累计死亡曲线
)
2. 更改xy轴标签
ggsurvplot(km1,
xlab="时间(月)" ,#x轴标签
ylab="总生存率" #y轴标签
)
3. 更改图例位置-1
ggsurvplot(km1,
legend="left")
#图例位置上、下、左、右、无=
#"top"(默认),"bottom","left","right","none"
4. 更改图例位置-2
#以xy坐标确定图例位置
ggsurvplot(km1,
legend=c(20,0.4))
5. 更改xy轴刻度/数字等
ggsurvplot(km1,
break.x.by=12 ,#x轴刻度的间距.例如12月一个刻度
break.y.by=0.2 ,# 设定y轴刻度的间距,如break.y.by = 0.2
surv.scale="percent" ,#"percent"生存用百分数表示
#xlim= c(0,80), #一般用不到
ylim=c(0,1), # y轴的范围
axes.offset=FALSE # 为FALSE,则生存曲线图的坐标轴从原点开始。
)
6. 生存率的置信区间
ggsurvplot(km1,
conf.int = TRUE,#打开置信区间
#conf.int.style="step",# 设置置信区间的类型
conf.int.alpha =0.3#指定置信区间填充颜色的透明度(0-1)
)
7. 删失点修改
ggsurvplot(km1,
censor=T, #隐藏删失,默认为T,关掉为F
censor.shape=124, # 删失的形状;默认为 +为3,|为124。
censor.size=4.5 # 删失形状的大小,默认为4.5。
)
8. P值及log-rank检验
ggsurvplot(km1,
pval = TRUE,#打开P值
pval.size=6, # p值字体大小,默认为5。
pval.coord=c(20,0.1), # p值坐标=c(x,y)
pval.method=TRUE,#打开log.rank
pval.method.size=6, #log.rank字体大小
pval.method.coord=c(1,0.1)#log.rank的坐标
)
log-rank检验
log_rank<-survdiff(Surv(time, status==0)~sur,rho=0,data=aa);log_rank
9. 配色方案-1
ggsurvplot(km1,
palette="lancet")
#使用柳叶刀自动配色,我最喜欢的配色
# 其他高分SCI的配色,jco的也很好看。任选一个
# "grey","npg","aaas","lancet","jco",
# "ucscgb","uchicago",
#"simpsons","rickandmorty".
10. 配色方案-2
ggsurvplot(km1,
palette=c("red", "yellow", "green"))
#自己配色,有几条线选几个颜色,例如
# "red", "pink", "purple",
# "deep-purple", "indigo",
# "blue", "light-blue", "cyan",
# "teal", "green", "light-green", "lime",
# "yellow", "amber", "orange",
# "deep-orange", "brown", "grey","blue-grey"
整合版本的KM曲线,根据需要删减代码
ggsurvplot(km1,
title = "三种手术方式患者的生存曲线",
xlab = "时间(月)",
ylab = "生存率",
font.main = c(16, "bold", "darkblue"), #字体大小,样式和颜色
font.x = c(12, "bold.italic","red"), #x轴标签的字体大小,斜体和颜色
font.y = c(14, "darkred"), #y轴的字体大小,颜色
font.tickslab = c(12, "plain", "darkgreen"), #更改刻度标签的字体大小,样式和颜色
legend = c(0.2, 0.2),
legend.title = "手术方式",
legend.labs = c("保乳术", "全切术","未手术"),
size = 1, #更改线号
linetype = "strata", #按组更改线型(即“分层”)
break.x.by=12 ,
break.y.by=0.2 ,
surv.scale="percent" ,
palette ="aaas",
conf.int = T,
pval = TRUE,
pval.coord = c(12, 0),
pval.size = 5,
pval.method=TRUE,
pval.method.size=5,
pval.method.coord=c(1,0),
surv.median.line = "hv",
risk.table = "absolute", #"absolute"、"percentage"、"abs_pct"", #绝对人数、百分比和危险之中
#risk.table.pos =in,#分线表放在图内
risk.table.col = "strata", #按组更改风险表颜色
risk.table.y.text.col = TRUE, #颜色风险表文本注释(按层)
risk.table.y.text = FALSE, #在风险表图例中的文本注释中显示条形而不是名称
risk.table.height = 0.2,
risk.table.title="时间点下的人群数目",
fontsize=4,#风险表字体
#ggtheme = theme_bw(), #使用主题自定义情节和风险表。
#xlim = c(0, 95),
ylim = c(0, 1)
)
ggsurvplot()函数的细节其实还有很多,这里只选择大家最常用的。
需要哪种细节时,只需将代码写入括号内,代码间以英文逗号隔开就可以了。
本期内容就到这里了,制作不易,喜欢的小伙伴帮忙点赞和转发,多谢大家支持!!
END
本公众号致力于打造实用的科研干货和临床学习资料分享平台,假如你有临床和科研上的问题或经验分享,请私信我。
感谢阅读,如有错误请指正!