一文搞定高通量数据整合分析中批次效应的鉴定和处理腾讯云开发者社区

批次效应表示样品在不同的批次处理和测量时引入的与生物状态不相关的系统性的技术偏差。很多因素都可能导致批次效应的产生,如不同实验条件、不同操作者、不同公司的试剂、不同批的试剂、实验开展的时间、检测设备、不同的测序批次等。

2014年生信领域的大牛Michael P Snyder在PNAS上发表了一篇文章Comparison of the transcriptional landscapes between human and mouse tissues,比较了人和小鼠不同组织和器官中表达谱的异同。研究发现不同物种之间组织特异表达的基因是一致的,但很多基因在同一物种不同组织的表达相似度大于它们在不同物种同一组织的表达相似度。“我”来引申下 (原文并没有这么直接说),大体可以理解为小鼠的脑与小鼠的肾脏的相似性大于小鼠的脑与人的脑的相似性。“我”得出的这个结论是有一些颠覆认知的,如果这样,用小鼠做为模式动物是否会对人的研究给出相似性的推导?

这篇PNAS文章发出后,芝加哥大学的Yoav Gilad在F1000上发表了一篇文章A reanalysis of mouse ENCODE comparative gene expression data来讨论这个不同于以往认知的研究项目的设计和分析的合理性。

首先作者从FASTQ数据的序列名字的ID中提取出对应测序数据来源的测序仪设备ID和测序通道信息,发现所有数据来源于5个批次,如下图所示,只有最后一个批次同时包含了人和小鼠的器官,其它批次都只包含了人的器官或小鼠的器官。

重现者Yoav Gilad等通过对数据进行重分析,重现了类似于原文中的结果。不论是PCA还是Heatmap的结果,都展示出来源于同一物种的组织或器官倾向于聚类到一起。

重现者Yoav Gilad等采用ComBat移除批次带来的影响,再次绘制PCA和Heatmap,结果显示表达谱按组织类型而非物种聚在了一起。

通常我们在整合多套数据集进行展示时也会加上数据来源信息以展示自己的分析结果未受批次等因素影响。如下图每一列是一个样品,每一行是一个菌群;列注释中有一行为Dataset指示样品来源于 2 个数据集,并且聚类结果没有明显受到数据集来源的影响(四个大的聚类分支中样品来源分布没有明显偏好性);

通过样本整体表达分布查看有无批次影响。不同来源的样本一般是各自进行标准化(尤其是芯片数据),合并在一起后,可以简单的从整体表达分布来查看是否存在明显的偏移。如下左图存在明显的偏移,则提示有批次效应的存在。校正后,如右图,看上去样本的整体表达分布均一了。但是否批次影响就被移除了,却很难据此下结论。

通过部分基因集的表达变化查看有无批次效应影响。不同来源的数据一起标准化之后,如果标准化效果好的话,样品整体表达分布也会是均一的(如下面左数第二幅图)。但从中随机抽取数百基因却发现其表达收到了批次的影响(如下面左数第三幅图,只展示了数个基因),而且聚类结果也把两组正常样品分到了各自来源相对应的分支上。

合理的实验设计和一致的实验操作是避免批次效应的最好方式。如下图所示如何通过合理的设计来避免检测批次带来的影响。

上面也只是从检测方式的角度设计出一个合理的试验模式降低批次效应的影响,但除了检测方式,还会有很多不可控的因素也会影响到批次,如不同操作人、不同操作时间等客观因素,还有如配对设计实验中不同的个体自身也是批次的因素。

所以需要有个方式去检测和尽量降低批次效应带来的数据偏差的影响。

下面我们以一个具体例子实战(配对样品处理前后基因表达的变化)和检验下效果。为了演示批次效应的影响,大部分代码做了封装,我们只关心核心的地方。如果自己对封装的代码赶兴趣,可以自行查看函数源码。

首先加载所有的包

输入文件2:实验设计信息表 (sampleFile):conditions为处理条件(untrt是对照, trt是加药处理 ),individual标记样品的个体来源 (4个个体:N61311、N052611、N080611、N061011)。

