R语言批数处理

2020-01-22 13:09:26 浏览数 (1)

在很多实验的时候都会遇到不同批次的数据整合的情况,那么今天就给大家介绍一个测序数据的批次数据分析的R包sva。首先我们看下包的安装,以及内置数据的安装:

BiocManager::install('bladderbatch')

BiocManager::install('sva')

接下来我们看个体外概念虚拟变量,是人为设定的用于将分类变量引入回归模型中的方法,也就是说分类变量的类型数量就是虚拟变量的变量数。通常情况下,回归分析,逐步回归,分层回归,Logistic回归,PLS回归等这类影响关系研究的方法时,才可能涉及到虚拟变量设置。其它分析方法并不会涉及。公式如下:

接下来我们看下实例:

library(bladderbatch)

data(bladderdata)

dat <- bladderEset[1:5000,]

pheno = pData(dat)

代码语言:javascript复制
edata = exprs(dat)

batch = pheno$batch

mod = model.matrix(~as.factor(cancer),data=pheno)

那么如果我们只是单纯的引入所用的变量,而不是针对某个变量的虚拟变量,那么我们可以直接:

代码语言:javascript复制
 mod0 = model.matrix(~1,data=pheno)

接下来我们看下其内置的函数:

1. num. sv 评估批次数量。其主要的参数评估的方法设置:be:置换检验,基本思想是:在H0假设成立的前提下,根据研究目的构造一个检验统计量,并利用样本数据,按排列组合的原理,导出检验统计量的理论分布,在实际中往往因为排列组合数太多,而模拟其近似分布,然后求出在该分布中出现观察样本及更极端样本的概率p,通过和0.05比较,做出统计推断。Leek:逼近思想,采用某种函数(线性函数或者非线性函数等等),基于小部分训练样本,来拟合价值函数的真值。实例:

代码语言:javascript复制
n.sv =num.sv(edata,mod,method="leek")

2. sva 消除除了批次之外的环境或者生物学实验差异。具体参数如下:

其中主要的参数:

Dat 表达数据矩阵

Mod 调整变量的虚拟变量模型;无调整变量时可以用mod0.

Control 设置基因的属性,1-控制变量,0-非控制变量。一般我们得到的矩阵都已经做了这一部分的处理,所以一般都是0

Method 迭代计算的方法,irw 可以自行评估control probes;supervised 对control probes已知矩阵选此项。

实例:

代码语言:javascript复制
svobj = sva(edata,mod,mod0,n.sv=n.sv)

其中:

Sv: 每一批对应的样本的替换变量。

Pprob.gam 指的每个基因受到一个或者多个因素影响的概率。

Pprob.b 指的是每个基因受到调整因素影响的概率。

n.sv 指的评估出来的批次数。

3. f.pvalue 主要用来计算批次之间的差异性。同时还自带矫正的函数p.adjust。其使用很简单,我们直接看下实例:

modSv = cbind(mod,svobj$sv)

mod0Sv = cbind(mod0,svobj$sv)

pValuesSv = f.pvalue(edata,modSv,mod0Sv)

qValuesSv =p.adjust(pValuesSv,method="BH")

前面是对无法确定的批次的影响因素的批次处理,那么接下来我们看下对已知的批次数据如何进行合并,需要用到函数ComBat。

其中主要的参数:

mean.omly 一个逻辑值,可以判断是否进行标准化处理,还是只针对批次的均值影响。

Prior.plots 绘制通过核密度估计(黑)——是在概率论中用来估计未知的密度函数,属于非参数检验方法和参数估计(红)的结果比较。

代码语言:javascript复制
ref.batch 可以参考的前面num.sv计算的批次数量。
代码语言:javascript复制
par.prior 判断用哪种估计方法,TRUE 参数估计,FALSE 非参数估计
代码语言:javascript复制
实例:

# parametric adjustment

combat_edata1 = ComBat(dat=edata,batch=batch, mod=NULL, par.prior=TRUE, prior.plots=FALSE)

# non-parametric adjustment, mean-onlyversion

combat_edata2 = ComBat(dat=edata,batch=batch, mod=NULL, par.prior=FALSE, mean.only=TRUE)

# reference-batch version, with covariates

combat_edata3 = ComBat(dat=edata,batch=batch, mod=mod, par.prior=TRUE, ref.batch=3)

当然如果设置prior.plots=T,那么就会得到第一批的评估的样本分布图。除了核算法的选择外,带宽(bandwidth)也会影响密度估计,过大或过小的带宽值都会影响估计结果。实例

combat_edata1 = ComBat(dat=edata,batch=batch, mod=NULL, par.prior=TRUE,prior.plots=T)

以上就是整个过程里,通过上面的处理就可以将微阵列的测序数据进行多批次的合并,当然,个人觉得数据类型类似的其他实验数据也是可以用此包进行合并的。

0 人点赞