【R语言】生存分析模型

2024-05-09 01:20
文章标签 语言 生存 分析模型

本文主要是介绍【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 作为输入,并生成一个生存曲线图,用于可视化不同性别在生存时间上的差异。

 代码如下:

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 的主题更改为了黑白风格。

 

代码如下: 

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:在风险表的文本注释中显示条形图而不是名称。

 代码如下:

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("男性", "女性"):更改图例标签为 "男性" 和 "女性"。

这篇关于【R语言】生存分析模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971988

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(