全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4200 0
2020-04-01

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

前言

昨天更新了单个Kaplan-Meier生存曲线绘制,今天绘制1个或2个变量分组的分组Kaplan-Meier生存曲线。

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

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

导入数据集

data(colon)  # 加载数据集
View(colon)  # 预览数据集

数据集介绍

?colon # 查询 colon 数据集信息

数据部分变量介绍

colon数据集:B/C期结肠癌辅助化疗治疗数据

id:患者编号
study: 所有患者都是1
rx:治疗方式,有三种:观察、Levamisole、Levamisole+5-FU
sex: 性别,男性为 1,女性为 0
age: 年龄
obstruct:肿瘤是否阻塞结肠,有为1,无为0
perfor:	结肠是否穿孔,有为1,无为0
adhere:肿瘤是否粘附附近器官,有为1,无为0
nodes: 检出淋巴结的数目
time:至发生终点事件或删失的时间
status:	生存状态,1为发生终点事件,0为删失
differ:	肿瘤分化程度 (1=well, 2=moderate, 3=poor)
extent:	局部转移程度(1=粘膜下层,2=肌肉,3=浆膜,4=相邻结构)
surg:从手术到登记的时间 (0=short, 1=long)
node4: 超过4个阳性淋巴结,有为1,无为0
etype: 事件类型: 1=复发,2=死亡

拟合曲线

fit <- survfit( Surv(time, status) ~ sex, data = colon ) # 拟合性别 sex 的生存曲线。

1个分组变量

简单绘制

ggsurvplot_facet(fit, colon, facet.by = "obstruct",
                 palette = "lancet", pval = TRUE)  # 以 obstruct 分组

ggsurvplot_facet(fit, colon, facet.by = "differ",
                 palette = "lancet", pval = TRUE)  # 以 differ 分组

ggsurvplot_facet(fit, colon, facet.by = "extent",
                 palette = "lancet", pval = TRUE)  # 以 extent 分组

美化曲线

ggsurvplot_facet(fit,  
                 data = colon,  
                 facet.by = "differ",  # 以 differ 分组
                 palette = "lancet", 
                 legend.labs = c("Male","Female"), 
                 legend = c(0.9,0.8),
                 legend.title = "",
                 pval = TRUE, 
                 pval.method = TRUE, 
                 pval.coord = c(1500,0.2), 
                 pval.method.coord = c(600,0.2), 
                 nrow = 1, ncol = 3, 
                 panel.labs = list(differ = c("well","moderate","poor")), 
                 panel.labs.background = list(color = "blue", fill = "pink"), 
                 panel.labs.font = list(face = "plain", color = "black", size = 14))

2个分组变量

简单绘制

ggsurvplot_facet(fit, colon, facet.by = c("obstruct", "adhere"),
                 palette = "lancet", pval = TRUE) # 以"obstruct", "adhere"为例

ggsurvplot_facet(fit, colon, facet.by = c("obstruct", "rx"),
                 palette = "lancet", pval = TRUE) # 以"obstruct", "rx"为例

ggsurvplot_facet(fit, colon, facet.by = c("obstruct", "extent"),
                 palette = "lancet", pval = TRUE) # 以"obstruct", "extent"为例

ggsurvplot_facet(fit, colon, facet.by = c("rx", "extent"),
                 palette = "lancet", pval = TRUE) # 以"rx", "extent"为例

美化曲线

ggsurvplot_facet(fit,  
                 data = colon,  
                 facet.by = c("obstruct", "adhere"),  
                 palette = "lancet", 
                 legend.labs = c("Male","Female"), 
                 legend = c(0.9,0.9),
                 legend.title = "",
                 pval = TRUE, 
                 pval.method = TRUE, 
                 pval.coord = c(1500,0.2), 
                 pval.method.coord = c(1000,0.2), 
                 nrow = 1, ncol = 3, 
                 panel.labs = list(obstruct = c("No", "YES"), adhere = c("No", "YES")), 
                 panel.labs.background = list(color = "blue", fill = "pink"), 
                 panel.labs.font = list(face = "plain", color = "black", size = 14))

