【R语言】生存分析模型

生存分析模型是用于研究时间至某个事件发生的概率的统计模型。这个事件可以是死亡、疾病复发、治疗失败等。生存分析模型旨在解决在研究时间相关数据时的挑战,例如右侧截尾(右侧截尾表示未观察到的事件发生,例如研究结束时还未发生事件)和数据缺失。
生存分析模型最常用的是 Cox 比例风险模型,也称为 Cox 回归模型,它是一种半参数化的模型,用于估计时间相关数据中危险比(hazard ratio)的关系。危险比描述了不同条件下事件发生的概率之比。在 Cox 比例风险模型中,假设危险函数是可共享的,即不受时间的影响,而危险比只依赖于协变量的值。
除了 Cox 比例风险模型外,还有其他类型的生存分析模型,如加速失效时间模型(accelerated failure time model)、Weibull 比例风险模型等。这些模型在不同的数据情况下可能更适用,具体取决于研究的问题和数据的性质。
生存分析模型通常应用于医学、流行病学、社会科学等领域,用于研究疾病生存率、药物治疗效果、生存质量等方面。以下通过Cox模型做一个生存风险分析:

代码如下:

if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/survminer", build_vignettes = FALSE)
library("survminer")
require("survival")
fit <- survfit(Surv(time, status) ~ sex, data = lung)
ggsurvplot(fit, data = lung)


ggsurvplot(fit, data = lung, censor.shape="|", censor.size = 4)
  1. 首先,它检查是否已经安装了 devtools 包。devtools 是一个用于在 R 中开发和安装包的工具包。如果没有安装,它会使用 install.packages() 函数安装 devtools 包。

  2. 接下来,它使用 devtools 包中的 install_github() 函数从 GitHub 上安装 survminer 包。survminer 是一个 R 包,提供了用于生存分析可视化的工具和函数。

  3. 一旦 survminer 包安装完成,代码通过 library() 函数加载了 survminer 包以便后续使用。library("survminer")survminer 包加载到 R 的工作环境中。

  4. 然后,代码使用 require() 函数来检查是否已经加载了 survival 包。survival 包是一个用于生存分析的常用包。如果未加载,require() 函数会加载 survival 包。

  5. survfit() 函数用于拟合生存分析模型。在这个例子中,它拟合了一个 Cox 比例风险模型,其中生存时间由 time 变量表示,事件状态由 status 变量表示,与性别 sex 之间的关系进行建模。这个模型是基于 lung 数据集。

  6. 最后,ggsurvplot() 函数用于绘制生存曲线图。它接收拟合的生存分析模型 fit 和数据集 lung 作为输入,并生成一个生存曲线图,用于可视化不同性别在生存时间上的差异。

代码如下:

R 复制代码
ggsurvplot(
  fit,
  data = lung,
  size = 1,                 # 改变线条大小
  palette =
    c("#E7B800", "#2E9FDF"),# 自定义颜色调色板
  conf.int = TRUE,          # 添加置信区间
  pval = TRUE,              # 添加 p 值
  risk.table = TRUE,        # 添加风险表
  risk.table.col = "strata",# 风险表按组着色
  legend.labs =
    c("男性", "女性"),      # 更改图例标签
  risk.table.height = 0.25, # 当有多个组时,修改风险表高度很有用
  ggtheme = theme_bw()      # 更改 ggplot2 主题为黑白风格
)

这段代码调用了 ggsurvplot() 函数,用于绘制生存曲线图,并设置了一些参数进行绘图的自定义。

  • size = 1:改变生存曲线的线条大小。
  • palette = c("#E7B800", "#2E9FDF"):定义了两个颜色,用于表示不同性别的生存曲线。
  • conf.int = TRUE:在生存曲线上添加了置信区间。
  • pval = TRUE:在生存曲线图上添加了 p 值。
  • risk.table = TRUE:在图的旁边添加了风险表。
  • risk.table.col = "strata":根据不同的组(strata)对风险表进行了着色。
  • legend.labs = c("男性", "女性"):将图例标签更改为了 "男性" 和 "女性"。
  • risk.table.height = 0.25:当有多个组时,可以使用此参数来修改风险表的高度。
  • ggtheme = theme_bw():将 ggplot2 的主题更改为了黑白风格。

代码如下:

