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

【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语言】生存分析模型

生存分析模型是用于研究时间至某个事件发生的概率的统计模型。这个事件可以是死亡、疾病复发、治疗失败等。生存分析模型旨在解决在研究时间相关数据时的挑战&#xff0c;例如右侧截尾&#xff08;右侧截尾表示未观察到的事件发生&#xff0c;例如研究结束时还未发生事件&#…...

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…...

【Unity】编程感悟20240510

【背景】 这一点感悟是过去有所认识&#xff0c;但是最近写Unity项目&#xff0c;涉及UDP通信需要持续监听逻辑时更加感受深刻的。 选用合适的触发点&#xff0c;用明确的逻辑避免循环处理 尽量采用明确的触发点使逻辑清晰&#xff0c;规避一定时间刷新这类的逻辑。 比如UDP…...

C#【进阶】泛型

1、泛型 文章目录 1、泛型1、泛型是什么2、泛型分类3、泛型类和接口4、泛型方法5、泛型的作用思考 泛型方法判断类型 2、泛型约束1、什么是泛型2、各泛型约束3、约束的组合使用4、多个泛型有约束思考1 泛型实现单例模式思考2 ArrayList泛型实现增删查改 1、泛型是什么 泛型实现…...

50. UE5 RPG FGameplayEffectContext

接下来&#xff0c;我想实现处理完伤害时&#xff0c;将伤害的触发格挡或者触发暴击时的逻辑传递到数据集的PostGameplayEffectExecute里面&#xff0c;这样&#xff0c;在处理IncomingDamage时&#xff0c;我们可以通过释放触发格挡或者触发暴击在UI上面进行对应的效果表现。 …...

Golang 的 unmarshal 踩坑指南

文章目录 1. 写在最前面2. 字段区分出空字段还是未设置字段2.1 问题描述2.2 解决 3. 字段支持多种类型 & 按需做不同类型处理3.1 问题描述3.2 解决 4. 碎碎念5. 参考资料 1. 写在最前面 笔者最近在实现将内部通知系统的数据定义转化为产品定义的对外提供的数据结构。 举例…...

Linux的常用指令 和 基础知识穿插巩固(巩固知识必看)

目录 前言 ls ls 扩展知识 ls -l ls -a ls -al cd cd 目录名 cd .. cd ~ cd - pwd 扩展知识 路径 / cp [选项] “源文件名” “目标文件名” mv [选项] “源文件名” “目标文件名” rm 作用 用法 ./"可执行程序名" mkdir rmdir touch m…...

MP3解码入门(基于libhelix)

主要参考资料: 【Arduino Linux】基于 Helix 解码库实现 MP3 音频播放: https://blog.csdn.net/weixin_42258222/article/details/122640413 libhelix-mp3: https://github.com/ultraembedded/libhelix-mp3/tree/master 目录 一、MP3文件二、MP3 解码库三、libhelix-mp3库3.1 …...

Oracle 中索引与完整性(SQL)

索引 在数据库中建立索引主要有以下作用&#xff1a; &#xff08;1&#xff09;快速存取数据&#xff1b; &#xff08;2&#xff09;既可以改善数据库性能&#xff0c;又可以保证列值的唯一性&#xff1b; &#xff08;3&#xff09;实现表与表之间的参照完整性&#xff1b;…...

【Linux深度学习笔记5.13(Apache)】

Apache : 1.安装yum -y install hhtpd2.启动hhtpd -k start3.停止httpd -k stop4.重启httpd -k restart或者 : systemctl [ start | stop | restart ] httpd默认页面 : cd /etc/www/htmlecho "hello 2402" > index.html验证 : 浏览器访问 : http://ip 访问控制…...

汇编语言入门:探索 x86 架构

目录 前言 1. x86 语言 x86 架构简介 x86 架构的特点 x86 架构的演变 x86 架构的应用 2. 常用汇编指令集 3. 寻址方式 结语 前言 汇编语言是一种低级编程语言&#xff0c;直接面向计算机的硬件架构。在计算机科学中&#xff0c;了解汇编语言是非常重要的&#xff0c;因…...

