当前位置: 首页 > article >正文

R语言绘制可用于论文发表的生存曲线图|科研绘图·24-08-25

小罗碎碎念

有关于生存曲线的基本概念(例如删失事件的定义)和绘图的详细教程我已经在5月的推文中介绍过了,有需求的同学欢迎前去考古。

R语言绘制生存分析曲线·从概念到实战的保姆级教程|2024-05-12

https://mp.weixin.qq.com/s/Z6gBbpBlALT_KKgEW29Stg

今天这期推文的目的是把主要的代码框架梳理出来,方便快速调用,省去浏览知识点分析的过程。

成品展示

跟着这期推文,你最后能实现的效果如下。

image-20240825082923321


一、曲线解读

假设我们已经掌握了一定的基础知识,那么可以看下列这个曲线。

原文链接:https://mp.weixin.qq.com/s/EiQUtJI7KlXnK_AYMhVL1g

①OS:总生存期

②纵坐标:患者生存率

③横坐标:观察时间

④HR:目标gene高表达组相对于低表达组的死亡风险比;HR<1,代表gene高表达抑制死亡;P<0.05说明两组间差异有统计学意义

⑤代表删失数据

⑥两条曲线在各个时间点上对应的人数

⑦组别:代表不同组别对应曲线


二、曲线绘制

先调用自带的数据做一些分析,然后我再介绍如何利用自己的数据进行分析。

2-1:装包

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

2-2:导入内置数据集

使用survival包的lung数据集进行演示。

View(lung) # 查看数据集

image-20240512035203570

  1. inst # 机构代码;

  2. time # 生存天数;

  3. status # 生存状态;

  4. age # 年龄;

  5. sex # 性别,1为男性,2为女性;

  6. ph.ecog、ph.karno、pat.karno # 为病人和患者评分,这里用不到;

  7. meal.cal # 进食时消耗的卡路里;

  8. wt.loss # 最近6个月内的体重下降。


2-3:拟合生存曲线

创建生存对象

survival包中先使用Surv()函数创建生存对象,生存对象是将事件时间和删失信息合并在一起的数据结构。

attach(lung) # 绑定数据集 
Surv(time,status) # 创建生存对象

这个生存对象通常用于后续的生存分析模型中,如Cox比例风险模型等,以估计生存函数、风险比或者进行时间至事件的分析。


拟合曲线

在R语言中,生存分析通常涉及使用survival包中的survfit()函数来拟合生存数据。

fit <- survfit(Surv(time,status) ~ sex,data = lung) # 数据集来源 
fit # 查看拟合曲线信息
plot(fit)#绘制曲线

现在其实就可以绘制一个非常粗糙的曲线了,后续会介绍如何完善。

image-20240824112127054


绘制基础曲线

在R语言中,ggsurvplot() 函数是 survminer 包提供的一个用于绘制生存曲线的高级函数,它基于 ggplot2 包的图形语法。

ggsurvplot(fit, data = lung)

image-20240824112236982


三、自定义曲线

3-1:增加中位生存时间

中位生存时间(median survival time)又称为生存时间的中位数,表示刚好有50%的个体其存活期大于该时间,是生存分析中常用的概括性统计量。

图解法是计算中位生存时间的方法。其利用生存曲线图,从纵轴生存率为50%处画一条与横轴平行的线,并与生存曲线相交,然后自交点画垂线与横轴相交,此交点对应的时间即为中位生存时间。

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

image-20240824112426629

从图上可以看出,男性的中位生存时间小于女性。由之前的结果可知具体时间——男性为270,女性为426。


3-2:增加置信区间

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

image-20240824112526757


3-3:累计风险曲线

当你在 ggsurvplot() 函数中设置 fun = "cumhaz" 时,函数会生成累积风险曲线,而不是默认的生存曲线。累积风险曲线通常用于展示在不同时间点之前至少一次发生事件的累积概率

ggsurvplot(fit, data = lung, conf.int = TRUE,fun = "cumhaz") # 绘制累计风险曲线

image-20240512094308432

⚠️累积风险曲线在某些情况下比生存曲线更有用,尤其是在想要强调事件发生风险随时间的累积效应时。然而,累积风险曲线的解释可能比生存曲线更复杂,因此在选择使用时需要考虑分析的目的和受众。


3-4:风险表

ggsurvplot(fit, data = lung, conf.int = TRUE,risk.table = TRUE) # 绘制累计风险曲线

image-20240824112855903


3-5:总患者生存曲线

ggsurvplot(fit, # 创建的拟合对象 
            data = lung, # 指定变量数据来源 
            conf.int = TRUE, # 显示置信区间 
            pval = TRUE, # 添加P值 
            surv.median.line = "hv", # 添加中位生存时间线 
            add.all = TRUE) # 添加总患者生存曲线

image-20240512095250773


3-6:自定义调色板

ggsurvplot(fit, # 创建的拟合对象 
          data = lung, # 指定变量数据来源 
          conf.int = TRUE, # 显示置信区间 
          pval = TRUE, # 添加P值 
          surv.median.line = "hv", # 添加中位生存时间线 
          palette = "hue") # 自定义调色板 

image-20240512095528289


3-7:美化生存曲线

ggsurvplot(fit, # 创建的拟合对象 
          data = lung, # 指定变量数据来源 
          conf.int = TRUE, # 显示置信区间 
          pval = TRUE, # 添加P值 
          surv.median.line = "hv", # 添加中位生存时间线 
          risk.table = TRUE, # 添加风险表 
          xlab = "Follow up time(d)", # 指定x轴标签 
          legend = c(0.8,0.75), # 指定图例位置 
          legend.title = "sex", # 设置图例标题 
          legend.labs = c("Male", "Female"), # 指定图例分组标签 
          break.x.by = 100) # 设置x轴刻度间距

image-20240512100344373


3-8:添加标题

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 = "sex", 
           legend.labs = c("Male", "Female"), 
           break.x.by = 100,
           title = "Author-LXLTX") # 添加图表标题

image-20240825082857755


http://www.kler.cn/a/285986.html

相关文章:

  • [Leetcode 51][Hard]-n皇后问题-回溯
  • HTML沙漏爱心
  • 换毛季猫咪化身掉毛怪,宠物浮毛如何清理?推荐用宠物空气净化器
  • 软件测试-Selenium+python自动化测试
  • Golang中的timer和ticker
  • 航空制造领域中三维工艺技术的应用
  • c-数据结构(顺序表、链表)
  • Python 实现电子邮件加密技术解析与实用代码案例
  • mysql基础语法——个人笔记
  • 【研发日记】吃透新能源充电协议(一)——GB27930实例报文解析
  • 一加8T安装 Kali NetHunter 高阶教程 KB2000刷机 param预载失败 高通9008驱动签名 小米刻晴主题
  • 「bug」nvitop ERROR: Failed to initialize curses
  • VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表
  • 两个月冲刺软考——关系模式中的候选关键字与如何分解为无损连接并保持函数依赖的解法(例题讲解,看完必会)
  • 大数据之数据湖Apache Hudi
  • Nuxt 项目实战 - 15:自定义unocss规则,让编写样式更高效
  • [Tools: LoRA] Diffusers中Stable Diffusion的实现
  • 兴业证券基于Apache DolphinScheduler的应用实践
  • R数据科学练习题部分解答,持续更新
  • 【Python】2.基础语法(2)