零基础入门转录组数据分析——预后模型之多因素cox模型

news2024/9/23 7:24:30

零基础入门转录组数据分析——预后模型之多因素cox模型

目录

  • 零基础入门转录组数据分析——预后模型之多因素cox模型
    • 1. 预后模型和多因素cox模型基础知识
    • 2. 多因素cox预后模型(Rstudio)——代码实操
      • 2. 1 数据处理
      • 2. 2 构建多因素cox模型(用输入的全部10个基因)
      • 2. 3 计算风险评分



1. 预后模型和多因素cox模型基础知识

1.1 预后模型是什么?
预后模型(Prognostic Model)是一种基于统计学和机器学习方法的预测工具,它通过分析患者的临床特征、生物标志物、治疗方案等多种因素,来预测患者未来发生某种不良事件(如疾病复发、死亡等)的概率。

1.2 预后模型的特点是什么?

  • 时间维度: 预后模型通常具有时间维度,即预测的是未来某一时刻或时间段内发生的事件,例如:在1000天的时候疾病患者的生存的概率。
  • 多因素分析: 预后模型考虑多种影响因素,包括患者的临床特征、生物学标志物、治疗方案等,以提高预测的准确性和可靠性。

1.3 构建预后模型对于临床应用有哪些帮助?

  • 指导临床决策: 预后模型可以帮助医生预测疾病的可能进展,从而为患者提供更加个性化的治疗建议。例如,在癌症治疗中,预后模型可以预测患者的复发风险和生存时间,帮助医生制定更加合理的治疗方案。

  • 疾病风险评估: 预后模型能够识别哪些患者更有可能出现不良结局,使医生可以进行早期干预,降低患者的风险。

  • 提供研究基础: 预后研究为后续的临床试验提供了有价值的数据,为疾病的进一步研究打下基础,例如:后续研究可以重点关注某些指标/特征。

1.4 风险评分是什么?
风险评分是一种量化评估患者疾病风险或治疗结果的方法。它通过综合考虑患者的多个临床特征和生物标志物,计算出一个数值(即风险评分),用于预测患者的预后(如生存率、复发率等)或治疗反应。

1.5 风险评分和预后模型的关系是什么?
预后模型往往通过计算风险评分来实现对患者预后的预测,风险评分是预后模型中的核心组成部分,它反映了模型对患者临床结局的量化评估。 简单理解为:风险评分就是预后模型的量化指标,后续也是通过风险评分来对预后模型进行验证

1.6 多因素cox模型是什么?
多因素Cox模型,即Cox比例风险模型(Cox Proportional Hazards Model),是一种可以同时分析多个特征/变量对患者生存状态影响的统计模型。

1.7 多因素cox分析和之前的单因素cox分析的区别?
区别就在于: 单因素cox分析是对每个特征/变量单独进行分析,来研究该特征/变量是否与患者生存有联系,局限性就在于只分析了一种特征/变量。然鹅不同特征/变量之间或多或少都是存在联系的,而多因素cox分析就是同时分析多个特征/变量对于生存时间的影响,来看不同特征/变量对于患者生存的影响是否独立。

举个栗子: 有8个基因通过了单因素cox筛选,被认为是预后基因 (可以显著影响患者生存或复发) ,此时将8个基因进行多因素cox分析,有3个基因多因素cox计算的p < 0.05,此时这3个基因被认为是独立预后基因——虽然多个基因之间存在相互干扰的情况,但是这3个基因仍然显著影响患者生存或复发

1.8 多因素cox分析筛选独立预后基因和多因素cox构建预后模型有什么区别?
目的不一样:前者是用来筛选基因的,后者是用输入的基因构建模型并计算风险评分

注:多因素cox计算风险评分这里有两种思路(在本章中会重点介绍第一种方式,在下一章中会介绍第二种方式):
(1)第一种就是直接用输入的全部基因去构建多因素cox模型并计算风险评分。
(2)第二种是在第一种多因素cox模型的基础上加入逐步回归,剔除一些相对不重要的基因,剩下的基因构建的模型被认为是最优模型,拿这个模型去计算风险评分

综上所述: 预后模型就是一种预测工具,它可以通过多种特征/变量来预测未来某段时间患者的生存/复发概率,在预后模型中有一个量化指标叫做风险评分。在确认要输入的特征/变量之后,就可以去构建多因素cox预后模型并计算风险评分。

