楼主: 段湘杰
3393 0

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

  • 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生存曲线绘制,今天绘制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

二维码

扫码加我 拉你入群

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

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


已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 精彩帖子
cheetahfly + 30 精彩帖子

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

公众号:R语言统计与绘图。
您需要登录后才可以回帖 登录 | 我要注册

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

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

GMT+8, 2024-4-26 19:30