R 复制代码
ggsurvplot(
  fit,                     # 拟合生存曲线的 survfit 对象。
  data = lung,             # 用于拟合生存曲线的数据集。
  risk.table = TRUE,       # 显示风险表。
  pval = TRUE,             # 显示 log-rank 检验的 p 值。
  conf.int = TRUE,         # 显示生存曲线点估计的置信区间。
  xlim = c(0,500),         # 设置 X 轴范围为 0 到 500 天。
  xlab = "时间(天)",      # 自定义 X 轴标签。
  break.time.by = 100,     # 按 100 天的时间间隔分割 X 轴。
  ggtheme = theme_light(), # 使用 theme_light() 函数定制绘图和风险表的主题。
  risk.table.y.text.col = T, # 颜色风险表文本注释。
  risk.table.y.text = FALSE # 在风险表的文本注释中显示条形图而不是名称。
)

这段代码调用了 ggsurvplot() 函数,用于绘制生存曲线图,并设置了一些参数进行绘图的自定义。

  • fit:拟合生存曲线的 survfit 对象。
  • data = lung:用于拟合生存曲线的数据集。
  • risk.table = TRUE:显示风险表。
  • pval = TRUE:显示 log-rank 检验的 p 值。
  • conf.int = TRUE:显示生存曲线点估计的置信区间。
  • xlim = c(0,500):设置 X 轴范围为 0 到 500 天。
  • xlab = "时间(天)":自定义 X 轴标签为 "时间(天)"。
  • break.time.by = 100:按 100 天的时间间隔分割 X 轴。
  • ggtheme = theme_light():使用 theme_light() 函数定制绘图和风险表的主题。
  • risk.table.y.text.col = T:颜色风险表文本注释。
  • risk.table.y.text = FALSE:在风险表的文本注释中显示条形图而不是名称。

代码如下:

R 复制代码
ggsurv <- ggsurvplot(
  fit,                     # 拟合生存曲线的 survfit 对象。
  data = lung,             # 用于拟合生存曲线的数据集。
  risk.table = TRUE,       # 显示风险表。
  pval = TRUE,             # 显示 log-rank 检验的 p 值。
  conf.int = TRUE,         # 显示生存曲线点估计的置信区间。
  palette = c("#E7B800", "#2E9FDF"), # 自定义颜色调色板。
  xlim = c(0,500),         # 设置 X 轴范围为 0 到 500 天。
  xlab = "时间(天)",      # 自定义 X 轴标签。
  break.time.by = 100,     # 按 100 天的时间间隔分割 X 轴。
  ggtheme = theme_light(), # 使用 theme_light() 函数定制绘图和风险表的主题。
  risk.table.y.text.col = T, # 颜色风险表文本注释。
  risk.table.height = 0.25, # 风险表的高度。
  risk.table.y.text = FALSE, # 在风险表的文本注释中显示条形图而不是名称。
  ncensor.plot = TRUE,      # 绘制时间 t 处被截尾的观察数。
  ncensor.plot.height = 0.25, # 截尾观察数的高度。
  conf.int.style = "step",  # 自定义置信区间的样式。
  surv.median.line = "hv",  # 添加中位生存指针。
  legend.labs =
    c("男性", "女性")      # 更改图例标签。
)
ggsurv

这段代码调用了 ggsurvplot() 函数来创建一个生存曲线图,并将结果存储在名为 ggsurv 的变量中,然后打印出这个生存曲线图。

  • ncensor.plot = TRUE:绘制时间 t 处被截尾的观察数。
  • ncensor.plot.height = 0.25:截尾观察数的高度。
  • conf.int.style = "step":自定义置信区间的样式为 "step"。
  • surv.median.line = "hv":添加中位生存指针,指定其样式为水平垂直线。
  • legend.labs = c("男性", "女性"):更改图例标签为 "男性" 和 "女性"。
相关推荐
ROC_bird..5 分钟前
STL - vector的使用和模拟实现
开发语言·c++
MavenTalk11 分钟前
Move开发语言在区块链的开发与应用
开发语言·python·rust·区块链·solidity·move
XiaoLeisj43 分钟前
【JavaEE初阶 — 多线程】生产消费模型 & 阻塞队列
java·开发语言·java-ee
2401_840192271 小时前
python基础大杂烩
linux·开发语言·python
@东辰1 小时前
【golang-技巧】- 定时任务 - cron
开发语言·golang·cron
机器人天才一号1 小时前
C#从入门到放弃
开发语言·c#
Mr_Xuhhh2 小时前
递归搜索与回溯算法
c语言·开发语言·c++·算法·github
文军的烹饪实验室2 小时前
ValueError: Circular reference detected
开发语言·前端·javascript
B20080116刘实2 小时前
CTF攻防世界小白刷题自学笔记13
开发语言·笔记·web安全·网络安全·php
Qter_Sean3 小时前
自己动手写Qt Creator插件
开发语言·qt