初始化,定义输入、输出和参数

数据读入和标准化

[1] “Read in 32799 genes”[1] “23936 genes remained after filtering of genes with all counts less than 4 in all samples.”[1] “Perform DESeq on given datasets.”estimating size factorsestimating dispersionsgene-wise dispersion estimatesmean-dispersion relationshipfinal dispersion estimatesfitting model and testing[1] “Output normalized counts”[1] “Output rlog transformed normalized counts”

检查数据标准化效果: 标准化后基因在不同样品的表达分布越均一越好。从下图看不出存在批次效应的影响。

初始化,定义输入、输出和参数 (注意covariate变量使用individual列作为了批次信息)

数据读入和标准化,并检查数据标准化效果: 标准化后基因在不同样品的表达分布越均一越好 (此图略过,与上面的表达分布图一致)。

样本聚类查看样品相似性,trt组和untrt组区分明显 (此部分结果略过,与上面的聚类结果一致)

主成分分析PCA查看样品相似性,发现在PC1轴上,样品按处理条件区分开;在PC2轴上,样品按个体区分开,表明不同的个体可能会对后续的差异基因分析造成影响。这个结果也与我们前面不考虑批次因素的结果是一样的。

是不是批次变量加错了呢,还是添加的批次变量未生效?可以说都不是,操作没问题,只是DESeq2处理时只在差异分析模型中考虑批次效应信息,而不会直接校正表达矩阵。那我们先看下加了批次后差异分析的结果怎样,后续我们再讲如何校正表达矩阵。

校正后,差异基因数目变多了,上调多了99个,下调多了61个。不过数目变化,也说明不了太多问题。

拷贝文件数据到网站数据输入处:

从Venn图可以看出,批次校正后既有新增的差异基因,又丢失了之前的一部分差异基因,那么哪个方式更合理呢?

我们再选2个批次校正前鉴定为有差异、批次校正后鉴定为无差异的基因观察下其表达模式。这两个基因的表达模式没看出存在个体本底的一致变化差异。处理前后在不同个体中变化幅度不一,可能是被动变化。但这些基因一定是没有差异吗?我个人也下不出结论,后续得结合其功能再做判断了。

DESeq2,edgeR和limma在考虑批次因素鉴定差异基因时基本操作是一致的,上面我们也完成和比较了已知批次的数据的差异基因鉴定。

后续还有2个问题:

前面文章讲述了批次信息已知时,在差异基因分析中考虑批次效应的影响可以移除部分基因在个体中不同本底表达水平差异的影响,获得的差异基因倍数方差会变小,可以检测出更多差异基因,理论上也是更可靠的方式。那么如果批次信息未知或记录不完善时怎么处理呢?

这里我们就用到了另一个 R 包sva帮助从数据中预测可能存在的混杂因素包括但不限于批次效应的影响。下面我们实际看下这个包鉴定出的混杂因素与批次效应变量之间是否存在关联?利用预测出的混杂因素作为批次信息校正后结果会有什么变化?

首先加载所有的包

输入文件2:实验设计信息表 (sampleFile):conditions为处理条件(untrt是对照, trt是加药处理 ),individual标记样品的个体来源 (4个个体:N61311、N052611、N080611、N061011)。

初始化,定义输入、输出和参数

数据读入和标准化

[1] “Read in 32799 genes”[1] “23936 genes remained after filtering of genes with all counts less than 4 in all samples.”[1] “Perform DESeq on given datasets.”estimating size factorsestimating dispersionsgene-wise dispersion estimatesmean-dispersion relationshipfinal dispersion estimatesfitting model and testing[1] “Output normalized counts”[1] “Output rlog transformed normalized counts”

下面的方式也可以 (svaseq 是在 sva 的基础上对数据做了一个 log转换;如果处理的是芯片数据,通常已经做过 log 换,直接使用 sva 即可)。

添加预测出的Surrogate variable属性到dds对象

可视化展示预测出的Surrogate variable属性与已知的批次信息的关系

从下图可以看出,预测出的混杂因素SV1, SV2与样品来源的个体信息 (individual)还是比较一致的。

