TCGA:质控
样本过滤和基因过滤
TCGA:批次校正
批次效应是在进行实验的时候附带产生了和实验结果没有关系的数据偏差。例如,
1. 一组实验在星期一进行一次而另一组在星期二进行,
2. 两名技术人员进行相同的实验,
3. 实验当中使用了两种不同批次的试剂、芯片或仪器
以上这些都有可能产生批次效应则可能会出现批次效应。
人员,试剂,仪器,只是可能,但不一定会有影响
批次效应,一般存在于要合并/比较分析的数据中。举几个例子:
1、两家不同的医院搜集样本检测得到的数据
2、同一家医院不同时间送去测序得到的数据
3、同一批样本,分两次测序得到的数据
4、用不同的测序平台得到的数据
我们可以将批次效应简单理解为,非真实生物学差异 (如机构、技术、操作等) 导致的组间差异。所以,两组样本不能直接拿来比较!因为你得到的组间差异无法明确其是真正的形如癌与对照的差异,还是其他噪声因素导致的差异。
批次效应不能被消除,只有尽可能的降低。你可能之前或多或少了解到数据中可能会存在批次效应,或者已经使用 removeBatchEffect /ComBat 等工具做过批次矫正。那么就涉及到一个经典的问题,这
如何检测批次效应
在进行去除批次效应之前,首先还是需要观察一下批次对于数据的影响情况。通过比较去除之前和去除之后的变化,才能了了解具体的数据变化。
批次效应之前要看看数据分布最好。
批次效应之前先做图看看数据分布情况再去去批次再用图看看数据分布情况
有哪些图可以用(看批次差异)
Combat
removeBatchEffect
PCA图
有哪些包可以用(去批次)
SVA,combat和limma中的removeBatchEffect
常规的批次效应的检测方法,主要是通过聚类或者降维分析 两种方法来检测批次效应的存在
经典的用来去除批次效应的方法还是ComBat算法。这类算法之前主要还是通过类似R语言这样的编程工具来进行分析。不过前段时间我们也提到过两个用来去除批次效应的工具。具体的相关工具介绍可以看我们明天的帖子哦
1、两者都是针对芯片(强调!!!芯片是芯片,测序是测序)数据。所以在使用前,数据都要经过一定的标准化操作,如log转化。并不能直接应用于 read counts!
2、经典工具 ComBat 的原作者又开发了ComBat-Seq,针对测序数据,以保证经过批次效应矫正后得到的仍是整数counts,便于后续衔接基于整数进行差异分析的工具,如edgeR 和DESeq2 等。
DESeq2包官方推荐使用limma包中的removeBatchEffect()去批次。
不管是removeBatchEffect还是ComBat都是直接对原数据进行修改,意味着你的后续分析要基于矫正后的数据进行。那么是不是意味着,对批次进行矫正后,就刚好能拿来做差异表达分析了呢?
removeBatchEffect() 函数的文档中有明确的叙述: removeBatchEffect 只能用于衔接聚类、PCA等可视化展示,不能将去批次后的数据用于差异分析!
TCGA的复杂度超乎想象,很多文章甚至是CELL也有规避批次效应的问题(后面我们还会讲到),至于原因...违背了很多人坚守的"我看不见它,它就不存在"、"一切从简"、"结果好就行";而且没办法完全消除批次效应;而且大多数的批次效应其实是未知的
批次效应存在的最大问题是:批次效应的存在与真实的生物学差异如何区分
最终目的是为了让差异更明显
https://mp.weixin.qq.com/s?__biz=MzAxMDkxODM1Ng==&mid=2247492776&idx=1&sn=3c9e4052510abcf4eb61a215cdb85738&chksm=9b4ba413ac3c2d05c58ab56ab59a1498aed5ea8b6c6cd97e2f1ea534b62bf56fadde2e60beda&scene=178&cur_album_id=1987333576643641349#rd
摘录原话:很多人认为去除批次效应是要改变你的表达矩阵,用新的表达矩阵然后去走差异分析流程,其实大部分的差异流程包里面,人家内置好了考虑你的批次效应这样的混杂因素的函数用法设计,例如
使用limma的removeBatchEffect去除批次效应
知道注意的是limma的removeBatchEffect这个时候肯定会改变你的counts值矩阵,改变后就没办法走DESeq2差异分析流程啦,仅仅是为了拿到去除批次效应前后对比的表达矩阵而已。
那么如何解决批次效应呢?
目前主流的方法有:ComBat方法(这个方法出现负值比较多)、替代变量分析法、距离加权判别法和基于比值的方法等
这里就涉及到太多的数理知识就不展开讲, 有兴趣的同学可以看一下这篇文章
http://html.rhhz.net/njnydxxb/201903001.htm
limma 包中 removeBatchEffect 函数中出现负值问题
这里注意一下,limma 包中的removeBatchEffect 是构建了一个线性模型,然后进行QR分解从而去除批次效应
异常值的处理方法
使用 3σ或者 1.5IQR原则过滤异常值
log转换(这个方法可以把偏态数据进行拉回来)
sigmoid函数对数据进行压缩(这个方法适用于除了异常值后方差较小的数据)
如果这个基因你压根就不关心直接删掉