在芯片分析中,使用探针的信号强度来衡量表达量,但是探针的信号强度会受到噪声的干扰,所以需要去除背景噪声。
差异分析的结果是我们最关注的的结果,为了保证差异分析结果的可靠性,除了保证样本处理和实验阶段的准确性之外,还必须尽可能的减少干扰因素,比如减少技术重复之间的差异,常用的手段就是归一化。
在所有类型的芯片分析中,都会包含去除噪声和归一化两个步骤,合称为预处理。
不论是450K还是850K芯片,都有一系列的control probe。 常见的背景降噪算法都是通过control探针的信号强度来校正CpG探针的信号强度。
对于甲基化芯片而言,由于混合了I型探针和II型探针,其归一化策略和其他的芯片会有所不同,必须使用专门的算法。
450K和850K芯片都混合使用了I型探针和II 型探针,而这两种探针的信号强度的分布并不相同。
技术重复之间的beta 值分布也有差异,会对差异分析造成影响。
上面的图片摘自以下文章
SWAN: Subset-quantile Within Array Normalization for Illumina Infinium HumanMethylation450 BeadChips
在minfi
中, 提供了许多封装好的函数进行预处理操作,包括以下几种
直接使用探针原始的信号强度,不做任何的降噪和归一化操作。用法示例:
> Mset.raw <- preprocessRaw(rgSet)
> Beta.raw <- getBeta(Mset.raw)
> head(Beta.raw[, 1:2])
5640269011_R01C01 5640269011_R01C02
cg00050873 0.442954145 0.4807018
cg00212031 0.037192982 0.4955224
cg00213748 0.062017215 0.4781491
cg00214611 0.009769379 0.5105634
cg00455876 0.519177321 0.3870192
cg01707559 0.053536392 0.4947322
采用和illumina 公司提供的`Genomestudio 软件相同的背景降噪和归一化算法。 用法示例:
> Mset.illumina <- preprocessIllumina(rgSet, bg.correct = TRUE, normalize = "controls")
> Beta.illumina <- getBeta(Mset.illumina)
> head(Beta.illumina[, 1:2])
5640269011_R01C01 5640269011_R01C02
cg00050873 0.44136148 NaN
cg00212031 0.01514483 0.45161290
cg00213748 0.02828619 0.40000000
cg00214611 0.00000000 NaN
cg00455876 0.52008149 0.08035714
cg01707559 0.03959919 0.49392097
相比原始探针的beta值,预处理之后发生了变化,值得注意的是beta 中产生了NaN, 这是因为降噪的过程中,探针的intensity变成了0。
需要注意的一点就是,getBeta
函数在计算beta值时,公式是beta = M / (U + M + offset)
, 默认情况下,offset 的值为0,而GenomeStudio
计算beta值时,offset是100,如果想要得到和GenomeStudio
相同的beta值,在使用getBeata
函数时,需要指定offset=100
。
采用SWAN 算法进行归一化,用法示例:
> Mset.swan <- preprocessSWAN(rgSet)
> Beta.swan <- getBeta(Mset.swan)
> head(Beta.swan[, 1:2])
5640269011_R01C01 5640269011_R01C02
cg00050873 0.41484851 0.4373368
cg00212031 0.04521873 0.4455556
cg00213748 0.07077626 0.4259962
cg00214611 0.01518267 0.4695767
cg00455876 0.46695005 0.3344798
cg01707559 0.05960201 0.4046000
用法示例:
Mset.quantile <- preprocessQuantile(rgSet,
fixOutliers = TRUE,
removeBadSamples = TRUE,
badSampleCutoff = 10.5,
quantileNormalize = TRUE,
stratified = TRUE,
mergeManifest = FALSE, sex = NULL)
Beta.quantile <- getBeta(Mset.quantile)
head(Beta.quantile[, 1:2])
使用noob
背景降噪和归一化算法,用法示例:
> Mset.noob <- preprocessNoob(rgSet)
Loading required package: IlluminaHumanMethylation450kanno.ilmn12.hg19
[preprocessNoob] Applying R/G ratio flip to fix dye bias...
> Beta.noob <- getBeta(Mset.noob)
> head(Beta.noob[, 1:2])
5640269011_R01C01 5640269011_R01C02
cg00050873 0.43735970 0.4972196
cg00212031 0.02977752 0.4992273
cg00213748 0.05049398 0.4955324
cg00214611 0.02711612 0.5015160
cg00455876 0.52250999 0.4750661
cg01707559 0.02868987 0.4919265
首先使用noob
算法降低噪声,然后使用 functional normalization algorithm
进行归一化,用法示例:
> Mset.funnorm <- preprocessFunnorm(rgSet)
[preprocessFunnorm] Background and dye bias correction with noob
[preprocessNoob] Applying R/G ratio flip to fix dye bias...
[preprocessFunnorm] Mapping to genome
[preprocessFunnorm] Quantile extraction
[preprocessFunnorm] Normalization
> Beta.funnorm <- getBeta(Mset.funnorm)
> head(Beta.funnorm[, 1:2])
5640269011_R01C01 5640269011_R01C02
cg13869341 0.8088316 0.84008819
cg14008030 0.7052135 0.77599014
cg12045430 0.1955532 0.08396006
cg20826792 0.2799878 0.14448866
cg00381604 0.1393622 0.01848330
cg20253340 0.4237887 0.10738351
虽然有这么多的算法可供选择,在实际使用中,对于存在大规模差异的样本,比如癌症和正常人的差异,不同组织的差异鉴定,推荐使用 preprocessFunnorm
;对于小规模的差异,比如同一组织不同处理, 推荐使用
processFunnorm
。
minfi
提供了许多预处理的算法,最常用的就是preprocessFunnorm
和processQuantile
;