零基础入门转录组数据分析——单基因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

相关文章

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO