RNA-seq 详细教程:Wald test(10)

news2024/11/26 12:21:40

学习目标

  1. 了解生成比较结果所需的步骤(Wald 检验)
  2. 总结不同层次的基因过滤
  3. 了解对数倍变化收缩

结果探索

默认情况下,DESeq2 使用 Wald 检验来识别在两个样本之间差异表达的基因。给定设计公式中使用的因素,以及存在多少个因素水平,我们可以为许多不同的比较提取结果。在这里,我们将介绍如何从 dds 对象获取结果,并提供一些有关如何解释它们的解释。

注意:Wald 检验也可用于连续变量。如果设计公式中提供的感兴趣变量是连续值,则报告的 log2FoldChange 是该变量的每单位变化。

1. 指定比较

在我们的数据集中,我们有三个样本类别,因此我们可以进行三种可能的成对比较:

  1. 对照 vs. Mov10 过表达
  2. 对照 vs. Mov10 敲除
  3. Mov10 过表达 vs. Mov10 敲除

我们只对上面的1 和2 感兴趣。当我们最初创建我们的 dds 对象时,我们提供了 ~ sampletype 作为我们的设计公式,表明 sampletype 是我们感兴趣的主要因素。

为了表明我们有兴趣比较哪两个样本,我们需要指定对比。用 DESeq2 results() 函数的输入以提取所需的结果。

对比可以用两种不同的方式指定(第一种方法更常用):

  1. 对比可以作为具有三个元素的字符向量提供:设计公式中(感兴趣的)因素的名称,要比较的两个因素水平的名称。最后给出的因子水平是比较的基准水平。语法如下:
contrast <- c("condition""level_to_compare""base_level")
results(dds, contrast = contrast)
  1. 对比可以作为 2 个字符向量的列表给出:折叠的名称随兴趣级别的变化而变化,折叠的名称随基本级别的变化而变化。这些名称应该与 resultsNames(object) 的元素完全匹配。
resultsNames(dds) 
contrast <- list(resultsNames(dds)[1], resultsNames(dds)[2])
results(dds, contrast = contrast)

或者,如果你只有两个因子水平,你什么也做不了,也不必担心指定对比(即结果(dds))。在这种情况下,DESeq2 将根据水平的字母顺序选择您的基本因子水平。

首先,我们要评估 MOV10 过表达样本和对照样本之间的表达变化。因此,我们将使用第一种方法来指定对比并创建一个字符向量:

contrast_oe <- c("sampletype""MOV10_overexpression""control")

2. 结果

现在我们已经创建了对比,我们可以将其用作 results() 函数的输入。

res_tableOE <- results(dds, contrast=contrast_oe, alpha = 0.05)

注意:对于我们的分析,除了对比参数之外,我们还将为 alpha 参数提供 0.05 的值。当我们谈论基因级过滤时,我们将更详细地描述这一点。

返回给我们的结果是一个 DESeqResults 对象,它是 DataFrame 的一个简单子类。在许多方面,它可以像数据框一样对待(即在访问/子集数据时),但是重要的是要认识到下游步骤(如可视化)存在差异。

现在让我们看看结果中存储了哪些信息:

res_tableOE %>% 
data.frame() %>% 
View()
res_tableOE
res_tableOE

我们可以使用 mcols() 函数来提取有关存储在每列中的值代表什么的信息:

mcols(res_tableOE, use.names=T)
  • baseMean: 所有样本的归一化计数的平均值
  • log2FoldChange: log2倍变化
  • lfcSE: 标准误差
  • stat: Wald 统计
  • pvalue: Wald 检验 p-value
  • padj: BH adjusted p-values

3. P-values

p 值是用于确定是否有证据拒绝原假设的概率值。较小的 p 值意味着有更强有力的证据支持备择假设。然而,因为我们正在对每个单独的基因进行测试,所以我们需要更正这些 p 值以进行多次测试。

结果中的 padj 列代表针对多重检验调整的 p 值,是结果中最重要的一列。通常,padj < 0.05 等阈值是识别重要基因的良好起点。 DESeq2 中多重测试校正的默认方法是 Benjamini-Hochberg 错误发现率 (FDR) 的实现。还有其他可用的校正方法,可以通过将 pAdjustMethod 参数添加到 results() 函数来更改。

4. Filter

仔细看看我们的结果。当我们浏览它时,您会注意到对于选定的基因,pvalue padj 列中有 NA 值。这是什么意思?

results table
results table

