R——处理批次效应

什么情况下会出现批次效应?

(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)

你可能感兴趣的:(R——处理批次效应)