楼主: 段湘杰
10760 2

[学习分享] R语言统计与绘图:ggplot2包绘制生存曲线 [推广有奖]

  • 0关注
  • 1粉丝

本科生

24%

还不是VIP/贵宾

-

威望
0
论坛币
322 个
通用积分
31.3222
学术水平
15 点
热心指数
15 点
信用等级
15 点
经验
170 点
帖子
23
精华
0
在线时间
111 小时
注册时间
2018-6-15
最后登录
2023-6-25

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

来源:R语言统计与绘图 公众号,做学习分享用。

前言

绘制Kaplan-Meier生存曲线需要用到的R包:“survminer”“survival”;如果没有请安装。

install.packages("survminer")   #下载survminer包
install.packages("survival")    #下载survival包
library(survminer)  #加载包
library(survival)  # 加载包

导入数据

数据集采用 survival 包的 lung 数据集。

data(lung)  # 加载lung数据集
View(lung)  # 查看数据集

数据集介绍

?lung  # 查询 lung 数据集信息

数据集变量介绍

lung数据集:NCCTG晚期肺癌患者的生存率。

inst:机构代码
time:生存天数
status:生存状态,1为删失,2为死亡
age:年龄
sex:性别,1为男性,2为女性
ph.ecog、ph.karno、pat.karno为评分,这里用不到
meal.cal:每餐摄入的卡路里
wt.loss:体重下降

拟合曲线

fit <- survfit(Surv(time,status) ~ sex, data = lung);fit

简单绘制

ggsurvplot(fit, data = lung)

增加中位生存时间

ggsurvplot(fit, data = lung,
           surv.median.line = "hv") # 增加中位生存时间

从图上可以看出,男性的中位生存时间小于女性。

增加置信区间

ggsurvplot(fit, data = lung,
           surv.median.line = "hv",  # 增加中位生存时间
           conf.int = TRUE) # 增加置信区间

累计风险曲线

ggsurvplot(fit, data = lung,
           conf.int = TRUE,fun = "cumhaz") # 增加中位生存时间

添加风险表

ggsurvplot(fit, data = lung,
           conf.int = TRUE,
           risk.table = TRUE)

美化图形

ggsurvplot(fit, data = lung,
           conf.int = TRUE,
           pval = TRUE,
           surv.median.line = "hv",
           risk.table = TRUE,
           xlab = "Follow up time(d)",
           legend = c(0.8,0.75),
           legend.title = "",
           legend.labs = c("Male", "Female"),
           break.x.by = 100) 

ggsurvplot()函数

ggsurvplot()函数  # ?ggsurvplot() 查看函数帮助文件

主要参数

ggsurvplot(fit,   #  生存对象
           data = NULL,  # 拟合生存曲线的数据集
           fun = NULL,  # 常用三个字符参数,"event"绘制累计事件,"cumhaz"绘制累计风险,"pct"绘制生存概率(百分比表示)
           color = NULL,  # 生存曲线的颜色, 如果层数/组数为1,则直接 color = "blue";如果层数/组数>1,默认使用 color = "strata",按层为生存曲线着色。也可使用参数调色板自定义调色板。
           palette = NULL,  # 调色板,默认"hue"。其他有"grey", c("blue", "red"),"npg", "aaas", "lancet", "jco", "ucscgb", "uchicago", "simpsons" and "rickandmorty".
           linetype = 1,  # 线型。可以按"strata"改变线型,或数字向量c(1, 2),或字符向量c("solid", "dashed")
           conf.int = FALSE,  # 逻辑词,为TRUE则绘制置信区间
           pval = FALSE, # 逻辑词为TRUE则p值绘制到图上,为数字则 pval = 0.03,为字符串 则 pval = "The hot p-value is: 0.031"
           pval.method = FALSE, # 生存曲线比较的检验方法,仅当 pval = TRUE时, 添加计算P值的检验名称的文本
           test.for.trend = FALSE, # 逻辑词,默认为FALSE,为TRUE则返回趋势p值的检验,趋势检验旨在检验生存曲线的有序差异
           surv.median.line = "none", # 在中位生存时间绘制水平或者垂直线的字符向量,可用的值包括c("none", "hv", "h", "v").v为垂直,h为水平
           risk.table = FALSE, # 图上是否添加风险表,默认不显示,"absolute" or "percentage"分别显示按时间分布的处于风险中的绝对数量和百分比数量,"abs_pct" 显示绝对数量和百分比
           cumevents = FALSE, # 是否显示累计事件表,默认不显示
           cumcensor = FALSE, # 是否显示累计删失表,默认不显示
           tables.height = 0.25, # 主要生存图下所有表格的高度,数值0-1之间
           group.by = NULL, # 包含分组变量名称的字符向量,向量长度≤2
           facet.by = NULL, #字符向量,其中包含将生存曲线分成多个面板的分组变量的名称。向量长度≤2
           add.all = FALSE, # 添加生存曲线到主图中
           combine = FALSE,
           ggtheme = theme_survminer(), # ggplot2主题名称。 默认值为theme_survminer。允许的值包括ggplot2官方主题:请参阅主题。
           tables.theme = ggtheme, ...) # 注意tables.theme是ggtheme的增量。