缺失值表示已作为 DESeq() 函数的一部分进行过滤的基因。在进行差异表达分析之前,忽略那些很少或根本没有机会被检测为差异表达的基因是有益的。这将增加检测差异表达基因的能力。 DESeq2不会从原始计数矩阵中删除任何基因,因此所有基因都将出现在您的结果表中。 DESeq2 遗漏的基因满足以下三个过滤标准之一:

  1. 所有样本中计数为零的基因

如果在一行中,所有样本的计数均为零,则没有表达信息,因此不会测试这些基因。

res_tableOE[which(res_tableOE$baseMean == 0),] %>% 
data.frame() %>% 
View()

这些基因的 baseMean 列将为零,log2 倍数变化估计、p 值和调整后的 p 值都将设置为 NA。

  1. 具有极端计数异常值的基因

DESeq() 函数为每个基因和每个样本计算异常值的诊断测试,称为库克距离。 Cook 距离衡量单个样本对基因的拟合系数的影响程度,Cook 距离的较大值旨在指示异常值计数。包含库克距离高于阈值的基因被标记,但是标记至少需要 3 个重复,因为很难判断哪个样本可能是异常值,只有 2 个重复。我们可以通过在 results() 函数中使用 cooksCutoff 参数来关闭此过滤。

res_tableOE[which(is.na(res_tableOE$pvalue) & 
                  is.na(res_tableOE$padj) &
                  res_tableOE$baseMean > 0),] %>% 
data.frame() %>% 
View()
  1. 具有低平均归一化计数的基因

DESeq2 定义了一个低均值阈值,它是根据您的数据凭经验确定的,其中重要基因的比例可以通过减少考虑进行多重测试的基因数量来增加。这是基于这样一种观念,即计数非常低的基因通常由于高度分散而不太可能看到显著差异。

Joachim Jacob, 2014.
Joachim Jacob, 2014.

在用户指定的值 (alpha = 0.05),DESeq2 评估显著基因数量的变化,因为它根据基因的平均计数过滤掉越来越大的基因部分,如上图所示。娴熟基因数量达到峰值的点是用于过滤经过多次测试的基因的低平均阈值。还有一个参数是通过设置 independentFiltering = F 来关闭过滤。

res_tableOE[which(!is.na(res_tableOE$pvalue) & 
                  is.na(res_tableOE$padj) & 
                  res_tableOE$baseMean > 0),] %>% 
data.frame() %>% 
View()

注意:默认情况下,DESeq2 将执行上述过滤;但是其他 DE 工具(例如 EdgeR)不会。过滤是必要的步骤,即使您使用的是 limma-voom 和/或 edgeR 的拟似然法。在使用其他工具时,请务必遵循预过滤步骤,如 Bioconductor 上的用户指南中所述,因为它们通常表现得更好。

5. Fold change

结果中的另一个重要列是 log2FoldChange。对于大量的基因列表,很难提取有意义的生物学相关性。为了帮助提高严格性,还可以添加倍数变化阈值。请记住,在设置该值时,我们正在处理 log2 倍数变化,因此 log2FoldChange < 1 的截止值将转化为实际倍数变化 2。

结果中的倍数变化计算如下:

log2 (normalized_counts_group1 / normalized_counts_group2)

问题是,这些倍数变化估计并不完全准确,因为它们没有考虑到我们在低读取计数下观察到的离散。为了解决这个问题,需要调整 log2 倍的变化。

LFC

  • 更准确的 LFC 估计

为了生成更准确的 log2 foldchange (LFC) 估计值,DESeq2 允许在基因信息较低时将 LFC 估计值收缩至零,这可能包括:

  • 低计数
  • 高离散值

LFC 收缩使用来自所有基因的信息来生成更准确的估计。具体来说,所有基因的 LFC 估计值的分布(作为先验)用于将信息很少或高度分散的基因的 LFC 估计值缩小到更有可能(较低)的 LFC 估计值。

Illustration
Illustration

在上图中,我们有一个使用绿色基因和紫色基因的例子。对于每个基因,绘制了两种不同小鼠品系(C57BL/6J 和 DBA/2J)中每个样本的表达值。两个基因对于两个样本组具有相同的平均值,但绿色基因在组内几乎没有变异,而紫色基因具有高水平的变异。对于组内变异低的绿色基因,未收缩的 LFC 估计(绿色实线的顶点)与收缩的 LFC 估计(绿色虚线的顶点)非常相似。然而,由于高度分散,LFC 对紫色基因的估计有很大不同。因此,即使两个基因可以具有相似的归一化计数值,它们也可以具有不同程度的 LFC 收缩。请注意,LFC 估计值向先验值收缩(黑色实线)。

