查看原文
其他

校正批次效应

生信技能树 生信技能树 2022-08-13

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

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

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


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存