零基础入门转录组数据分析——单基因ROC分析

2024-08-30 15:52

本文主要是介绍零基础入门转录组数据分析——单基因ROC分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

零基础入门转录组数据分析——单基因ROC分析

目录

  • 零基础入门转录组数据分析——单基因ROC分析
    • 1. ROC分析的基础知识
    • 2. 单基因ROC分析(Rstudio)——代码实操
      • 2. 1 数据处理
      • 2. 2 单基因ROC分析
      • 2. 3 ROC曲线简单可视化



1. ROC分析的基础知识

1.1 ROC分析是什么?
ROC(Receiver Operating Characteristic)分析是一种用于评估判断准确性的统计方法。它通过将灵敏度和特异度结合起来,以图示的方式展示在不同临界值下,是否能正确判断阳性和阴性样本的能力。

1.2 ROC分析的基本原理?
ROC曲线是通过一系列不同的二分类方式(临界值或决定阈),计算诊断结果的真阳性率和假阳性率,以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线,用曲线下面积(AUC)作为衡量预测准确性的指标。

1.3 ROC分析的主要用途?

  • 评估诊断性能: 在生信领域,ROC分析用于评估诊断的性能。通过ROC曲线和曲线下面积(AUC),可以量化区分不同分组的准确性,帮助选择出相对重要的基因。
  • 模型评估: 在机器学习和统计建模中,ROC分析用于评估分类模型的性能。通过比较不同模型的ROC曲线和AUC值,可以选择出最优的模型。
  • 阈值选择: ROC分析可以帮助确定分类或诊断的最佳阈值。通过观察ROC曲线上的不同点,并结合实际需求(如灵敏度和特异度的平衡),可以选择出最合适的阈值。

1.4 ROC分析的优点?

  • 综合评估: ROC曲线将灵敏度和特异度结合在一起,以图示的方式展示诊断或分类方法的整体性能,便于直观理解和评估。
  • 不固定阈值: ROC分析不依赖于特定的分类阈值,而是展示了在不同阈值下的性能变化,有利于使用者根据实际需求选择合适的阈值。
  • 标准化评估: AUC值作为ROC曲线下的面积,提供了一个标准化的评估指标,便于不同测试或方法之间的比较。
  • 适用于不平衡数据集: 在正负样本不平衡的数据集中,ROC分析仍然能够提供一个相对稳定的评估结果,因为AUC值不受样本比例的影响。

举个栗子: 现在有8个样本,1个基因,每个样本对应该基因都有表达量。其中4个样本为疾病组,另外4个样本为对照组。4个疾病样本对应该基因的表达量分别为1,1.1,1.2,1.2;4个对照样本对应该基因的表达量分别为0.5,0.6,0.5,0.7这样可以明显看出疾病样本中该基因为高表达,那么用该基因的表达水平进行ROC分析,它的AUC值就是1,可以完美区分疾病样本和对照样本。

综上所述: ROC分析就是评估区分准确性的方法,不仅能评估单个变量的区分准确性,还能评估模型的区分准确性。

在本章节中仅用单个基因为例来展示如何进行ROC分析,对于模型的ROC分析不做展示

注意:ROC曲线对极端值(如极少数的极端高或低预测值)较为敏感。这些极端值可能会扭曲ROC曲线的形状,从而影响判断的准确性。



2. 单基因ROC分析(Rstudio)——代码实操

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

废话不多说,代码如下:

2. 1 数据处理

设置工作空间:

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

加载包:

library(pROC)
library(tidyverse)

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

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

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

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

TrainGroup 如下图所示,第一列sample为样本名,第二列为样本对应的分组 (分组为二分类变量:disease和control)
在这里插入图片描述
导入要用于分析的基因HubGene (1个基因,这里只用一个基因作为展示)

HubGene <- data.frame(symbol = 'VDAC1')

HubGene 如下图所示,只有一列:1个基因的基因名

在这里插入图片描述