缩小 log2 倍变化不会改变被识别为显著差异表达的基因总数。倍数变化的收缩是为了帮助下游评估结果。例如,如果您想根据倍数变化对重要基因进行子集化以进行进一步评估,您可能需要使用收缩值。此外,对于需要折叠变化值作为输入的 GSEA 等功能分析工具,您可能希望提供收缩值。

要生成缩小的 log2 倍变化估计值,您必须使用函数 lfcShrink() 在您的结果对象(我们将在下面创建)上运行一个额外的步骤。

res_tableOE_unshrunken <- res_tableOE

# Apply fold change shrinkage
res_tableOE <- lfcShrink(dds, coef="sampletype_MOV10_overexpression_vs_control", type="apeglm")

根据您使用的 DESeq2 版本,收缩估计的默认方法会有所不同。如上所述,可以通过在 lfcShrink() 函数中添加参数类型来更改默认值。对于大多数最新版本的 DESeq2type="normal" 是默认值,并且是早期版本中的唯一方法。已经表明,在大多数情况下,存在比“正常”方法偏差更小的替代方法,因此我们选择使用 apeglm

MA plot

可用于探索我们的结果的图是 MA 图。 MA 图显示了归一化计数的平均值与所有测试基因的 log2 倍数变化的关系。显著 DE 的基因被着色以便于识别。这也是说明 LFC 收缩效果的好方法。 DESeq2 包提供了一个简单的函数来生成 MA 图。

让我们从未收缩的结果开始:

plotMA(res_tableOE_unshrunken, ylim=c(-2,2))

收缩的结果

plotMA(res_tableOE, ylim=c(-2,2))

在左侧,您绘制了未收缩的倍数变化值,您可以看到低表达基因的大量分散。也就是说,许多低表达者表现出非常高的倍数变化。收缩后,我们看到倍数变化估计要小得多。

MA
MA

除了上述比较之外,该图还允许我们评估倍数变化的幅度以及它们相对于平均表达的分布方式。通常,我们希望在整个表达水平范围内看到重要的基因。


欢迎Star -> 学习目录

更多教程 -> 学习目录


本文由 mdnice 多平台发布

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

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

相关文章

大学生影视主题网页制作 腾龙电影网页设计模板 学生静态网页作业成品 dreamweaver电影HTML网站制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

基于WIFI无线组网的水雨情远程监测预警系统

水雨情是重要的水文资料&#xff0c;在水资源配置和管理中有重要的参考价值&#xff0c;具体是指水位、流速、流量、降雨量、降雨强度等参数。随着物联网、雷达遥测、无线通信技术的发展&#xff0c;这些数据都能实现自动感知和远程监测&#xff0c;对于防汛抗洪和日常巡检有重…

MySql explain

执行计划是SQL语句经过查询分析器后得到的 抽象语法树 和 相关表的统计信息 作出的一个查询方案&#xff0c;这个方案是由查询优化器自动分析产生的。由于是动态数据采样统计分析出来的结果&#xff0c;所以可能会存在分析错误的情况&#xff0c;也就是存在执行计划并不是最优的…

经CSDN副总裁点拨,我发现了世界杯球队与优秀开发团队的共通点

☆ 世界杯已经快要接近尾声了&#xff0c;而无论法国还是阿根廷谁能走到最后&#xff0c;无疑他们都是非常优秀的世界杯球队&#xff0c;甚至可以说&#xff0c;能进入世界杯的球队&#xff0c;都是举世瞩目的国家队阵容。 ☆ 而我最近也一直在思考&#xff0c;那么我们的开发团…

SpringBoot2核心技术(核心功能)- 05、Web开发【5.1 SpringMVC自动配置概览+5.2简单功能分析】

1、SpringMVC自动配置概览 Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置) The auto-configuration adds the following features on top of Spring’s defaults: ● Inclusion of ContentN…

手把手教你实现一个function模板

1.实现function需要用到的相关技术 建议看本文之前&#xff0c;需要先了解C11 function或者boost::function模板的基本用法&#xff0c;也最好看一下我的另外一篇文章&#xff1a; c11 function模板&#xff1a;模板特化与可变参数函数模板 如果你使用过C11 function模板或者…

关于Linux内核中的异步IO的使用

我们都知道异步IO的作用&#xff0c;就是可以提高我们程序的并发能力&#xff0c;尤其在网络模型中。在linux中有aio的一系列异步IO的函数接口&#xff0c;但是这类函数都是glibc库中的函数&#xff0c;是基于多线程实现&#xff0c;不是真正的异步IO&#xff0c;在内核中有真正…

生成无限制微信小程序码