图标题和轴标签

title: 图表标题
xlab, ylab: 分别指x轴和y轴标签

图例

legend: 指定图例位置。可选“top”,“bottom”,“left”,“right”,“none”等。默认“top”。 legend=“none”删除图例。图例也可用c(x,y)指定,x和y的值应在01之间。
legend.title: 图例标题,如legend.title = "Sex",
legend.labs: 指定图例标签的字符向量, 替换fit中strata的名称,顺序应与strata一致。如legend.labs = c("Male", "Female")

坐标轴

break.time.by: 设定坐标轴刻度间距
break.x.by: 设定x轴坐标轴刻度的间距,如break.x.by = 100
break.y.by: 设定y轴坐标轴刻度的间距
surv.scale: 生存曲线的比例转换。允许的值为“默认”或“百分比”
xlim,ylim: 限定x轴和y轴范围,如xlim = c(0,30), ylim = c(0,1)
axes.offset: 逻辑词,默认为TRUE。为FALSE,则图坐标轴从原点开始。

置信区间

conf.int.fill: 置信区间填充的颜色
conf.int.style: 置信区间的类型,有"ribbon", "step"两种.默认为"ribbon"。
conf.int.alpha: 置信区间填充颜色的透明度,数值在0-1之间,0为完全透明,1为不透明。
以上建立在conf.int = TRUE

P值

pval.size:指定p值文本的大小,默认为 5。
pval.coord: 长度为2的数值向量,指定p值的坐标x,y,如pval.coord = c(x,y)。
pval.method.size: 指定log.rank.weights文本的大小
pval.method.coord: 指定log.rank.weights文本的坐标
log.rank.weights: 计算log-rank检验p值的权重类型的名称。默认survdiff计算常规log-rank test(weights==1)。
以上建立在pval = TRUE上
如:
ggsurvplot(fit, data = lung, pval = TRUE)
ggsurvplot(fit, data = lung, pval = 0.03)
ggsurvplot(fit, data = lung, pval = "The hot p-value is: 0.031")

删失点

censor: 逻辑词,为TRUE,则绘制删失点。
censor.shape:数值或字符,用于指定删失点的形状,默认为"+" (3), 可选"|" (124)。
censor.size: 指定删失点的大小,默认为4.5

生存表

所有表的常规参数。指定以下参数时,可应用于所有生存表(风险,累积事件和累积删失表)。

tables.col: 生存图下所有表的颜色,默认为 "black", 按层显示则tables.col = "strata".
fontsize: 指定风险表和累积事件表的字体大小。
font.family: 指定文字字体的字符向量,如 font.family = "Courier New".
tables.y.text: 表的y轴刻度标签,默认显示,为FALSE则刻度标签被隐藏
tables.y.text.col: 逻辑词,默认为FALSE,为TRUE,则表的y刻度标签将按层着色。
tables.height: 生存表的高度,数值在0-1之间,默认为0.25.

风险表

risk.table.title: 风险表的标题
risk.table.pos: 指定风险表位置的字符向量,有"out""in",out指在生存图外(默认)in指在生存图内。
risk.table.col
risk.table.fontsize
risk.table.y.text
risk.table.y.text.col 
risk.table.height
这五个和生存表常规参数意义一样,但是只应用在风险表中。

累计事件表

cumevents.title:累计事件表的标题
cumevents.col
cumevents.y.text
cumevents.y.text
cumevents.height
这四个和生存表常规参数意义一样,但是只应用于累计事件表中。

累计删失表

cumcensor.title: 累计删失表的标题
cumcensor.col
cumcensor.y.text
cumcensor.y.text.col
cumcensor.height
这四个和生存表常规参数意义一样,但是只应用于累计删失表中。

生存图高度

surv.plot.height: 生存图的高度,默认为0.75,当risk.table = FALSE时忽略

字体样式

font.title:标题
font.subtitle:副标题
font.caption:
font.x:x轴
font.y:y轴
font.tickslab: 刻度标签
font.legend:图例
用长度为3的向量分别指定大小、类型 ("plain", "bold", "italic", "bold.italic") 、颜色。
如:font.main = c(16, "bold", "darkblue")
font.x = c(14, "bold.italic", "red")
font.y = c(14, "bold.italic", "darkred")
font.tickslab = c(12, "plain", "darkgreen")
font.x = 14 则只改变字体的大小
font.x = "bold" 则只改变字体类型

End

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 4 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 鼓励积极发帖讨论
yunnandlg + 60 精彩帖子
cheetahfly + 30 精彩帖子
dxystata + 100 + 10 精彩帖子

总评分: 经验 + 160  论坛币 + 40  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

公众号:R语言统计与绘图。
沙发
tianwk 发表于 2020-4-6 21:20:38 |只看作者 |坛友微信交流群
thanks for sharing

使用道具

藤椅
团团球 学生认证  发表于 2021-6-15 09:04:32 |只看作者 |坛友微信交流群

thanks for sharing

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 22:28