R——处理批次效应
2020-05-12 本文已影响0人
找兔子的小萝卜
什么情况下会出现批次效应?
(1)多个数据集合并
在生信分析过程中,尤其是转录组分析中,经常会遇到测得数据不足,需要利用公共数据库中已有的数据,那么能将这些数据直接和测序的数据混合吗?如果贸然混合,就会存在批次效应。
(2)同一个数据包组间差异小,组内差异大,即使logFC很低,也不能得到很多差异基因。
对于上述两种情况可以使用
可以把人当做是一个批次效应,使用北京大学李程课题组开发的sva包的combat函数,把这样的效应去除一下,接着再找差异。
ComBat是基于经典贝叶斯的分析方法,运用已知的批次信息对高通量数据进行批次校正。在sva R package 中提供了ComBat用于处理批次效应。ComBat有两个方法可供选择,一种是基于参数和一种非参数方法,combat函数的par.prior参数可以设置。函数输入数据为经过标准化的数据矩阵,返回结果为经过批次校正后的一个数据矩阵。
source("http://www.bioconductor.org/biocLite.R")
biocLite("sva")
biocLite("bladderbatch")
library(sva)
library(bladderbatch)
data(bladderdata)
pheno = pData(bladderEset)
edata = exprs(bladderEset)
batch = pheno$batch
modcombat = model.matrix(~1, data=pheno)
combat_edata = ComBat(dat=edata, batch=batch, mod=modcombat, par.prior=TRUE, prior.plot=FALSE)
**另外,ber R package同样可以校正批次效应。同样运用上面的bladder cancer数据。在这个R包中提供了六个函数来进行批次校正,ber函数,ber_bg, combat_np, combat_p,mean_centering,standardization函数。对于这六个函数来说,输入数据行对应的是样本,列对应的是变量。**
dat = t(edata)
class = data.frame(pheno$cancer)
batch = as.factor(pheno$batch)
ber_edata1 = ber(dat, batch, class)
ber_edata2 = ber_bg(dat, batch, class)
ber_edata3 = combat_np(dat, batch, class)
ber_edata4 = combat_p(dat, batch, class)