生成无限制的微信小程序码&#xff0c;主要是通过后端请求微信的接口&#xff0c;然后微信会把小程序码返回来。 本文不讲详细的方法了&#xff0c;只讲其中的一些关键点&#xff0c;官方文档也附上去了&#xff0c;结合这些点看官方文档会比较方便。 方法&#xff1a; 获取…

_8LeetCode代码随想录算法训练营第八天-C++字符串

_8LeetCode代码随想录算法训练营第八天-C字符串 28.实现strStr()459.重复的字字符串 28.实现 strStr() KMP算法 什么是KMP 是由三位学者发明的&#xff1a;Knuth&#xff0c;Morris和Pratt&#xff0c;所以取了三位学者名字的首字母。 KMP有什么用 KMP主要应用在字符串匹…

SuperMap iClient3D for WebGL/Cesium端性能优化

目录 一、请求优化 1.1 多子域 1.1.1 scene.open()打开场景 1.1.2 加载地形 1.1.3 加载影像 1.1.4 加载S3M 1.1.5 加载MVT 1.2 批量请求 1.2.1 地形 1.2.2 影像 二、内存优化 2.1 根节点驻留内存 2.2 自动释放缓存 2.3 内存管理 三、图层优化 3.1 LOD 3.2 空间索引 3.3 控制图层…

企业文件泄漏防不胜防?安全防护3步走!

有一些管理者认为公司从未曾发生过数据泄密事件而心存侥幸&#xff0c;但数据泄密的代价&#xff0c;只需发生过一次&#xff0c;就足以给企业带来巨大的损害。 十四五规划中&#xff0c;“数据安全”和“网络安全”多次出现&#xff0c;加上《数据安全法》、《个人信息保护法》…

Linux下printf输出字符串的颜色

基本打印格式: printf("\033[字背景颜色;字体颜色m字符串\033[0m" ); printf("\033[41;32m字体背景是红色&#xff0c;字是绿色\033[0m\n"); 41是字背景颜色, 32是字体的颜色, 字体背景是红色&#xff0c;字是绿色是要输出的字符串. 后面的\033 ...\033[0m…

推荐系统毕业设计 协同过滤商品推荐系统设计与实现

文章目录1 简介2 常见推荐算法2.1 协同过滤2.2 分解矩阵2.3 聚类2.4 深度学习3 协同过滤原理4 系统设计4.1 示例代码(py)5 系统展示5.1 系统界面5.2 推荐效果6 最后1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是学长的毕设系列文章&#xff01; &#x1f525…

redis持久化方案介绍

Redis有两种持久化方案&#xff1a;1. RDB持久化 2. AOF持久化 1 RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&…

[附源码]Python计算机毕业设计高校实习管理平台系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

【自然语言处理】基于TextRank算法的文本摘要

基于TextRank算法的文本摘要文本摘要是自然语言处理&#xff08;NLP&#xff09;的应用之一&#xff0c;一定会对我们的生活产生巨大影响。随着数字媒体的发展和出版业的不断增长&#xff0c;谁还会有时间完整地浏览整篇文章、文档、书籍来决定它们是否有用呢&#xff1f; 利用…

数据结构C语言版 —— 链表增删改查实现(单链表+循环双向链表)

文章目录链表1. 链表的基本概念2. 无头非循环单链表实现1) 动态申请节点2) 打印链表元素3) 插入节点头插法尾插法在指定位置之前插入在指定位置之后插入4) 删除节点删除头部节点删除末尾节点删除指定位置之前的节点删除指定位置之后的节点删除指定位置的节点5) 查找元素6) 销毁…

【图像评价】无参考图像质量评价NIQE【含Matlab源码 681期】

⛄一、无参考图像质量评价NIQE简介 理论知识参考&#xff1a;通用型无参考图像质量评价算法综述 ⛄二、部分源代码 function [mu_prisparam cov_prisparam] estimatemodelparam(folderpath,… blocksizerow,blocksizecol,blockrowoverlap,blockcoloverlap,sh_th) % Input …

013 单词速记

converse adj.相反的&#xff0c;颠倒的 v.交谈 con(加强语气)vers&#xff08;转反转&#xff09;e->反转 n.conversation 谈话&#xff0c;对话 adv.conversely 相反的 controversy n.争端 contro(counter) 相反 vers 转 lead to ~ 导致争端 contraversial 有争议…

MySQL-内置函数

文章目录内置函数日期函数字符串函数数学函数其他函数内置函数 日期函数 current_date();current_time();current_timestamp(); 应用&#xff1a; 创建生日表 插入数据&#xff1a; 创建评论区 采用datetime 时间戳自动填充时间 查询两分钟之内发的帖子 评论时间2min…