[ffmpeg处理指令]

1 将h264转为mp4 ffmpeg -f h264 -i front_far_0.264 -vcodec copy front_far_0.mp4 ffmpeg -f h264 -i front_near_0.264 -vcodec copy front_near_0.mp4 -i&#xff1a;表示输入文件 front_far_2.mp4&#xff1a;表示输出文件 2 h264转为图片 front_far 是目标路径,需要…...

测试之路 - 精准而优雅

引子 这几年业内一直在做精准测试&#xff0c;大都使用工具 diff 代码改动、分析代码覆盖率这些平台集成的能力。 业务测试中&#xff0c;我们在技术设计和代码实现的基础上也做了一些精减和精准的测试实践&#xff0c;通过深入测试有针对的设计 case&#xff0c;发现隐藏问题…...

Java基础篇常见面试问题总结

文章目录 1. 你是怎样理解 OOP面向对象?2. 重载与重写区别3. 接口与抽象类的区别4. 深拷贝与浅拷贝的理解5. 什么是自动拆装箱&#xff1f; int和 Integer有什么区别6. 和 equals()区别7. String类 能被继承吗为什么用 final修饰8. final、finally、finalize区别 1. 你是怎样理…...

Spring、SpringMVC

一、Spring框架中的单例Bean是线程安全的吗&#xff1f; 【默认单例的情况下】Spring Bean并没有可变的状态&#xff08;如Service类和DAO类&#xff09;&#xff0c;即只能查不能改&#xff0c;所以没有并发问题&#xff0c;所以某种程度上来说Spring的单例Bean是线程安全的。…...

【传知代码】VRT: 关于视频修复的模型(论文复现)

前言&#xff1a;随着数字媒体技术的普及&#xff0c;制作和传播视频内容变得日益普遍。但是&#xff0c;视频中由于多种因素&#xff0c;例如传输、存储和录制设备等&#xff0c;经常出现质量上的问题&#xff0c;如图像模糊、噪声干扰和低清晰度等。这类问题对用户的体验和观…...

不用投稿邮箱,怎样向各大新闻媒体投稿?

身为单位的信息宣传员,我深知肩上责任重大。每个月,完成单位在媒体上投稿发表文章的考核任务,就如同一场无声的赛跑,既要保证速度,更要注重质量。起初,我遵循“前辈们”的老路,一头扎进了邮箱投稿的海洋。但很快,现实给了我一记重拳——邮箱投稿的竞争犹如千军万马过独木桥,稿件…...

NAT技术总结与双向NAT配置案例

NAT的转换方式&#xff1a; 1.静态转换&#xff1a;固定的一对一IP地址映射。 interface GigabitEthernet0/0/1 ip address 122.1.2.24 nat static global 122.1.2.1 inside 192.168.1.1 #在路由器出接口 公网地址 私网地址。 2.动态转换&#xff1a;Basic NAT nat address-gr…...

mysql的explain

explain可以用于select&#xff0c;delete&#xff0c;insert&#xff0c;update的statement。 当explain用于statement时&#xff0c;mysql将会给出其优化器&#xff08;optimizer&#xff09;的执行计划。 通过explain字段生成执行计划表。下面来解析这个执行计划表的每一列…...

SpringBoot+Vue实现图片滑块和文字点击验证码

一、背景 1.1 概述 传统字符型验证码展示-填写字符-比对答案的流程&#xff0c;目前已可被机器暴力破解&#xff0c;应用程序容易被自动化脚本和机器人攻击。 摒弃传统字符型验证码&#xff0c;采用行为验证码采用嵌入式集成方式&#xff0c;接入方便&#xff0c;安全&#…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...

6.9本日总结

一、英语 复习默写list11list18&#xff0c;订正07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语&#xff1a;复习l默写sit12list17&#…...