校正批次效应
一般情况下我们最好是在实验设计上就考虑到这一点。
但很多时候,数据分析者往往身不由己。
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
点击下面的的阅读原文,文章里面的链接都是可以跳转的