根据已知批次信息校正后差异基因数目变多了,上调了99个,下调多了61个。根据预测的混杂因素校正后,上调多了52个,下调少了1个。(这个是只保留2个混杂因素的结果)

根据已知批次信息校正后差异基因数目变多了,上调了99个,下调多了61个。根据预测的混杂因素校正后,上调多了96个,下调多了55个。从数目上看,根据已知批次和预测的混杂因素获得的差异基因是基本已知的。

画个Venn图,看下哪些基因是新增的差异基因,哪些基因批次校正后没差异了。

一个方式是采用代码,直接出图

从untrt上调基因Venn图可以看出,校正已知批次信息后既有新增的untrt上调差异基因,又丢失了之前的一部分untrt上调差异基因;校正预测的混杂因素后,大部分新增差异基因都与已知批次信息校正后的结果一致,但新增untrt上调差异基因少。

从untrt下调基因Venn图可以看出,校正预测的混杂因素后,新增39个差异基因;批次校正前鉴定为存在差异的40个基因在校正后被认为是非差异显著基因。

下面还是从这些基因的表达模式上看是否可以找到一些线索?

下图比对绘出了7种不同类型untrt上调的差异基因中随机选取1个绘制的表达模式比较图。

All_common代表了差异倍数特别大的基因,不论是否校正都可以检测出差异;不同类型批次信息校正后被检测视为差异的基因都有表达的本底差异;Uncorrect_specific的基因本底表达无固定模式。

下图比对绘出了7种不同类型untrt下调的差异基因表达分布,基本结论与上图类似。

另外一个导致SVA预测的批次与已知的批次效应校正后结果不同的原因也可能是我们只让SVA预测了2个混杂因素。留下2个去探索的问题,欢迎留言或投稿讨论:

处理批次因素最好的方式还是如前面所述将其整合到差异基因鉴定模型中,降低批次因素带来的模型残差的自由度。但一些下游分析,比如数据可视化,也需要直接移除效应影响的数据来展示,这时可以使用ComBat或removeBatchEffect函数来处理。

包含已知批次信息和预测的批次信息的样本属性文件 sampleFile2

加载需要的包

读入标准化后的表达矩阵和样品信息表

ComBat校正时考虑生物分组信息

校正后的PCA结果显示在PC1轴代表的差异变大了,PC2轴代表的差异变小了,不同来源的样本在PC2轴的分布没有规律了 (或者说成镜像分布了)。

ComBat校正时不考虑分组信息,也可以获得一个合理的结果,但是一部分组间差异被抹去了。

关于运行ComBat时是否应该添加关注的生物分组信息,即mod变量,存在一些争议。反对添加mod的人的担心是这么处理后,是否会强化生物分组之间的差异。支持添加mod的人是担心如果不添加mod那么去除批次时可能也会去除样本组之间的差异,尤其是实验设计不合理时。

如果是非平衡实验,类似我们在实验设计部分时提到的方案2,则没有办法添加mod变量,程序会报出Design matrix is not full rank类似的错误,这时是不能区分差异是来源于批次还是来源于样本,强行移除批次时,也会移除一部分或者全部样本分组带来的差异。这个在第一篇帖子处有两位朋友的留言讨论可以参考。

ComBat只能处理批次信息为l离散型分组变量的数据,不能处理sva预测出的连续性混杂因素。

如果批次信息有多个或者不是分组变量而是类似SVA预测出的数值混杂因素,则需使用limma的removeBatchEffect(这里使用的是SVA预测出的全部3个混杂因素进行的校正。)。

样品在PC1和PC2组成的空间的分布与ComBat结果类似,只是PC1能解释的差异略小一些。

removeBatchEffect运行时也可以不提供生物分组信息。

removeBatchEffect也可以跟ComBat一样,对给定的已知一个或多个定性批次信息进行校正。

不指定目标分组变量,结果也不受影响。

同时考虑批次、混杂因素和生物分组信息进行校正,校正后差异就全部集中在生物分组信息水平 (PC1)上了 (PC1 variance=100)。

