芯片数据分析步骤4 标准化-affy

标准化

标准化的原因

芯片实验中存在大量干扰因素,标准化可以削弱这些干扰因素,使得实验条件下的测量可以相互比较。

常见干扰因素:芯片杂交的RNA总量不一致、芯片表面不平整、探针非特异性结合、杂交条件不一致。

注意,limma包的说明里面提供了两点建议。一,如果要进行探针过滤(filter),最好在进行标准化之后再过滤。二,如果要在后续分析中使用limma包,请不要进行基于方差(variance)的过滤,否则会影响方差分布,从而导致limma包处理产生糟糕的结果(poor results)。

标准化的方法

芯片数据的标准化可以分为四个步骤:

1、background correction

移除非特异结合等背景噪音,有助于检出较低丰度下的倍数差异检出

2、normalization

消除测量间的非实验误差,使得实验条件下的测量可以相互比较。

3、pm correction

对pm探针的荧光值进行修正

4、summarization

将前面得到的荧光强度值从探针水平汇总到探针组水平

下面提供三类常见的标准化方法。

1 使用expresso进行标准化

affy包提供了expresso函数进行标准化,用户可以自定义每一步使用的方法。oligo读取的数据也可以用expresso函数进行标准化。expresso函数提供的标准化方法如下。

> bgcorrect.methods()
[1] "bg.correct" "mas""none"   "rma"   
> normalize.methods(CLLbatch)
 [1] "constant"   "contrasts"  "invariantset"   "loess"  "methods""qspline"   
 [7] "quantiles"  "quantiles.robust"   "quantiles.probeset" "scaling"   
> pmcorrect.methods()
[1] "mas""methods""pmonly" "subtractmm"
> express.summary.stat.methods()
[1] "avgdiff"  "liwong"   "mas"  "medianpolish" "playerout"  

用法举例。

library(affy)
library(affydata)
data(Dilution)
eset <- expresso(Dilution,bgcorrect.method="rma",
normalize.method="quantiles",
pmcorrect.method="pmonly",
summary.method="medianpolish")

以上代码等价于使用rma函数。
affy包提供了expresso函数,可以用于自己组合不同的处理方法对数据进行标准化。但一般不建议这么做,因为许多处理方法不能整合到一起。建议使用一体化的标准化处理函数,如rma()

比如说,rma background correction 只用到了PM探针,因此PM correction只能选择pmonly;mas和medianpolish汇总方法会对数据进行log变换,因此不用和产生负值的步骤一起使用,比如说subtractmm pm correction。

2 使用threestep进行标准化

affyPLM包提供了threestep函数进行芯片数据标准化操作。

threestep函数提供的标准化方法分为三类,分别是background/signal adjustment, normalization 和 summarization。

注意,threestep 第一步进行的不是background correction而是background adjustment,注意与affy包的expresso函数进行区分。

threestep函数提供的标准化方法如下。

用法举例。

library(affyPLM)
library(affydata)
data(Dilution)
eset <- threestep(Dilution)

这样会使用RMA方法进行标准化。

eset <- threestep(Dilution, background.method = "MASIM",
normalize.method="quantile",summary.method="tukey.biweight")

这样就能使用自定义的方式进行标准化了。

注意,threestep函数返回值是经过log2变换的!

3 使用一体化函数进行标准化

使用整合好的一体化函数对数据进行标准化是最常见的方式,常用的一体化函数有rma,gcrma和mas5.

rma(Robust Multiarray Average)算法是最常用的算法之一,等价于

expresso(data,bgcorrect.method="rma",normalize.method="quantiles",pmcorrect.method="pmonly",summary.method="medianpolish")

其中normalize.method使用的quantiles方法,无需假设任何参数,因此适用于质量不好的芯片,如Agilent的芯片。affy包整合了rma函数,可以直接使用rma函数进行标准化。

使用代码如下。

library(affy)
eset <- rma(data)

注意,rma算法返回值经过log2变换

mas5是affy包整合的另一个一体化函数。整合了expresso函数和affy.scalevalue.exprSet,等价于

affy.scalevalue.exprSet(expresso(data,bgcorrect.method="mas",normalize.method=FALSE,pmcorrect.method="mas",summary.method="mas" ))

注意,mas5算法在最后一步才进行normalize,而且输出的数据并没有经过log2变换,而大多数的后续分析都要求数据进行log2变换

使用代码如下。

library(affy)
eset <- mas5(data)

gcrma算法是rma算法的改进版本。由于rma算法的pm correction只用到了PM探针而不考虑MM探针,因此可能导致探针表达值虚高。gcrma引入了探针亲和的信息,对探针信号进行修正。用户可以自定义探针亲和信息,也可以使用默认的hgu95芯片的探针亲和信息。

使用代码如下。

library(affy)
library(gcrma)
eset <- gcrma(data)

注意,由于gcrma算法使用了MM探针的信息,因此不适用于没有MM探针的affy芯片,如Affymetrix Human Gene 1.0 ST Array。因此适用范围比rma算法窄。和rma算法一样,gcrma算法的返回值经过log2变换

总的来说,没有必要的话尽量不要使用expresso函数和threestep函数,可能出现问题。尽量使用整合好的一体化函数。如果可以的话,可以对不同的算法效果进行比较,选择最好的算法。affycomp包是专门比较不同算法效果定位,但很多时候没必要这么做。

下面是比较不同算法效果的一个例子。大家如果有需要可以把数据换成自己的数据。

library(affy)
library(gcrma)
library(affyPLM)
library(RColorBrewer)
library(CLL)

data("CLLbatch")
colors <- brewer.pal(12, "Set3")
# use MAS5
CLLmas5 <- mas5(CLLbatch)
# use rma 
CLLrma <- rma(CLLbatch)
# use gcrma
CLLgcrma <- gcrma(CLLbatch)

## hist plot
hist(CLLbatch, main="orignal", col=colors)
legend("topright", rownames(pData(CLLbatch)), col=colors,
   lwd=1, inset=0.05, cex=0.5, ncol=3)
hist(CLLmas5, main="MAS 5.0", xlim=c(-150,2^10), col=colors)
hist(CLLrma, main="RMA", col=colors)
hist(CLLgcrma, main="gcRMA", col=colors)
## boxplot
boxplot(CLLbatch, col=colors, las=3, main="original")
boxplot(CLLmas5, col=colors, las=3, ylim=c(0,1000), main="MAS 5.0")
boxplot(CLLrma, col=colors, las=3, main="RMA")
boxplot(CLLgcrma, col=colors, las=3, main="gcRMA")

参考:

1、Bioconductor分析基因芯片数据

2、affy包技术文档

3、affyPLM包技术文档

猜你喜欢

转载自blog.csdn.net/tommyhechina/article/details/80356110