内容

1简介

本教程的目标是通过这个包提供一个450K数据的标准分析工作流minfi,包含了最近添加到软件包中的功能。我们邀请您阅读最近发表的软件论文(Martin J Aryee et al. 2014)以及Bioconductor项目网站上的在线包装插图,以了解更多细节。

我们将从最开始从一个示例数据集中读取输入原始数据(IDAT文件),并以差异甲基化的候选基因列表结束。此外,我们将涵盖质量控制评估、阵列内和阵列间的不同归一化、snp去除、性别预测、差异甲基化位置(dps)分析和差异甲基化区域(DMRs)的碰撞搜索。

如果时间允许,我们将通过Bioconductor引入一个互补的交互式可视化工具包,shinyMethyl,这允许交互式质量控制评估。

1.1依赖关系

库(minfi)库(minfiData)库(上海广电)

这些依赖可以从Bioconductor安装

源(“//www.andersvercelli.com/biocLite.R”)biocLite (c(“minfiData”、“上海广电”))

本教程可以从GitHub安装使用devtools通过

库(devtools) install_github(“hansenlab / tutorial.450k”)

1.2450k阵列设计和术语

在这一节中,我们将简要介绍450K数组以及贯穿全文的术语minfi包中。每个样品在一个单一的阵列上测量,在两个不同的颜色通道(红色和绿色)。正如平台名称所示,每个阵列测量超过45万个CpG位置。对于每个CpG,我们有两个测量值:甲基化强度和未甲基化强度。根据探头的设计,信号以不同的颜色显示:

alt标签

I型设计,两个信号用相同的颜色测量:一个探针用于甲基化信号,一个探针用于未甲基化信号。为II型设计中,只使用了一个探头。在绿色通道中读取的强度测量甲基化信号,在红色通道中读取的强度测量未甲基化信号。

报告甲基化水平通常使用两种测量方法:Beta值和M值。

β值\[\frac{M}{M + U + 100}\]

在哪里\ \(米)而且\ (U \)分别表示甲基化和未甲基化信号。

MValue日志{\ [Mval = \ \ biggl(\压裂{M}{你}\ biggr)} \]

DMP:差异甲基化位置:在两组不同的样品(或条件)中具有不同甲基化水平的单个基因组位置

DMR:差异甲基化区:当连续的基因组位置在同一方向上发生差异甲基化。

数组:一个样本

幻灯片:包含12个数组的物理幻灯片(2 \ \(6 \倍)网格)

物理板包含最多8个幻灯片(96阵列)。对于本教程,我们使用批处理和板可以互换。

2读取数据

的起点minfi是否使用内置函数读取。idat文件read.450k.exp.有几种选择:用户可以指定要读入的示例文件名以及目录路径,也可以指定包含文件的目录。在后一种情况下,目录中所有扩展名为.IDAT的文件都将加载到r中。用户还可以读入样例表,然后使用样例表将数据加载到RGChannelSet.有关更多信息,请参见minfi装饰图案。在这里,我们将加载包含6个样本的数据集minfiData使用包中提供的样例表进行打包:

baseDir < -系统。file("extdata", package="minfiData") targets <- read.450k.sheet(baseDir)
# # (read.450k。找到以下CSV文件:## [1]"/usr/local/R/R-3.2.x/lib/R/site-library/minfiData/extdata/SampleSheet.csv"
目标
# # Sample_Name Sample_Well Sample_Plate Sample_Group Pool_ID人年龄性别# # 1 GroupA_3 H5 NA GroupA NA id3 83 # # 2 GroupA_2 D5 NA GroupA NA id2 58 f# # 3 GroupB_3 C6 NA GroupB NA id3 83 # # 4 GroupB_1 F7 NA GroupB NA id1 75 F # # 5 GroupA_1 G7 NA GroupA NA id1 75 F # # 6 F GroupB_2 H7 NA GroupB NA id2 58 # #状态数组幻灯片# # 1正常R02C02 5723646052 # # 2正常R04C01 5723646052 # # 3癌症R05C02 5723646052 # # 4 R04C02 5723646053 # # 5正常R05C02 5723646053 # # 6 R06C02癌症5723.646053 ## Basename ## 1 /usr/local/R/R-3.2.x/lib/R/site-library/minfiData/extdata/5723646052/5723646052_R02C02 ## 2 /usr/local/R/R-3.2.x/lib/R/site-library/minfiData/extdata/5723646052/5723646052_R04C01 ## 3 /usr/local/R/R-3.2.x/lib/R/site-library/minfiData/extdata/5723646052/5723646052_R05C02 ## 4 /usr/local/R/R-3.2.x/lib/R/site-library/minfiData/extdata/5723646053/5723646053_R04C02 ## 5 /usr/local/R/R-3.2.x/lib/R/site-library/minfiData/extdata/5723646053/5723646053_R05C02 ## 6 /usr/local/R/R-3.2.x/lib/R/site-library/minfiData/extdata/5723646053/5723646053_R06C02
RGSet < - read.450k。exp(目标=目标)

RGSet的类是RGChannelSet对象。这是minfi分析的初始对象,其中包含绿色和红色通道中的原始强度。注意,此对象还包含内部控制探测的强度。因为我们从数据表实验中读取数据,表型数据也存储在RGChannelSet可以通过accessor命令访问pData

<- pData(RGSet)表型数据[,1:6]
# # Sample_Name Sample_Well Sample_Plate Sample_Group # # 5723646052 _r02c02 GroupA_3 H5 NA GroupA # # 5723646052 _r04c01 GroupA_2 D5 NA GroupA # # 5723646052 _r05c02 GroupB_3 C6 NA GroupB # # 5723646053 _r04c02 GroupB_1 F7 NA GroupB # # 5723646053 _r05c02 GroupA_1 G7 NA GroupA # # 5723646053 _r06c02 GroupB_2 H7 NA GroupB # # 5723646052 # # Pool_ID人_r02c02 NA id3 # # 5723646052 _r04c01 NA id2 # # 5723646052 _r05c02 NA id3 # # 5723646053 _r04c02 NA id1 # # 5723646053 _r05c02 NA id1 # # 5723646053 _r06c02 NA id2

RGChannelSet还存储一个清单对象,其中包含数组的探测设计信息:

manifest <- getManifest(RGSet)
## IlluminaMethylationManifest对象## Annotation ## array: IlluminaHumanMethylation450k ## I型探针数量:135476 ## II型探针数量:350036 ##控制探针数量:850 ## SNP I型探针数量:25 # SNP II型探针数量:40
头(getProbeInfo(清单)
## 6行8列的数据帧##名称地址sa地址sb颜色NextBase ## <字符> <字符> <字符> <字符>  ## 1 cg00050873 32735311 31717405红色A ## 2 cg00212031 29674443 38767301红色A ## 3 cg00213748 30703409 36767301红色A ## 4 cg002137611 69792329 4672359红色A ## 5 cg00455876 27653438 69732350红色A ## 6 cg01707559 45652402 64689504红色A ## ##  ## # 1 acaaaaaacaacacacaactatatttaaaataaaaacccca ## 2TTTTAACACCTAACACCATTTTAACAATAAAAATTCTACAAAAAAAAACA CCCAATTAACCACAAAAACTAAACAAATTATACAATCAAAAAAACATACA # # 3 # # 4 CTAACTTCCAAACCACACTTTATATACTAAACTACAATATAACACAAACA # # 5 AACTCTAAACTACCCAACACAAACTCCAAAAACTTCTCAAAAAAAACTCA # # 6 ACAAATTAAAAACACTAAAACAAACACAACAACTACAACAACAAAAAACA # # ProbeSeqB nCpG # # < DNAStringSet > <整数> # # 1 ACGAAAAAACAACGCACAACTATAATAATTTTTAAAATAAATAAACCCCG 2 # # 2 CCCAATTAACCGCAAAAACTAAACAAATTATACGATCGAAAAAACGTACG 4 # # 3 TTTTAACGCCTAACACCGTTTTAACGATAAAAATTCTACAAAAAAAAACG 3 # # 4CTAACTTCCGAACCGCGCTTTATATACTAAACTACAATATAACGCGAACG 5 # # 5 AACTCTAAACTACCCGACACAAACTCCAAAAACTTCTCGAAAAAAACTCG 2 # # 6 GCGAATTAAAAACACTAAAACGAACGCGACGACTACAACGACAAAAAACG 6

看到minfi装饰图案为更多的信息。

3.

alt标签

3.1MethylSet和RatioSet

一个MethylSet对象只包含甲基化和未甲基化信号。你可以通过

MSet <- preprocessRaw(RGSet) MSet
## MethylSet (storageMode: lockedEnvironment) ## assayData: 485512 features, 6 samples ##元素名称:Meth, Unmeth ##类'AnnotatedDataFrame'的对象## sampleNames: 5723646052_R02C02 5723646052_R04C01…# 5723646053_R06C02 (6 total) ## varLabels: Sample_Name Sample_Well…文件名(13 total) ## varMetadata: labelDescription ## Annotation ## array: IlluminaHumanMethylation450k ## Annotation: ilmn12。hg19 ##预处理##方法:Raw(没有规范化或bg校正)## minfi版本:1.15.11 ## Manifest版本:0.4.0

这个函数匹配不同的探头和颜色通道。的维度要小得多RGChannelSet;这是因为用I型探针测量的CpGs是用2个探针测量的。

的访问器getMeth而且getUnmeth可用于获得甲基化和非甲基化强度矩阵:

头(getMeth (MSet) [1:3])
## 5723646052_R02C02 5723646052_R04C01 5723646052_R05C02 ## cg00050873 22041 588 20505 ## cg00212031 679 569 439 ## cg00213748 1620 421 707 ## cg00214611 449 614 343 ## cg00455876 5921 398 3257 ## cg01707559 1238 646 637
头(getUnmeth (MSet) [1:3])
## 5723646052_R02C02 5723646052_R04C01 5723646052_R05C02 ## cg00050873 1945 433 1012 ## cg00212031 6567 300 2689 ## cg00213748 384 461 295 ## cg00214648 4869 183 1655 ## cg00455876 1655 792 1060 ## cg01707559 12227 1009 7414

还有其他预处理功能;参见下面的详细讨论。

一个RatioSetobject是一个被设计用来存储Beta值和/或M值而不是甲基化和未甲基化信号的类。一个可选的拷贝数矩阵,CN,即甲基化和未甲基化信号的总和,也可以存储。映射MethylSet到一个RatioSet可能是不可逆的,即不能保证检索甲基化和非甲基化信号从RatioSet.一个RatioSet可以用函数创建吗ratioConvert

RSet <- ratioConvert(MSet, what = "both", keepCN = TRUE)资源集
## RatioSet (storageMode: lockedEnvironment) ## assayData: 485512 features, 6 samples ##元素名称:Beta, CN, M ##类'AnnotatedDataFrame'的对象## sampleNames: 5723646052_R02C02 5723646052_R04C01…# 5723646053_R06C02 (6 total) ## varLabels: Sample_Name Sample_Well…文件名(13 total) ## varMetadata: labelDescription ## Annotation ## array: IlluminaHumanMethylation450k ## Annotation: ilmn12。hg19 ##预处理##方法:Raw(没有规范化或bg校正)## minfi版本:1.15.11 ## Manifest版本:0.4.0

的函数getBetagetM而且getCN分别返回Beta值矩阵、M值矩阵和Copy Number矩阵。

β< - getBeta(资源集)

3.2GenomicRatioSet

这个函数mapToGenome应用于RatioSet对象将向每个探针添加基因组坐标以及一些附加注释信息。输出对象是aGenomicRatioSet(类持有M或/和Beta值以及相关的基因组坐标)。通过设置该选项,可以将清单对象与基因组位置合并mergeManifest真正的

GRset <- mapToGenome(RSet) GRset
## class: genome icratioset ## dim: 485512 6 ## metadata(0): ## assays(3): Beta M CN ## rownames(485512): cg13869341 cg14008030…cg08265308 cg14273923 ## rowRanges元数据列名(0):## colnames(6): 5723646052_R02C02 5723646052_R04C01…## 5723646053_R05C02 5723646053_R06C02 ## colData名称(13):Sample_Name Sample_Well…Basename filename ## Annotation ## array: IlluminaHumanMethylation450k ## Annotation: ilmn12。hg19 ##预处理##方法:Raw(没有规范化或bg校正)## minfi版本:1.15.11 ## Manifest版本:0.4.0

请注意,GenomicRatioSet扩展了类SummarizedExperiment.以下是用于访问数据的主要访问器函数:

beta <- getBeta(GRset) M <- getM(GRset) CN <- getCN(GRset)
sampleNames <- sampleNames(GRset) probeNames <- featureNames(GRset) pheno <- pData(GRset)

返回探测位置作为GenomicRanges对象,可以使用访问器农庄

gr <- granges(GRset) head(gr, n= 3)
## seqnames range对象,3个范围和0个元数据列:## seqnames ranges strand ##    ## cg13869341 chr1 [158655,15865] * ## cg14008030 chr1 [18827,18827] * ## cg12045430 chr1 [29407,29407] * ## ------- ## seqinfo: 24个hg19基因组序列;没有seqlengths

要访问完整的注释,可以使用该命令getAnnotation

annotation <- getAnnotation(GRset) names(annotation)
## [1] "chr" "pos" ## [29] "strand" "Name" ## [5] "AddressA" "AddressB" ## [7] "ProbeSeqA" "ProbeSeqB" ## [9] "Type" NextBase" ## [11] "Color" "Probe_rs" ## [13] "Probe_maf" "CpG_rs" ## [15] "CpG_maf" "SBE_rs" ## [15] "CpG_maf" "SBE_rs" ## [17] "SBE_maf" "Islands_Name" ## [19] "Relation_to_Island" "Forward_Sequence" ## [21] "SourceSeq" "Random_Loci" ## [23] "Methyl27_Loci" "UCSC_RefGene_Name" ## [25] "UCSC_RefGene_Accession" "UCSC_RefGene_Group" ## [31] "Phantom" "DMR" ## [29] "Enhancer" "HMM_Island" ## [31]"Regulatory_Feature_Name" "Regulatory_Feature_Group" ## [33] "DHS"

3.3GenomicMethylSet

mapToGenome函数也可以用onMethylSet得到一个GenomicMethylSet.的ratioConvert而且mapToGenome函数交换,见上图。

4质量控制

4.1质量控制图

minfi提供了一个简单的质量控制图,在甲基化(M)和未甲基化(U)通道中使用对数中值强度。当绘制这两个中值时,可以观察到好的样本聚集在一起,而失败的样本往往分离,具有较低的中值强度。为了获得甲基化和非甲基化信号,我们需要转换RGChannelSet使用函数将包含甲基化和未甲基化信号的对象preprocessRaw.它接受输入aRGChannelSet并根据特殊的450K探头设计将红色和绿色强度转换为甲基化和非甲基化信号,并在新的类对象中返回转换后的信号MethylSet.它不执行任何规范化操作。

的访问器getMeth而且getUnmeth可用于获得甲基化和非甲基化强度矩阵:

头(getMeth (MSet) [1:3])
## 5723646052_R02C02 5723646052_R04C01 5723646052_R05C02 ## cg00050873 22041 588 20505 ## cg00212031 679 569 439 ## cg00213748 1620 421 707 ## cg00214611 449 614 343 ## cg00455876 5921 398 3257 ## cg01707559 1238 646 637
头(getUnmeth (MSet) [1:3])
## 5723646052_R02C02 5723646052_R04C01 5723646052_R05C02 ## cg00050873 1945 433 1012 ## cg00212031 6567 300 2689 ## cg00213748 384 461 295 ## cg00214648 4869 183 1655 ## cg00455876 1655 792 1060 ## cg01707559 12227 1009 7414

的函数getQC而且plotQC用于提取和绘制质量控制信息MethylSet

- getQC(MSet) head(qc)
## 6行2列## mMed uMed ## <数值> <数值> ## 5723646052_R02C02 11.69566 11.82058 ## 5723646052_R04C01 11.99046 11.95274 ## 5723646052_R05C02 11.55603 12.05393 ## 5723646053_R05C02 12.06609 12.09276 ## 5723646053_R05C02 12.23332 12.08448 ## 5723646053_R06C02 11.36851 11.60594
plotQC (qc)

此外,该函数addQC应用于MethylSet将QC信息添加到表型数据中。

为了进一步探索样本的质量,查看样本的Beta值密度是有用的,可以选择按组着色密度:

密度图(MSet, sampGroups =表型数据$Sample_Group)

或者密度豆图:

(MSet, sampGroups =表型数据$Sample_Group)

shinyMethyl以交互式的方式同时可视化所有情节特别有用。

4.2控制探针情节

450k阵列包含多个内部控制探针,可用于评估不同样品制备步骤(亚硫酸氢盐转化、杂交等)的质量控制。这些控制探测的值存储在初始值中RGChannelSet可以用函数来表示controlStripPlot通过指定控件探测类型:

controlStripPlot(RGSet, controls="亚硫酸氢盐转换II")

上面所有的图都可以使用该功能一步导出为pdf文件qcReport

qcReport (RGSet、pdf =“qcReport.pdf”)

4.3性预测

通过观察X染色体映射探针的中位总强度,表示\(地中海(X) \),为y染色体映射探针总强度的中位数,为\(地中海(Y) \),可以观察到两个不同的点簇,对应于样本所属的性别。为了预测性别,minfi使用截点来分离点\ (\ log_2{医疗(Y)} - \ log_2{医疗(Y)} \).默认的截止时间是\ [2 \).由于算法需要将探针映射到X-chr和Y-chr,即函数的输入getSex需要是一个GenomicMethylSet或者一个GenomicRatioSet

$predictedSex <- getSex(GRset, cutoff = -2)
## [1] " m " " f " " m " " f " " f "

要选择分隔两个性别群的分界线,可以绘制图\(地中海(Y) \)反对\(地中海(Y) \)与函数plotSex

plotSex(getSex(GRset,截断值= -2))

最后,函数addSex应用于GenomicRatioSet将把预测的性别添加到表现型数据中。

请注意:该函数不处理只有女性或只有男性的数据集

5预处理和标准化

到目前为止,我们还没有使用任何规范化来处理数据。中提供了不同的归一化程序minfi.许多人问我们,他们应该对数据集应用哪种标准化。我们的经验法则如下。如果您的样本之间存在全局生物甲基化差异,例如具有癌症和正常样本的数据集,或具有不同组织/细胞类型的数据集,请使用preprocessFunnorm函数,因为它是针对这样的数据集。另一方面,如果您不期望您的样本(例如血液数据集或单个组织数据集)之间存在全局差异,则使用preprocessQuantile函数。根据我们的经验,这两个规范化过程的性能总是优于函数preprocessRawpreprocessIllumina而且preprocessSWAN下面讨论。为了方便起见,这些函数仍然在minfi包中实现。

5.1preprocessRaw

如前所述,它将转换为RGChannelSet到一个MethylSet通过将红色和绿色通道转换成一个甲基化信号矩阵和一个未甲基化信号矩阵。不执行任何规范化操作。

输入:RGChannelSet
输出:MethylSet

5.2preprocessIllumina

把一个RGChannelSet到一个MethylSet通过实现在Genome Studio中可用的预处理选择:背景减法和控制规范化。它们都是可选的,关闭它们相当于原始预处理(preprocessRaw):

MSet。illumina <- preprocessIllumina(RGSet, bg。right = TRUE, normalize = "controls")

输入:RGChannelSet
输出:MethylSet

5.3preprocessSWAN

在数组内执行子集-分位数规范化(SWAN)(Jovana Maksimovic, Lavinia Gordon, Alicia Oshlack, 2012),针对I型和II型阵列设计之间的技术差异进行的阵列内归一化校正。该算法通过对不同的探针子集(除以CpG内容)分别应用数组内分位数归一化来匹配I型和II型探针的beta值分布。SWAN的输入是aMethylSet,函数返回aMethylSet也如果一个RGChannelSet,函数将首先调用preprocessRawRGChannelSet,然后应用SWAN归一化。我们建议设置一个种子(使用set.seed使用前)preprocessSWAN确保归一化强度是可再现的。

MSet。天鹅< - preprocessSWAN (RGSet)

输入:RGChannelSetMethylSet
输出:MethylSet

5.4preprocessQuantile

该函数实现了分层分位数归一化预处理。归一化过程分别应用于Meth和Unmeth强度。第I型和第II型信号的分布被迫相同,首先通过分位数标准化样本中的第II型探头,然后插值一个参考分布,我们将第I型探头归一化到该参考分布。由于探测类型和探测区域是混杂的,而且我们知道DNAm分布在不同区域之间是不同的,因此在应用这种插值之前,我们按区域对探测进行分层。请注意,该算法依赖于分位数规范化所需的假设,因此不推荐用于预期全局变化的情况,如癌症正常比较。注意,这个归一化过程与前面介绍的过程本质上相似(Nizar Touleimat和Jorg烤面包2012).不同的选择可以总结为以下列表:

  1. 如果fixMethOutlier真正的,当小强度接近于零时,函数固定了甲基化和非甲基化通道的离群值。
  2. 如果removeBadSamples真正的,利用前面讨论的QC准则去除不良样本
  3. 执行分层子集分位数归一化quantileNormalize = TRUE而且分层= TRUE
  4. 预测性别(如果没有提供在参数)使用函数getSex并分别将男性和女性的X和Y染色体探针归一化
GRset。quantile <- preprocessQuantile(RGSet, fixOutliers = TRUE, removeBadSamples = TRUE, badSampleCutoff = 10.5, quantileNormalize = TRUE, stratified = TRUE, mergeManifest = FALSE, sex = NULL)
## [preprocessQuantile]基因组映射。修复异常值。## [preprocessQuantile]分位数规范化。

输入:RGChannelSet
输出:GenomicRatioSet

请注意:函数返回aGenomicRatioSet对象已准备好进行下游分析。

5.5preprocessNoob

这个函数preprocessNoob实现了noob背景减法与染色偏置归一化讨论(Timothy J Triche et al. 2013).简单地说,背景减法估计来自带外探针的背景噪声,并分别去除每个样本的背景噪声,而染料偏倚归一化利用控制探针的子集来估计染料偏倚。默认情况下,函数将执行两个过程:

MSet。新手< - preprocessNoob (RGSet)
## [preprocessNoob]使用样本号2作为参考级别…

输入:RGChannelSet
输出:MethylSet

5.6preprocessFunnorm

这个函数preprocessFunnorm实现的函数归一化算法(Jean-Philippe Fortin et al. 2014).简单地说,它使用阵列上的内部控制探测来推断阵列之间的技术变化。它特别适用于比较已知大规模差异条件的研究,如癌症/正常研究或组织间研究。研究表明,对于这类研究,功能归一化优于其他现有方法(Jean-Philippe Fortin et al. 2014).缺省情况下,该函数应用preprocessNoob函数作为背景减法的第一步,并使用控制探测的前两个主成分来推断不需要的变化。

GRset.funnorm<- preprocessFunnorm(RGSet)
## [preprocessFunnorm]背景和染料偏差校正noob ## [preprocessNoob]使用样本号2作为参考水平…## [preprocessFunnorm]映射到基因组## [preprocessFunnorm]分位数提取## [preprocessFunnorm]规范化

输入:RGChannelSet
输出:GenomicRatioSet

随着preprocessQuantile函数,它返回aGenomicRatioSet对象。

6遗传变异和细胞类型组成

6.1单核苷酸多态性

因为snp在探针体内或核苷酸延伸处的存在会对下游分析产生重要影响,minfi提供了删除此类探测的可能性。这个函数getSnpInfo,适用于GenomicRatioSet,返回一个包含6列探测SNP信息的数据帧:

snps <- getSnpInfo(GRset) head(snps,10)
# # DataFrame 10行6列# # Probe_rs Probe_maf CpG_rs CpG_maf SBE_rs # # <人物> <数字> <人物> <数字> <人物> # # cg13869341 # # cg14008030不详不详不详不详不详不详不详不详不详不详# # cg12045430 # # cg20826792不详不详不详不详不详不详不详不详不详不详# # cg00381604 # # cg20253340不详不详不详不详不详不详不详不详不详不详# # cg21870274不详不详不详不详不详# # cg03130891 rs77418980 0.305556 NA NA NA # # cg24335620 rs147502335 0.012800 NA NA NA # # cg16162899不详不详不详不详不详# # SBE_maf # # <数字> # # cg13869341cg14008030 cg12045430 NA ## cg20826792 NA ## cg00381604 NA ## cg20253340 NA ## cg21870274 NA ## cg03130891 NA ## cg24335620 NA ## cg16162899 NA ##

探针CpG而且SBE分别对应探针体内部、CpG讯问处和单核苷酸延伸处的snp。的列rs给出snp的名称,而列与根据dbSnp数据库给出snp的次要等位基因频率。这个函数addSnpInfo会增加GenomicRangesGenomicRatioSet6列:

GRset < - addSnpInfo (GRset)

我们强烈建议在CpG查询或单核苷酸延伸处删除包含SNP的探针。这个函数dropLociWithSnps允许丢弃相应的探头。下面是一个例子,我们在CpG讯问和/或单核苷酸延伸处,对于任何较小的等位基因频率,丢弃包含SNP的探针:

GRset <- dropLociWithSnps(GRset, snps=c("SBE","CpG"), maf=0)

6.2细胞类型组成

所示(Andrew E Jaffe和Rafael A Irizarry 2014)在美国,血液样本中的生物学发现常常与细胞类型组成相混淆。为了估计表型和细胞类型组成之间的混淆水平,函数estimateCellCounts取决于软件包FlowSorted.Blood.450k中描述的算法的改进版本估计血液样本的细胞类型组成(E安德烈斯·豪斯曼等,2012).函数接受输入aRGChannelSet并返回每个样本的单元格计数向量:

cellCounts <- estimateCellCounts(RGset)

7识别dmr和dmp

7.1dmpFinder:查找差异甲基化位置(dmp)

虽然我们不特别鼓励单位置差异甲基化分析,功能dmpFinder发现不同的甲基化位置(DMPs)相对于表型协变量。表型可以是分类的(例如癌症vs.正常)或连续的(例如血压)。下面是一个DMP分析年龄的例子GRset.funnorm上面创建对象:

beta <- getBeta(GRset.funnorm) age <- pData(GRset.funnorm)$age dmp <- dmpFinder(beta, pheno = age, type = "continuous") head(dmp)
##拦截beta t pval qval ## cg19995126 1.990494e+00 -0.0235606444 -69.25397 2.604769e-07 0.1264647 ## cg10467968 3.320006e-01 0.0069860611 39.02973 2.574370e-06 0.5113251 ## cg11425201 8.452487e-01 0.0009700050 37.07724 3.159500e-06 0.5113251 ## cg24814628 1.020733e+00 -0.0025065546 -28.23109 9.367345e-06 0.9583333 ## cg01854459 6.101549e-02 -0.0003851095 -25.47377 1.410360e-05 0.9583333 ## cg26634885 -7.791584e-05 0.0002179788 24.33811 1.69095e -05 0.9583333

这个函数本质上是一个包装器lmFitlimma

7.2bumphunter:寻找差异甲基化区域(DMRs)

bumphunterminfi中的函数是凹凸搜索算法的一个版本(Andrew E Jaffe et al. 2012)适应于450k阵列,依赖于bumphunter在同名包中实现的函数bumphunter

没有寻找单个基因组位置和感兴趣的表现型之间的联系,bumphunter寻找在两种条件下甲基化差异的基因组区域。在450k数组的上下文中,算法首先定义探测集群。集群就是探测组,这样集群中的两个连续探测位置之间的距离不会超过一定距离mapGap

简单地说,该算法首先在每个基因组位置计算t统计量,并可选择平滑。然后,它将候选区域定义为所有t统计量都超过预定义阈值的探测集群。为了测试候选区域的显著性,算法使用排列(由参数定义B).排列方案是昂贵的,当候选碰撞的数量很大时,可能需要几天的时间。为避免浪费时间,我们建议以下指引:

  1. 定义你感兴趣的表现型
pheno <- pData(GRset.funnorm)$status designMatrix <- model。矩阵(~把)
  1. 运行算法B = 0在β值上的排列,有一个中等差的截止0.2(对应于20 \ %beta值的差异):
dmr < - bumphunter (GRset。funnorm, design = designMatrix, cutoff = 0.2, B=0, type="Beta")
  1. 如果候选碰撞的数量很大\ (> 30000 \),增加截止点以减少候选碰撞的数量。这背后的原理是,通过降低截止发现的大多数额外候选区域在排列方案之后将被发现是不显著的,因此可以通过更严格的截止(高截止)来节省时间。
  2. 一旦你决定了截止,运行算法大量的排列,比如说B = 1000
dmr < - bumphunter (GRset。funnorm, design = designMatrix, cutoff = 0.2, B=1000, type="Beta")

由于排列方案的开销很大,并行计算是在bumphunter函数。的foreach包允许不同的并行后端这将把计算分布到单个机器的多个核上,或者集群中的多个机器上。例如,如果一个人希望使用3个核,在运行bumphunter之前必须运行以下两个命令:

库(dopar列)registerdopar列(cores = 3)

的结果bumphunter存储在一个数据帧中,行是不同的差异甲基化区域(DMRs):

名(dmr)头(dmr表美元,n = 3)

作为一个例子,我们已经运行bump hunting算法来查找结肠和肾脏之间的DMRs(每个TCGA中有20个样本)\ \ (B = 1000)排列,Beta值的截止为0.2:

数据(“dmrs_B1000_c02”)负责人(dmr表)美元

开始而且结束列表示DMR的限制性基因组位置;的价值列表示肿块中甲基化的平均差异,而区域列表示凸起相对于0线的面积。的弗兰克-威廉姆斯列返回渗透方案估计的区域的家族错误率(FWER)。可以通过在FWER上选择一个截止点来过滤结果。

7.3屏蔽仪。

450K阵列上的约170,000个公海探针可用于检测甲基化状态的长期变化。这些可达数Mb的大规模变化通常只有通过全基因组亚硫酸氢盐测序才能确定。这个函数blockFinder将开海探针簇的平均甲基化值分组cpgCollapse),然后运行bumphunter具有大(250KB+)平滑窗口的算法(参见上面DMRs的凹凸搜索部分)。

7.4用SVA校正批量效果

代理变量分析(SVA)(Jeffrey T Leek和John D Storey 2007,杰弗里·T·莱克和约翰·D·斯托里(2008)是一个有用的工具,以确定代理变量的不必要的变异,同时保护感兴趣的表现型。根据我们的经验,在规范化450K数据之后运行vapreprocessFunnormpreprocessQuantile增加下游分析的统计能力。例如,要在m值上运行va,保护case-control状态,可以使用以下代码来估计代理变量(这可能需要几个小时的运行时间):

library(va) mval <- getM(GRset)[1:5000,] pheno <- pData(GRset) mod <- model.matrix(~as.factor(status), data=pheno) mod0 <- model.matrix(~as.factor(status), data=pheno)股东价值分析矩阵(~ 1、数据=把)。结果<- sva(mval, mod, mod0)
迭代(5个):1 2 3 4 5

一旦计算出代理变量,就可以将它们包含到下游分析中,以调整未知的不需要的变化。看到上海广电装饰图案为更全面的使用股东价值分析

8其他任务

8.1A / B隔间的预测。

这个函数隔间从Illumina甲基化微阵列中提取A/B隔间,如(Fortin and Hansen 2015).Hi-C数据分析表明,基因组可分为两个隔间(A/B隔间),分别与细胞类型特异,并与开放和封闭染色质相关。在450k阵列上的大约170,000个开放海洋探针可以用来估计这些隔间,通过计算盒相关矩阵上的第一个特征向量。可以通过决议,默认设置为100kb。我们不推荐更高的分辨率,因为450k阵列的低分辨率探头设计。例如,要提取12号染色体的隔室,可以使用

ab < -隔间(grset。分位数,=“chr14”,从而向分辨率= 100 1000)

8.2可能有用的功能

8.2.1getSnpBeta

根据设计,该阵列包含65个探针,它们不是用来询问甲基化状态,而是用来询问snp。默认情况下,minfi丢弃这些探测。这个函数getSnpBeta允许用户从对象中提取这些探测的Beta值RGChannelSet.返回对象是一个矩阵,列是样本,行是不同的SNP探针:

snps <- getSnpBeta(RGSet) head(snps)
## 5723646052_R02C02 5723646052_R04C01 5723646052_R05C02 ## rs1019916 0.44141800 0.50740172 0.4854442 ## rs10457834 0.50760422 0.50113785 0.6654530 ## rs1416770 0.06412214 0.04665314 0.1041461 ## rs1941955 0.94617714 0.4917714 0.4990797 ## rs2125751 0.47123623 0.47824959 0.54933273 0.6112521 ## rs22357551 0.47123623 0.47824994 0.3911962 ## 5723646053_R04C02 5723646053_R05C02 5723646053_R06C02 ## rs1019916 0.57308474 0.52069297 0.8387841 ## rs10457834 0.42238892 0.55499709 0.5689888 ## rs1416770 0.918584830.93748229 0.1125396 ## rs1941955 0.90839010 0.93859649 0.7683307 ## rs2125573 0.11020630 0.11503778 0.8059526 ## rs2235751 0.06187767 0.06915974 0.5231096

这些SNP探针用于样本跟踪和样本混合。每个SNP探针的值应该集中在3个不同的值周围,分别对应同型和杂合子。

8.2.2带外探测器

这个函数getOOB应用到一个RGChannelSet获取所谓的带外(OOB)调查。这些是I型探针在“错误的”颜色通道中的测量值。它们被用在preprocessNoob而且preprocessFunnorm函数估计背景噪声。函数返回一个包含两个矩阵的列表,命名为红色的而且入库单

oob < - getOOB (RGSet)

9会话信息

作为本文档的最后一部分,我们将调用该函数sessionInfo,它报告R的版本号和此会话中使用的所有包。保持这样的记录是一种很好的做法,因为它将有助于跟踪发生了什么,以防R脚本因为包的新版本中的函数发生了更改而停止工作。会话信息也应该如此总是包括在任何电子邮件给Bioconductor支持网站以及分析中使用的所有代码。

sessionInfo ()
# # R版本3.2.1修补(2015-07-12 r68650) # #平台:x86_64-apple-darwin14.4.0(64位)# #:下运行OS X 10.10.4(约塞米蒂)# # # #语言环境:# # [1]C / en_US.UTF-8 / en_US.UTF-8 / C / en_US.UTF-8 / en_US。UTF-8 ## ##附加的基本包:## [1]stats4 parallel stats graphics grDevices utils datasets ## [8] methods base ## ##其他附加的包:# # # # [1] sva_3.15.0 [2] genefilter_1.51.0 # # [3] mgcv_1.8-6 # # [4] nlme_3.1 - 121 # # [5] minfiData_0.11.0 # # [6] IlluminaHumanMethylation450kanno.ilmn12.hg19_0.2.1 # # [7] IlluminaHumanMethylation450kmanifest_0.4.0 # # [8] minfi_1.15.11 # # [9] bumphunter_1.9.1 # # [10] locfit_1.5 - 9.1 # # [11] iterators_1.0.7 # # [12] foreach_1.4.2 # # [13] Biostrings_2.37.2 # # [14] XVector_0.9.1 # # [15] SummarizedExperiment_0.3.2 # # [16] GenomicRanges_1.21.16 # # [17] GenomeInfoDb_1.5.8 # # [18] IRanges_2.3.14 # # [19]S4Vectors_0.7.10 ## [20] lattice_0.20-31 ## [21] Biobase_2.29.1 ## [22] BiocGenerics_0.15.3 ## [23] BiocStyle_1.7.4 ## ##通过命名空间加载(并没有附加):# # # # [1] nor1mix_1.2-0 splines_3.2.1 [3] doRNG_1.6 Rsamtools_1.21.13 # # [5] yaml_2.1.13 RSQLite_1.0.0 # # [7] limma_3.25.13 quadprog_1.5-5 # # [9] RGCCA_2.0 digest_0.6.8 # # [11] RColorBrewer_1.1-2 colorspace_1.2-6 # # [13] Matrix_1.2-2 htmltools_0.2.6 # # [15] preprocessCore_1.31.0 plyr_1.8.3 # # [17] GEOquery_2.35.4 siggenes_1.43.0 # # [19] xml_3.98 - 1.3 mixOmics_5.0-4 # # [21] pheatmap_1.0.7 biomaRt_2.25.1 # # [23] zlibbioc_1.15.0 xtable_1.7-4 # # [25] scales_0.2.5 BiocParallel_1.3.34 # # [27]# [39] matrixStats_0.14.2 stringr_1.0.0 ## [41] munsell_0.4.2 rngtools_1.2.4 ## [43] AnnotationDbi_1.31.17 lambda. logger_1.4.1 ## [47] grid_3.2.1 RCurl_1.95-4.7 ## [49] igraph_1.0.1 bitops_1.0-6 ## [51] rmarkdown_0.7 gtable_0.1.2 ## [35] mclust_7.3 -42 evaluate_0.7 ## [35] MASS_7.3-42 tool_0.7 ## [39] registry_0.3 formatR_1.2 ## [39] matrixStats_0.14.2 stringr_1.2 ## [41] munsell_0.4.2 rngtools_1.0.0 ## [41]multtest_2.25.2 ## [55] DBI_0.3.1 reshape_0.8.5 ## [57] illuminaio_0.11.1 GenomicAlignments_1.5.11 ## [59] knitr_1.10.5 rtracklayer_1.29.12 ## [61] futile.options_1.0.0 stringi_0.5-5 ## [63] Rcpp_0.11.6 rgl_0.95.1247

参考文献

Andrew E Jaffe和Rafael A Irizarry. 2014。“在全表观基因组关联研究中,考虑细胞异质性是至关重要的。”基因组生物学15 (2): R31。doi:10.1186 / gb - 2014 - 15 - 2 - r31

Andrew E Jaffe, Peter Murakami, huwajin Lee, Jeffrey T Leek, M Daniele Fallin, Andrew P Feinberg和Rafael A Irizarry. 2012。“在表观遗传流行病学研究中寻找差异甲基化区域。”国际流行病学杂志41(1): 200 - 209。doi:10.1093 / ije / dyr238

E安德烈斯·豪斯曼,威廉·P·阿肯多,德文·C·凯斯特勒,布洛克·C·克里斯滕森,卡门·J·马赛特,希瑟·H·纳尔逊,约翰·K·温克,卡尔·T·凯尔西。2012。“DNA甲基化阵列作为细胞混合物分布的替代测量方法。”BMC生物信息学13(1): 86。doi:10.1186 / 1471-2105-13-86

Fortin, Jean-Philippe, Kasper D. Hansen. 2015。“利用表观遗传数据中的远程相关性重构Hi-C揭示的A/B区。”BioRxiv.doi:10.1101/019000

让-菲利普•福丁,与elie Labbe, Mathieu Lemire, Brent W Zanke, Thomas J Hudson, Elana J Fertig, Celia MT Greenwood, Kasper D Hansen. 2014。“450k甲基化阵列数据的功能正常化改善了大型癌症研究的复制。”基因组生物学15(11): 503。doi:10.1186 / s13059 - 014 - 0503 - 2

Jeffrey T Leek和John D Storey, 2007。“通过替代变量分析在基因表达研究中捕捉异质性。”公共科学图书馆遗传学3(9): 1724 - 35。doi:10.1371 / journal.pgen.0030161

——2008.“多重测试依赖的通用框架。”美国国家科学院院刊105(48): 18718 - 23所示。doi:10.1073 / pnas.0808709105

Jovana Maksimovic, Lavinia Gordon和Alicia Oshlack, 2012。SWAN: Illumina Infinium HumanMethylation450 beadchip的子集分位数数组内归一化。基因组生物学13 (6): R44机身内部。doi:10.1186 / gb - 2012 - 13 - 6 - r44机身内部

Martin J Aryee, Andrew E Jaffe, Hector Corrada Bravo, Christine ladda - acosta, Andrew P Feinberg, Kasper D Hansen,和Rafael A Irizarry. 2014。Minfi:用于Infinium DNA甲基化微阵列分析的灵活而全面的Bioconductor软件包。生物信息学30(10): 1363 - 69。doi:10.1093 /生物信息学/ btu049

Nizar Touleimat和Jorg烤面包》2012。“Infinium人类甲基化450K BeadChip数据处理的完整管道,使用子集分位数归一化进行精确的DNA甲基化估计。”表观基因组学4(3): 325 - 41。doi:10.2217 / epi.12.21

Timothy J Triche, Daniel J Weisenberger, David Van Den Berg, Peter W Laird和Kimberly D Siegmund. 2013。" Illumina Infinium DNA甲基化串珠阵列的低水平处理"核酸的研究41 (7): e90。doi:10.1093 / nar / gkt090