THE END
0.Theprojectfile'item1'containsinvalidkey'item2'.|Office VBA reference topicjvzquC41nggsp7rketutqoy0eqs0gw2wu1ughrhg1xhb1ufpiwghg8wghgxfplj1wuks/rsvgtlben2jgnv0vqj/rtukgly/hkrf/rygo33dqwyckpy.kw{cnkj.mn~/kvkn4Hxqwtif?{jeqosfpmfvkqtt
1.PSCAD常见问题和官方解决办法总结pscad中wordspace不见了* 安装Intel Fortran编译器,并用Intel Fortran编译器编译当前项目。 * 获取目标文件的源代码,并用Gfortran编译器进行编译。 * 要求该项目的开发人员用Gfortran重新编译它。 原因4:如果提示信息中有“不支持UNC路径”的内容,如 Creating EMTDC executable… jvzquC41dnuh0lxfp0tfv8vsa5<:9?=291gsvrhng1jfvjnnu171:98:678
2.SystemManagement|Randommaterialaboutcomputers,webandDid you ever start Power BI Desktop and this error showed-up out of nowhere?! Clicking “Install now” seems to be doing something but in the end it fails saying Microsoft Edge Webview2 Runtime is already installed? Restarting the machine does not help, don’t bother trying jvzquC41u{yugvrcpcmfonsv0tu0
3.ByRef参数类型不匹配|MicrosoftLearn常量、固定长度字符串、数组、用户定义类型和 Declare 语句无法允许作为对象模块的公共成员 无法访问系统注册表(错误 335) 无法创建引用:“项” 无法执行指定的程序 无法启动 Internet Explorer 当前模块不支持打印方法 不允许项目的循环引用 “局部变量”窗口中显示的数据类型 jvzquC41oujo0vnetqyph}3eqo5{j6hp1noctjw{1qlgklj1ii863@;;
4.火山PCPIV模块[2025062. 模块内的别名类型增加了对「输出调试」的支持; 3. 新增「通用多值排序表模板」、「通用多值哈希表模板」、「大小写无关哈希表模板」、「大小写无关多值哈希表模板」、「大小写无关多值哈希集模板」; 4. YYJSON 改为配置 mimalloc 模块后默认使用 mimalloc 作为内存分配器,否则默认使用火山缓存池; 5. 优化部 jvzquC41yy}/ntzck{4dqv4tufkucrquAkj>3?:5:9<84?;8:5;53
5.第2例框架窗口和窗格及菜单·炫彩界面库2.火山代码 成员变量类型备注 主窗口 普通窗口 窗格 炫彩窗格 [6] 菜单 炫彩菜单 元素 基础元素 方法名公开备注 启动方法 √ 炫彩_初始化 () 主窗口.创建 (, , 600, 400, "第2例框架窗口和窗格及菜单", , ) 窗格 [0].创建 ("类库", 200, 200, 主窗口.句柄) 主窗口.添加窗格 (0, 窗格jvzquC41yy}/mjsenq{e0ls1hv{bp8}eiwo04@;456=
6.EventTypeDetail应用性能监控全链路版火山引擎官方文档中心,产品文档、快速入门、用户指南等内容,你关心的都在这里,包含火山引擎主要产品的使用手册、API或SDK手册、常见问题等必备资料,我们会不断优化,为用户带来更好的使用体验jvzquC41yy}/xxqegpmjpn3eqo5eqlx186921:::456
7.易学模块(火山PC)3.0支持调用大漠插件和支持X64位的图色插件奥迦截至到目前全网发布的火山PC大漠模块或其它同类插件仍然采用的是我2020年公开发布的那种调用C++文件的方法,jvzquC41yy}/g‚~38:4dqv4vjtkbf677/3320qyon
8.职业病危害风险告知卡大全(100页)下班沐浴等。健康监护,患有过敏性疾病或过敏体质的人不得从事木尘作业。哮喘发作时使用氨茶碱、喘定、糖皮质激素等药物治疗。过敏性肺 泡炎可使用抗过敏药物、抗生素和激素,给予全身支持疗法,如补液、输氧、降温、通气等过敏性皮炎参照职业性过敏性皮炎处理原则处理,慢 jvzq<84yyy4489iqe0ipo8iqewsfp}44416:4B43;1755<8:8a716B=4637:0|mvon
9.TypenotsupportedinVisualBasic|MicrosoftLearnOffice VBA reference topicjvzquC41nggsp7rketutqoy0eqs0u{2e{tr.t|4qhhodg8{dc1rbppzcig5sgojtgpif1~xgt/oovnwhcek.jnqr1vqg6sqv/yvryttvgj.kw2xku{bn6gcuki
10.火山视窗对象数组类与数据类型转换操作介绍火山pc的文本数组火山视窗对象数组类与数据类型转换操作介绍 本文介绍了如何在编程中使用火山视窗对象数组类,包括添加成员(文本数组、整数数组)、取成员和数据类型转换技巧。通过实例演示了如何将不同类型的数组添加到对象数组并执行相应的操作。 本源码转载自利快云https://www.lkuaiy.com/jvzquC41dnuh0lxfp0tfv8vs33>6;9<8725bt}neng5eg}fknu523@>499:8
11.火山视窗文本数组类增删查改操作⑤给按钮1添加被单击事件 判断来源对象为按钮1(因为火山中所有按钮事件都集中在一起,需要辨别事件来源) “消息” 编辑框1.内容,是需要的编辑框和1个按钮二、设置TCP ①添加一个HP客户端,这里使用pack模式(此模式自动处理,不会粘包),可设置相关参数(HP单包最大长度为4194303) ②在客户端1变量上右键,添加jvzquC41yy}/rrfpujko0lto1cxuklqg19>48;;:66681
12.当前项目不支持此类型的文件|MicrosoftLearn库参考 Learn VBA 使用英语阅读 通过 Facebookx.com 共享LinkedIn电子邮件 当前项目不支持此类型的文件 此错误的原因和解决方案如下: 您试图打开的文件不是有效的项目文件,或者虽然是项目文件,但其包含的功能不受此 Visual Basic 宿主应用程序和 Visual Basic 环境支持。 请确保您要打开的项目文件是有效jvzquC41fqit0vnetqyph}3eqo5{j6hp1qlgklj1xdg0Njsiwcmf1[jhgtkoen4Wugx.Kwygthgdg6Mgnr5ujn2ewtxfp}2rtqpfe}2fqgy.pxy/uwvqq{y/hkrfu6th/vnju6y{rg
13.火山PC视窗窗口讲解新建项目时选择“MFC窗口程序”会自动生成“创建主窗口”代码。 代码界面: 创建后自动生成启动类、主窗口类、主窗口变量以及“创建主窗口”方法。 运行效果如下图: 默认窗口运行效果如下图,如果想使用菜单可看“菜单操作教程” 帮助文档如下图: 通过本方法可创建一个子窗口,此窗口将会嵌入在主窗口内部,并不会弹出jvzquC41fqi/xxqfr0ipo8{qna}jp8rhea{j1vkeaeq/j}rn
14.易语言实现火山PC参数参考教程火山PC参数参考的实现可能涉及到创建一个参数管理模块,该模块能够存储、修改和检索各种参数值。 4. 易语言的数据库连接与操作 易语言支持多种数据库,包括但不限于Access、SQLite、MySQL等。在实现参数参考时,可能需要将参数存储在数据库中,并通过易语言编写查询和更新操作,以实现对参数的管理。 5. 界面设计与交互 jvzquC41ygtlw7hufp4og}4fqe54g{ujzwlw8
15.火山PC单线程单对象使用大漠插件基础火山pc大漠3.在软件上方工具栏中,找到项目(P),点击,选择当前项目属性(P) 4.在编译中,找到目标平台,将目标平台改成32位,调用大漠不能使用64位,修改完毕后点确定保存 三、大漠插件变量的创建以及注册 1.在主窗口下创建名为dm的变量,类型为大漠插件 2.在主窗口下按 Ctrl U 进入界面布局设计,双击界面空白处,快速生成 我jvzquC41dnuh0lxfp0tfv8vs33>6;9<8725bt}neng5eg}fknu523A95;366
16.【魔兽争霸3冰封王座】魔兽争霸3冰封王座(War31.32)中文免安装版这个版本免安装下载之后解压就可以游戏了,支持各大战网、对战平台游戏。 魔兽争霸3冰封王座1.24epc版介绍: 《魔兽争霸3:冰封王座1.32》是一款非常不错的多人即时战略游戏,游戏将拥有DoTA2的画面质感,游戏以《魔兽世界》的故事为背景,包含人类(Human)、兽人(Orc)、暗夜精灵族(NightElf)和不死族(Undead)四个玩法各jvzq<84yyy4xkw|kp94dqv4uqhz04;5420nuou
17.火山PC常量类与函数方法参数的使用详解本文详细介绍火山PC中常量类的高级应用,包括作为函数默认参数,限制用户输入选择等,通过具体案例演示增强代码灵活性。 **今天我们来实战讲解火山PC的常量类与函数方法的实战操作 相信对于常量类,大家还是比较熟悉的,但是大家却不知道,它的一些深层次的用法操作,本篇文章,我们就来详细的介绍火山PC的常量类。** 一、首先我们新建一个火山PC的jvzquC41dnuh0lxfp0tfv8vs33>6;9<8725bt}neng5eg}fknu522A:76293
18.新闻中心——驱动之家:您身边的电脑专家据悉,该机将搭载8核处理器(不出意外应该是联发科的MT6595),并采用5寸以上屏幕,可能会分为3G版和4G版,发布时间大概在今年8月份左右。 之前有消息称,红米2代以及魅族的千元新机都将使用MT6595处理器,该处理器内置了四颗Cortex-A17核心(最高2.1GHz)和四颗Cortex-A7核心(1.7GHz),整合PowerVR 6系列图形核心,支持双jvzquC41pg}t0v~ftk|ft|3eqo5cnxl142752>680jzn
19.这10款经营建造类游戏,每一款都能让你玩到天亮!风暴之城(Agait the Storm)(PC) 本作是一款肉鸽+经营建造类型的游戏。在游戏的设定中,风暴会呈周期性的出现,摧毁这个世界的文明,但火山城却是一个不错的庇护之地。玩家作为决策者,需要在风暴袭来的周期之间去探索火山城的周边来获取资源,用以建设城市。当然实际游戏中本作完全以女王的任务作为意志就好。 jvzquC41yy}/cun4354og}4pgyy0j}rn14636681:477;@3jvor
20.登峰造极NV最强显卡GTX590震撼首测在本期测试中,我们采用了显卡天梯图以便更直观的体现出显卡的具体性能以及对比测试显卡之间的性能高低。同时,通过这个显卡天梯图我们能一目了然的看到当前主流显卡之间的相对排位。 PConline显卡产品天梯图说明:为了让网友更直观地了解评测显卡的档次,我们引入了天梯图。在显卡天梯图中,我们按产品的性能划分产品档次,段位jvzquC41i0vdqwqkpg4dqv3ep1~04<<145=1596acnr/j}rn
21.更新大漠v7.2450模块(易语言+火山PC),支持Win1124h2<火山程序 类型 = "通常" 版本 = 1 /> 方法WriteDataAddrZjj <公开 类型 = 整数 注释 = "WritejvzquC41ddy/3;:0nc5gq{zo0rnqAvtf?xofy}mtgcj'vri?36>55:62
22.ByRef参数类型不匹配|MicrosoftLearn常量、固定长度字符串、数组、用户定义类型和 Declare 语句无法允许作为对象模块的公共成员 无法访问系统注册表(错误 335) 无法创建引用:“项” 无法执行指定的程序 无法启动 Internet Explorer 当前模块不支持打印方法 不允许项目的循环引用 “局部变量”窗口中显示的数据类型 jvzquC41fqit0vnetqyph}3eqo5{j6hp1qlgklj1xdg0njsiwcmf1{jhgtkoen4wugx.kwygthgdg6mgnr5c{{jh/cxhwvjpv/zzrn2okusbvlmAuq{senBtgeunonsfcvopp|