校正批次效应

一般情况下我们最好是在实验设计上就考虑到这一点。

但很多时候,数据分析者往往身不由己。

Stanford 大学 在MOOC上面的公开课:PH525x series - Biomedical Data Science 还专门抽一个章节来讲解这个问题,足以见它的重要性。 http://genomicsclass.github.io/book/

Chapter 10 - Batch Effects

  • Introduction to batch effects [Rmd]

  • Confounding [Rmd]

  • Confounding exercises

  • EDA with PCA [Rmd]

  • EDA with PCA exercises

  • Adjusting with linear models [Rmd]

  • Adjusting with linear models exercises

  • Factor analysis [Rmd]

  • Factor analysis exercises

  • Adjusting with factor analysis [Rmd]

  • Adjusting with factor analysis exercises

最简单的是quantile

library("preprocessCore")
dataMat <- cbind(trainExprMat, testExprMat)
dataMatNorm <- normalize.quantiles(dataMat)
whichbatch <- as.factor(c(rep("train", ncol(trainExprMat)), rep("test", ncol(testExprMat))))
train=dataMatNorm[, whichbatch=="train"]
test=dataMatNorm[, whichbatch=="test"]

很明显,画一下校正前后的 boxplot 就可以看到效果,然后PCA一下,看看是不是两个矩阵很清晰的被分开,如果是,说明校正失败咯。

高级一点是SVA包的ComBat函数

library("sva")
# subset to common genes andbatch correct using ComBat
dataMat <- cbind(trainExprMat, testExprMat)
mod <- data.frame("(Intercept)"=rep(1, ncol(dataMat)))
rownames(mod) <- colnames(dataMat)
whichbatch <- as.factor(c(rep("train", ncol(trainExprMat)), rep("test", ncol(testExprMat))))
combatout <- ComBat(dataMat, whichbatch, mod=mod)
train=combatout[, whichbatch=="train"]
test=combatout[, whichbatch=="test"]

还有limma包也附带了这个功能,就不多介绍了,感兴趣的朋友可以自行在生信技能树论坛搜索看看。

10年nature有一篇综述,专门讲这个问题。

不同平台的数据,同一平台的不同时期的数据,同一个样品不同试剂的数据,以及同一个样品不同时间的数据等等都会产生一种batch effect 。这种影响如果广泛存在应该被足够重视,否则会导致整个实验和最终的结论失败。
比对实验组和对照组,不同的处理是患病和不患病(测序时,先测得疾病,然后测得正常),然后你通过分析,得到很多差异表达的基因。现在问题来了,这个差异表达的结果是和你要研究的因素有关,还是时间有关,这个问题里时间就会成为干扰实验结果的因素,这个效应就是其中一种比较能理解的 batch effect。

PCA查看矫正前后效果

图来源:https://www.researchgate.net/figure/PCA-analysis-of-normalized-gene-expression-data-before-and-after-batch-effect-analysis_fig2_260217085
点击下面的的阅读原文,文章里面的链接都是可以跳转的

(0)

相关推荐

  • 批次效应到底是个什么东东?

    基本概念 关于批次效应的基本解释, 在10年的一篇综述当中是这么解释的. Batch effects are sub-groups of measurements that have qualitat ...

  • 干货|理解Dropout,BN及数据预处理

    一.随机失活(Dropout) 具体做法:在训练的时候,随机失活的实现方法是让神经元以超参数 的概率被激活或者被设置为0.如下图所示: Dropout可以看作是Bagging的极限形式,每个模型都在当 ...

  • Microbiome | 批次效应对大鼠尿代谢组和肠道微生物群的影响比尿毒症更大

    推荐:江舜尧 编译:卓求 编辑:十九 伦敦玛丽女王大学威廉·哈维研究中心David William Randall教授等人于2019年9月2日在Microbiome发表题目为<Batch eff ...

  • 多种批次效应去除的方法比较

    前面我在生信技能树推文:你确定你的差异基因找对了吗? 提出了文章的转录组数据的60个样品并没有按照毒品上瘾与否这个表型来区分,而是不同人之间的异质性非常高,这个时候我提出来了一个解决方案,就是理论上就 ...

  • 关于批次效应矫正后出现负值

    学徒已经陆续出师,是时候把生信技能树的舞台交给后辈了! 下面是YuanSH的分享 首先要了解一下什么叫批次效应 那么如何解决批次效应呢? limma 包中 removeBatchEffect 函数中出 ...

  • 并不是所有的批次效应都可以被矫正

    最近接到粉丝求助,他最近在跟着我B站课程和GitHub代码处理GEO 芯片: GSE113486 GEO平台 已经进行了log2 转换和 Normalized signal intensity by ...

  • 单细胞转录组测序中的批次效应知多少? (上)

    写教程的话,我的优点仅仅是量大,坚持了七年多写了超1万篇教程.但实际上绝大部分都浮于表面,深度不够. 恰好最近看到了一个超级优秀的博客,安排了其中几篇给学徒们翻译和理解,超级值得读! 阅读前面的翻译稿 ...

  • 单细胞转录组测序中的批次效应知多少? (下)

    写教程的话,我的优点仅仅是量大,坚持了七年多写了超1万篇教程.但实际上绝大部分都浮于表面,深度不够. 恰好最近看到了一个超级优秀的博客,安排了其中几篇给学徒们翻译和理解,超级值得读! 阅读前面的翻译稿 ...

  • 多个gsea数据集整合为什么一定要纠结批次效应

    最近有粉丝咨询我多个gsea数据集整合时候的批次效应的处理,我看了看,有affymetrix,agilent,illumina的芯片数据,还有测序的转录组,我勒个去,感觉是在集邮一样,然后邮件附上了一 ...

  • 去除批次效应好,还是RobustRankAggreg优?

    最近参加了生信技能树曾老师的GEO数据挖掘月学徒培养,对一些文章中的GSE数据集走标准化分析流程. 小洁老师在去除批次效应的探索文件里给出了两种方法,一个是用R包limma中的函数removeBatc ...

  • 使用scran包的MNN算法来去除多个单细胞转录组数据批次效应

    多个样本单细胞转录组数据整合算法以 mutual nearest neighbors (MNNs)和canonical correlation analysis (CCA) 最为出名,见 详细介绍多个 ...