TrainRawData中取出这1个基因对应的表达矩阵,并且与之前准备的分组信息表TrainGroup进行合并

TrainData <- TrainRawData[HubGene$symbol, ] %>% t() %>% as.data.frame()
TrainData <- merge(TrainData, TrainGroup, by.x = "row.names", by.y = 'sample')
TrainData <- column_to_rownames(TrainData, var = 'Row.names')

TrainData 如下图所示,行为样本名,第一列为基因的表达量,第二列为分组信息(这里是disease和control)。
在这里插入图片描述

2. 2 单基因ROC分析

直接通过roc函数进行单基因ROC分析

  • response = TrainData$group —— 这个参数指定了真实的目标变量或类别标签,简单说就是想要预测的分组
  • predictor = TrainData[, 1] —— 这个参数指定了要参与预测的变量,这里是TrainData的第一列,也就是前面提到的VDAC1表达量
  • levels = c(‘control’, ‘disease’) —— 这个参数指定了response变量中类别的顺序,用于ROC曲线的计算。在这里,它告诉roc函数’control’是负类(或参考类),而’disease’是正类。(注意:这个levels非常重要,设置参考类如果反了,那么相应的结果也会是反的)
roc <- roc(response = TrainData$group, predictor = TrainData[, 1],levels = c('control', 'disease'))
roc$auc

roc$auc如下图所示,表明曲线下面积(Area under the curve, AUC)为0.8867(AUC越接近于1表明预测准确性越高)。

在这里插入图片描述

2. 3 ROC曲线简单可视化

接下来一步就是要对ROC分析结果进行简单可视化,毕竟文字的展示效果不如图片更加直观。

plot(roc, main = paste0("ROC Curve for Disease Prediction of ", colnames(TrainData)[1]), # 设置主标题col = "#DD7123", # 设置曲线颜色lwd = 2,  # 线条宽度print.auc = T, # 打印AUC的值print.auc.x = 0.4, # AUC值得位置(x轴)print.auc.y = 0.5, # AUC值得位置(y轴)print.auc.pattern = 'AUC=%.3f', # AUC值得格式,表明保留三位小数print.auc.cex = 1.2,  # AUC值字体大小grid = c(0.5,0.2), # 网格线设置grid.col = "gray", # 网格线颜色xlab = "False Positive Rate (1 - Specificity)",  # x轴标签  ylab = "True Positive Rate (Sensitivity)",  # y轴标签 font.lab = 2,  # 轴标签字体样式  cex.axis = 1.2,  # 轴标签字体大小  cex.main = 1.5  # 主标题字体大小  )

ROC曲线如下图所示

  • 横坐标 —— 假阳性率(False Positive Rate, FPR),也称为1-特异性或误报率。它表示在所有实际为阴性的样本中,被错误地判断为阳性的比例。FPR的值越接近0,说明模型的误报率越低,即模型在判断为阳性的样本中,真正为阴性的样本占比越少。
  • 纵坐标 —— 真阳性率(True Positive Rate, TPR):也称为敏感度或真正率。它表示在所有实际为阳性的样本中,被正确地判断为阳性的比例。TPR的值越接近1,说明模型的敏感度越高,即模型能够准确地识别出更多的真正阳性样本。
  • 曲线位置 —— ROC曲线越靠近左上角(FPR越小,TPR越大),说明模型的预测准确率越高,这是因为左上角的点代表了最低的误报率和最高的真正率。
  • 曲线下面积(AUC) —— AUC值用于量化地表示模型的预测准确性。AUC值越高,说明模型的预测性能越好。AUC值在0.5到1之间,当AUC值等于0.5时,表示模型没有预测价值(即随机猜测);当AUC值大于0.7时,通常认为具有较高的诊断价值。

在这里插入图片描述



结语:

以上就是单基因ROC分析的所有过程,如果有什么需要补充或不懂的地方,大家可以私聊我或者在下方评论。

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

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

请添加图片描述


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

这篇关于零基础入门转录组数据分析——单基因ROC分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S