注意:
(1)与预后相关的分析输入的都是疾病样本,和对照样本无关!!
(2)输入的特征/变量必须是与预后相关的特征/变量,如何筛选预后特征,可见之前的章节:单因素cox筛选预后相关特征



2. 多因素cox预后模型(Rstudio)——代码实操

本项目以TCGA——肺腺癌为例展开分析
物种:人类(Homo sapiens)
R版本:4.2.2
R包:tidyverse,survival

废话不多说,代码如下:

2. 1 数据处理

设置工作空间:

rm(list = ls()) # 删除工作空间中所有的对象
setwd('/XX/XX/XX') # 设置工作路径
if(!dir.exists('./15_risk_model_multivariate_cox')){
  dir.create('./15_risk_model_multivariate_cox')
} 
setwd('./15_risk_model_multivariate_cox/') 

加载包:

library(tidyverse)
library(survival)

导入要分析的表达矩阵train_data ,并对train_data 的列名进行处理(这是因为在读入的时候系统会默认把样本id中的“-”替换成“.”,所以要给替换回去

train_data <- read.csv("./data_fpkm.csv", row.names = 1, check.names = F)  # 行名为全部基因名,每列为样本名
colnames(train_data) <- gsub('.', '-', colnames(train_data), fixed = T)

train_data 如下图所示,行为基因名(symbol),列为样本名
在这里插入图片描述
导入分组信息表group

group <- read.csv("./data_group.csv", row.names = 1) # 为每个样本的分组信息(tumor和control)
colnames(group) <- c('sample', 'group')

group 如下图所示,第一列sample为样本名,第二列为样本对应的分组 (分组为二分类变量:disease和control)
在这里插入图片描述
导入样本对应的生存信息表survival_data

survival_data <- read.csv('./data_survival.csv', row.names = 1, check.names = F) # 样本生存信息(生存时间,生存状态)

survival_data 如下图所示,第一列sample为样本名,第二列为样本对应的生存状态(0表示存活,1表示死亡) ,第三列为样本对应的生存时间(单位是天
在这里插入图片描述

接下来从group,train_data 和 survival_data中筛选出疾病样本

注:涉及到复发/生存的分析点基本都是用的疾病样本,不要附加对照样本!!!!

group <- group[group$group == 'disease', ] ## 筛选疾病样本
train_data <- train_data[, group$sample] ## 从全部表达矩阵中同样筛选出疾病样本
survival_data <- survival_data[survival_data$sample %in% group$sample, ] ## 从生存信息表中提取出疾病样本的生存信息

导入要用于构建模型的基因hub_gene (10个基因,假设这10个基因均通过了前面的单因素cox筛选是预后基因)

hub_gene <- data.frame(symbol = gene <- c('VPS13D', 'MFF', 'ACSL1', 'VDAC1', 'PRELID1', 'BAK1',
                                          'CYCS', 'BCL2L10', 'MPV17L', 'PHB'))
colnames(hub_gene) <- "symbol"

hub_gene 如下图所示,只有一列:10个基因的基因名
在这里插入图片描述

train_data中取出这10个基因对应的表达矩阵,并且与之前准备的生存信息表从survival_data进行合并

dat <- train_data[rownames(train_data) %in% hub_gene$symbol, ] %>%
  t() %>% 
  as.data.frame() # 整理后行为样本名,列为基因名
dat$sample <- rownames(dat)
dat <- merge(survival_data, dat, var = 'sample')
dat <- column_to_rownames(dat, var = "sample") %>% as.data.frame()

dat 如下图所示,行为样本名,第一列OS为生存状态,OS.time为生存时间,后面的列均为基因的表达量。
在这里插入图片描述

2. 2 构建多因素cox模型(用输入的全部10个基因)

通过as.formula函数将要进行分析的生存状态(OS)和生存时间(OS.time)以及基因转换为R的公式对象

## 准备多因素cox的公式
multivariable_cox_formula <- as.formula(paste0('Surv(OS.time, OS)~',
                              paste(hub_gene$symbol,
                                    sep = '',
                                    collapse = '+')))

multivariable_cox_formula如下图所示
在这里插入图片描述
根据准备的公式拟合Cox比例风险回归模型

## 多因素cox分析
multivariabl_cox <- coxph(multivariable_cox_formula,
                          data = dat)

在查看多因素cox结果multivariabl_cox前需要进行ph假定检验

## ph假设检验
multivariabl_cox_ph <- cox.zph(multivariabl_cox)
multivariabl_cox_ph_table <- multivariabl_cox_ph$table[-nrow(multivariabl_cox_ph$table),] %>% as.data.frame()

PH假定是Cox比例风险回归模型的一个核心假设,它要求不同个体之间的风险比率(hazard ratio)在整个随访期间内保持恒定,即不受时间的影响。换句话说,不同个体的风险在整个时间范围内以相同的比率增加或减少

举个栗子:假设正在研究两种不同治疗方法(治疗A和治疗B)对癌症患者生存时间的影响。招募了100名癌症患者,其中50名接受治疗A,50名接受治疗B,目标是确定哪种治疗方法能让患者活得更长。此时要控制不论是在研究开始时、中途还是结束时,治疗A组相对于治疗B组的死亡风险都应该保持不变,否则无法说明是治疗效果差诱导的死亡还是由于其他因素干扰导致的死亡,这时模型的估计结果可能会受到偏差,导致无法准确判断哪种治疗方法更有效。

multivariabl_cox_ph_table 如下图所示

  • chisq: 这一列显示的是卡方(Chi-squared)统计量的值。在进行PH假定检验时,这个统计量用于量化协变量效应是否随时间变化。具体来说,它是通过比较不同时间点的风险比率来计算的。如果chisq值很小(并且对应的p值也很大),那么可以认为PH假定成立,即风险比率在整个随访期间内保持恒定
  • df: 这一列显示的是自由度(Degrees of Freedom)。在PH假定检验的上下文中,这个值通常等于1,因为在检验的是单个协变量是否满足PH假定。
  • p: 这一列显示的是与chisq统计量相关联的p值。如果p值大于0.05,则没有足够的证据拒绝PH假定的零假设,即认为PH假定成立——风险比率在整个随访期间内保持恒定,即不受时间的影响。

在这里插入图片描述

multivariabl_cox_ph_table 中可以看到第三列对应的p值大于0.05,说明所有基因均满足ph假定检验,可以往下查看多因素cox的结果,否则要剔除p < 0.05的基因重新构建模型。

接下来就可以提取多因素cox分析结果的详细信息了

## 提取多因素cox分析结果的详细信息
multivariabl_cox_res_all <- summary(multivariabl_cox)

multivariable_cox_res <- data.frame(gene = rownames(data.frame(multivariabl_cox_res_all$coefficients)),
                                    coef = data.frame(multivariabl_cox_res_all$coefficients)[, 1],
                                    p_value = signif(as.matrix(multivariabl_cox_res_all$coefficients)[,5],2),
                                    HR = signif(as.matrix(multivariabl_cox_res_all$coefficients)[,2],2), 
                                    HR.95L = signif(multivariabl_cox_res_all$conf.int[,3],2), 
                                    HR.95H = signif(multivariabl_cox_res_all$conf.int[,4],2))

write.csv(multivariable_cox_res, './multivariable_cox_res.csv')

multivariable_cox_res 如下图所示:

  • gene——表示基因名称
  • coef——为每个基因对应的系数(这个系数就是后面参与风险评分计算的
  • p_value——表示多因素cox计算的p值,小于0.05被认为该基因是独立预后基因
  • HR——表示风险比值比(如果HR大于1表示该基因是个危险因素,如果HR小于1表示该基因是个安全因素
  • HR.95L和HR.95H——表示HR波动的95上下置信区间,可以理解成波动范围
    在这里插入图片描述

2. 3 计算风险评分

接下来就是计算该模型对应的风险评分,来量化评估该模型对患者未来健康状况或疾病进展的风险。

使用predict函数来根据之前构建的多因素cox模型来预测风险评分

riskScore <- predict(multivariabl_cox, newdata = dat, type = "lp") %>% as.data.frame() # 行为每个样本名,第一列为其对应的风险评分
colnames(riskScore) <- 'riskscore'

riskScore 如下图所示,行名为样本名,第一列riskscore就是对应样本的风险评分——就是给每个样本分配一个具体的分数,以反映其未来发生不良事件(如疾病复发、死亡等)的风险大小。
在这里插入图片描述

将风险评分和生存信息,基因表达量等整理到一张表格中,后续验证会用到

riskScore$sample <- rownames(riskScore)

cox_data <- dplyr::select(dat, OS, OS.time, hub_gene$symbol)
cox_data$sample <- rownames(cox_data)

risk <- merge(cox_data, riskScore, by = 'sample')
risk$risk <- ifelse(risk$riskscore > median(risk$riskscore), 1, 0)

write.csv(risk, './risk.csv')

risk 如下图所示,第一列sample为样本名,第二列OS就是样本对应的生存状态,OS.time就是样本对应的生存时间,中间的列就是那10个预后基因对应的表达量,倒数第二列riskscore就是前一步计算出来的风险评分,最后一列risk就是对应的风险分组,1表示高风险组,0表示低风险组,区分度是风险评分的中位值。
在这里插入图片描述

计算出来的风险评分,就是模型对患者未来健康状况或疾病进展风险的量化评估,后续将针对计算出来的风险评分去研究如何对预后模型进行验证,在本章中不做介绍,会在全部预后模型介绍完之后统一进行说明



结语:

以上就是构建预后模型之多因素cox模型的所有过程,如果有什么需要补充或不懂的地方,大家可以私聊我或者在下方评论。

如果觉得本教程对你有所帮助,希望广大学习者能够花点自己的小钱支持一下(点赞旁的打赏按钮)作者创作(可以的话一杯蜜雪奶茶即可),感谢大家的支持~~~~~~ ^_^ !!!

祝大家能够开心学习,轻松学习,在学习的路上少一些坎坷~~~

请添加图片描述


  • 目录部分跳转链接:零基础入门生信数据分析——导读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有色冶炼行业中的智能电动机保护器

低压电动机作为有色冶炼企业底层大量使用的设备&#xff0c;其异常运行不仅影响冶炼厂的正常生产&#xff0c;还会 威胁到人的生命安全&#xff0c;因此为电动机设置合适而又全面的保护至关重要。智能电动机保护器集保护、 遥测、通信、遥控、显示等功能于一体&#xff0c;是目…

基于大数据的水资源管理与调度优化研究【Web可视化、灰色预测、大屏设计】

需要本项目的私信博主 目录 1 引言 1.1 研究背景 1.2 国内外研究现状 1.3 研究目的 1.4 研究意义 2 关键技术理论介绍 2.1 Python语言 2.2 pandas 2.3 pyecharts 2.4 灰色预测 3 数据来源及处理 3.1 数据来源 3.2 数据处理 4 数据可视化分析及大屏设计 4.1 年度…

Windows下安装Kafka3

参考文章&#xff1a;Windows下安装Kafka3_kafka3 window-CSDN博客 安装配置Kafka 首先在官网 Apache Kafka 下载Kafka二进制压缩包。无论是在CentOS还是在Windows下都是下载该压缩包&#xff0c;里面已经包含了Kafka Linux和windows平台下的可执行文件了。选择目前比较新的3…

解决 JS WebSocket 心跳检测 重连

解决 JS WebSocket 心跳检测 重连 文章目录 解决 JS WebSocket 心跳检测 重连一、WebSocket 心跳检测的作用二、心跳检测的处理方案1. 创建 WebSocket 连接2. 心跳参数设置3. 心跳检测逻辑4. 心跳包响应处理5. 断线重连机制 三、总结 一、WebSocket 心跳检测的作用 WebSocket 是…

计量校准企业的生产制造,具备什么实际的作用?

计量校准行业已经发展了几十年&#xff0c;从建国后成立的计量所&#xff0c;建立了计量规范&#xff0c;到如今百花齐放&#xff0c;各类机构不断涌出&#xff0c;可供企业选择的计量机构可谓是越来越多&#xff0c;那么实际意义上&#xff0c;计量校准企业的生产制造&#xf…

草莓成熟度检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

草莓成熟度检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

【ragflow】安装2:源码安装依赖

中文文档【ragflow】安装1: docker:失败官方说的成功 docker 安装的启动失败 重新来一遍,不会重新拉取: root@k8s-master-pfsrv:/home/zhangbin/perfwork/rag# cd ragflow/ root@k8s-master-pfsrv:/home/

基于数字孪生智慧机场建设方案(53页PPT)

方案介绍&#xff1a; 数字孪生技术是一种通过数字化方式创建物理实体的虚拟模型&#xff0c;并借助历史数据、实时数据以及算法模型&#xff0c;模拟、验证、预测、控制物理实体过程的技术手段。在智慧机场建设中&#xff0c;该技术通过构建机场的虚拟镜像&#xff0c;实现机…

软件设计师全套备考系列文章15 -- 数据库:规范化、控制功能、大数据

软考-- 软件设计师&#xff08;15&#xff09;-- 数据库&#xff1a;规范化、控制功能、大数据 文章目录 软考-- 软件设计师&#xff08;15&#xff09;-- 数据库&#xff1a;规范化、控制功能、大数据前言一、章节考点二、规范化三、数据库的控制功能四、大数据、数据仓库 前言…

深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板

HarmonyOS SDK实况窗服务&#xff08;Live View Kit&#xff09;作为一个实时呈现应用服务信息变化的小窗口&#xff0c;遍布于设备的各个使用界面&#xff0c;它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新&#xff0c;在不影响当前其他应用操作的情况下&#xff0c;时…

车载通信框架--- 以太网重连Port口相关思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

C语言补习课

来源&#xff1a;黑马程序员 C语言常用占位符 1.%d 或 %i&#xff1a;用于输出有符号整数&#xff08;int&#xff09;。 2.%u&#xff1a;用于输出无符号整数&#xff08;unsigned int&#xff09;。 3.%f&#xff1a;用于输出浮点数&#xff08;float或double&#xff09…

美学设计:重塑中国商业竞争力的关键驱动力,美学革命:中国商业竞争的新战场

​在中国经济发展的滚滚洪流中,一场悄无声息却又波澜壮阔的革命正在上演。这不是技术的革新,不是商业模式的颠覆,而是一场关乎感官、情感与价值观的美学革命。 长久以来,中国企业在全球市场竞争中扮演着"世界工厂"的角色,以价格优势和规模效应称雄。然而,随着国内市…

element el-popover组件 查看示例图片功能实现

el-popover查看示例图片 官网文档:element ui 用于vue2 和element plus 用于vue3 https://element.eleme.cn/#/zh-CN/component/popover http://element-plus.org/zh-CN/component/popover.html 常见属性 <el-popover :width"400" trigger"hover" pl…

大数据技术之Flume 企业开发案例——自定义 Source(9)

目录 自定义 Source 1&#xff09;介绍 2&#xff09;需求 3&#xff09;分析 4&#xff09;编码 5&#xff09;测试 自定义 Source 1&#xff09;介绍 Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类型和格式的日志数据&#xff0c;包括 avr…

【Spring】Spring循环依赖的解决方案

【Spring】Spring循环依赖的解决方案 开篇词&#xff1a;干货篇&#xff1a;1.PostConstruct方法&#xff1a;2.构造函数注入和Setter方法注入&#xff1a;3.配置文件注明【允许存在循环引用】4.Lazy5.SpringUtil的getBean 我是杰叔叔&#xff0c;一名沪漂的码农&#xff0c;下…

Swift concurrency 3 — 三种异步方式(@escaping closure, Combine, async/await)

直到现在为止&#xff0c;如果我们想要异步请求数据&#xff0c;应该说至少有三种方式&#xff1a; 传统的通过闭包&#xff08;escaping closure&#xff09;方式回调处理。通过Combine的发布者订阅者机制。通过async/await组合的方式。 采用哪种方式&#xff0c;还得因项目…

基于微信小程序音乐分享与交流平台---附源码95587

摘 要 随着移动互联网的普及&#xff0c;微信小程序作为一种轻量级的应用程序&#xff0c;正逐渐成为人们获取信息和服务的便捷渠道。为了给用户提供便捷、多样化的音乐分享和交流渠道&#xff0c;本文提出了—种基于微信小程序的音乐分享与交流平台的设计与实现方案。通过该平…

SqlServer还原数据库后,数据库显示受限制用户解决方法

SqlServer还原数据库后&#xff0c;数据库显示受限制用户解决方法: 1.打开SSMS。 2.选中连接的数据库&#xff0c;右击鼠标右键&#xff0c;点击属性 3.在属性对话框中选择选项 4.在该对话框的右边&#xff0c;找到【限制访问】,并且将其改为&#xff1a;【MULTI_USER】 5.点击…

1个月2万粉的AI职业头像号,1分钟速成超详细教程

大家好 今天要拆解的是一个**小红书的AI职业头像号博主&#xff0c;**博主使用了手绘的二次元风格头像&#xff0c;不到1个月&#xff0c;现在的粉丝数已经1.9万了&#xff0c;收藏点赞9万。 有图有真相&#xff1a; 一、账号作品分析 这个博主的账号都是图文笔记。使用AI制…