校正批次效应

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

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

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 点击下面的的阅读原文,文章里面的链接都是可以跳转的

原文发布于微信公众号 - 生信技能树(biotrainee)

原文发表时间:2018-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

经验贴:如何进行大数据入门级学习

虽然题主问的是大数据的入门,但在我看来“大数据”就是数据科学的一个高阶状态。以下内容中除个别情况,我基本上都会使用“数据科学”这个概念。数据科学并没有一个独立的...

11310
来自专栏AI派

520来了,如何用 Python 预测女神是否属于自己呢

很明显,在 520 这一天,Python 已经告诉你说“她不是你的了”,说真的,做程序猿确实辛苦,“朝九晚五”跟我们没有半毛钱关系。

16850
来自专栏大数据钻研

想学编程并不难 这样做就可以了

不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之...

32690
来自专栏趣谈编程

跟Google大佬一起学数据结构与算法

加我好友的人估计已经知道,我在朋友圈分享过两次极客时间的课程,一次是趣谈网络,看完后觉得不错,这次有位Google大佬给大家出了一个系列的数据结构与算法的图文音...

16410
来自专栏PPV课数据科学社区

【干货】怎样进行大数据的入门级学习?

数据科学并没有一个独立的学科体系,统计学,机器学习,数据挖掘,数据库,分布式计算,云计算,信息可视化等技术或方法来对付数据。但从狭义上来看,我认为数据科学就是解...

26730
来自专栏LET

我的面试心得:面试官视角

15860
来自专栏IT派

我们爬了上千个数据分析师信息, 你真的懂数据分析师嘛?

有人说,这个时代,只要站在了风口,猪都能飞起来,尤其互联网行业,千变万化,日异月殊,一不小心就错过了风口,如果没记错的话,前几年火的是App开发,后来是大数据,...

11930
来自专栏奇点大数据

什么是数据

数据是什么?这几乎成为一个我们熟视无睹的问题。 有不少朋友脑子里可能会直接冒出一个词“数字”——“数字就是数据”,我相信会有一些朋友会斩钉截铁地这么告诉我。 一...

26560
来自专栏张善友的专栏

十年学会程序设计

这里分享一篇 Peter Norvig的 《十年学会程序设计》 (Peter Norvig  系Google研究院主任、美国计算机协会(ACM)资深会员(Fel...

25650
来自专栏ACM算法日常

如何应对“智力型”的算法面试题?

“给你a、b两个文件,他们各存放50亿条URL,其中每条URL各占用64字节,内存限制是4G,请你编写代码找出a、b文件中相同的URL”。这是某家大公司在201...

29620

扫码关注云+社区

领取腾讯云代金券