其他拟合曲线

fit2 <- survfit( Surv(time, status) ~ sex + differ, data = colon )

简单绘制

ggsurvplot_facet(fit2, colon, facet.by = "adhere",
                 palette = "lancet", pval = TRUE)

美化曲线

ggsurvplot_facet(fit2,  
                 data = colon,  
                 facet.by = "adhere",  
                 palette = "lancet", 
                 legend.labs = c("Female & Well","Female & moderate","Female & Poor","Male & Well","Male & moderate", "Male & Poor"),
                 legend = c(0.9,0.8),
                 legend.title = "",
                 pval = TRUE, 
                 pval.method = TRUE, 
                 pval.coord = c(1500,0.2), 
                 pval.method.coord = c(1000,0.2), 
                 nrow = 1, ncol = 3, 
                 panel.labs = list(adhere = c("No", "YES")), 
                 panel.labs.background = list(color = "blue", fill = "pink"), 
                 panel.labs.font = list(face = "plain", color = "black", size = 14))

ggsurvplot_facet()函数

ggsurvplot_facet(fit,  # 拟合的生存对象
                 data,  # 拟合生存曲线的数据集
                 facet.by,  # 长度为1或2的字符向量,分组生存曲线中指定的数据集中的分组变量
                 color = NULL,  # 生存曲线的颜色, n.strata = 1, 则color = "blue"; n.strata>1,默认 color = "strata",按分组为生存曲线着色
                 palette = NULL, # 自定义调色板设置颜色, 自定义颜色:c("blue", "red");或brewer palettes如"RdBu", "Blues";或scientific journal palettes如 "npg", "aaas", "lancet", "jco", "ucscgb", "uchicago", "simpsons" and "rickandmorty"
                 legend.labs = NULL, # 指定图例标签的字符向量,用来替换拟fit中strata的名称,顺序应该和strata一样
                 pval = FALSE, # P值添加有3种方式,逻辑词、数值或字符串;为TRUE则图上添加计算的p值;为数字则将此数值代替计算的p值;为字符串则将自定义的p值添加到图上。
                 pval.method = FALSE, # 仅在pval=TRUE时有效,添加计算p值的检验名称的文本,该文本对应生存曲线的比较
                 pval.coord = NULL, # 长度为2的向量,指定p值的坐标,如c(x,y)
                 pval.method.coord = NULL, # 同上,指定检验方法文本的坐标
                 nrow = NULL, # 面板中的行数和列数,仅当一个分组变量时使用
                 ncol = NULL, 
                 scales = "fixed", # 面板中坐标轴比例,默认"fixed",其他还有"free", "free_x", "free_y"
                 short.panel.labs = FALSE, # 逻辑词,默认为FALSE,为TRUE,则省略变量名称为面板创建简短标签
                 panel.labs = NULL, # 1个或2个字符向量的列表,用于修改标签文本。如panel.labs = list(sex = c(“ Male”,“ Female”))指定“ sex”变量的标签。两个分组变量,如panel.labs = list(sex = c(“ Male”,“ Female”),rx = c(“ Obs”,“ Lev”,“ Lev2”)))。
                 panel.labs.background = list(color = NULL, fill =NULL), # 自定义面板标签背景的列表,应包含以下元素(color, linetype, size: 背景线的颜色、类型和大小;fill:背景填充颜色),如panel.labs.background = list(color = "blue", fill = "pink").
                 panel.labs.font = list(face = NULL, color = NULL, size = NULL,angle = NULL), # 指定面板标签的大小,外观/样式,颜色和方向角度。
                 panel.labs.font.x = panel.labs.font,  # 同上,当分别指定x轴和y轴
                 panel.labs.font.y = panel.labs.font, ...) # 其他参数同ggsurvplot()函数

End

二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群