minfi 分析甲基化芯片数据 - 预处理篇
在芯片分析领域中,该方法采用探针信号强度作为衡量生物体基因表达水平的标准.然而由于探针信号强度容易受噪声影响,在实际应用中可能导致测量误差.因此必须消除背景噪声.
差异分析的结果是我们最为关注的数据。为了确保实验结果的真实性和准确性,在保证样本处理和实验阶段达到准确性和一致性的前提下(即除确保样本处理和实验阶段达到准确性和一致性外),还必须最大限度地降低干扰因素的影响(即尽可能地减少干扰因素)。例如通过消除技术重复带来的影响(即如减少技术重复之间的差异),归一化处理已成为目前应用中的一种常用的有效手段(即常用的手段就是归一化)。
在各类芯片分析中都必定经历去噪与归一化的两大环节作为前期处理程序
不论450K或850K芯片为何设计,在设备运行过程中都部署了多个精密控制探针。普遍采用的技术是利用这些探测器检测并调整CpG探针的工作状态以达到最佳降噪效果。
在甲基化芯片领域中,在同时采用了I型探针与II型探针的情况下,并非所有的基因都会被正确识别,在这种情况下其归一化处理方式与其他芯片存在差异,并且需要采用特定算法以确保数据的一致性和准确性。
I型探针和II 型探针之间的差异
450K与850K芯片在实验中共同采用了I型探针与II型探针的组合方式,在测试过程中发现这两种探针的工作性能分布呈现出显著差异。

技术重复之间的差异
技术重复之间的beta 值分布也有差异,会对差异分析造成影响。

上面的图片摘自以下文章
SWAN: Subset-quantile intra-array normalization applied to the Illumina Infinium HumanMethylation 450 BeadChip technology.
在minfi 中, 提供了许多封装好的函数进行预处理操作,包括以下几种
preprocessRaw
直接使用探针原始的信号强度,不做任何的降噪和归一化操作。用法示例:
> 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
preprecessIllumina
本系统借鉴 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。这是因为,在降噪过程中探针的强度被归一化为零。
一个需要注意的点是,在调用此函数进行beta值计算时,请注意以下细节:其公式为\beta = \frac{M}{U + M + \text{offset}}。其中参数\text{offset}的默认取值为0。然而,在某些特定场景下(例如像GenomeStudio这样的系统),\text{offset}会被预设为100以获得不同的计算结果)。因此,在希望获得与GenomeStudio一致的计算结果时,请确保正确设置相关参数
preprocessSWAN
采用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
preprocessQuantile
用法示例:
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])
preprocessNoob
使用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
preprocessFunnorm
在第一步中采用NOOB算法来减少噪声的影响。接着应用功能归一化算法进行数据的标准化处理。用法示例:
> 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
尽管有多种算法可供选择,在实际应用中
总结
预处理主要包括背景降噪与归一化两个主要环节;经过预处理后,在进行降噪与归一化操作的基础上,在后续的数据分析过程中发现探针的intensity值会有所变化,并且这种变化会导致beta值出现相应波动;
minfi$...$被包含了许多预处理算法,并且主要使用的是...... `preprocessFunnorm...和processQuantile。
