1简介

这个小插图描述了包装甲基化感知基因型与RMAGAR)可从GitHub获得。MAGAR使用Illumina BeadArrays获得的DNA甲基化数据,以及Illumina基因分型微阵列或全基因组测序获得的基因分型数据来计算甲基化数量性状位点(methQTL)。该包提供了多种类型的线性建模策略来计算methQTL单核苷酸多态性(SNPs)与单个CpGs DNA甲基化状态变化之间的相互作用具有统计学意义。在单个cpg上的DNA甲基化值首先汇总到相关块中,并在调用methQTL时使用该相关块的代表(标记- cpg)。

2安装

MAGAR可以使用基本的Bioconductor安装功能进行安装。

if(!requireNamespace("BiocManager")){install.packages("BiocManager")} if(!requireNamespace("MAGAR")){BiocManager::install("MAGAR")}
suppressPackageStartupMessages(库(MAGAR))
##在包'oligoClasses'中找不到方法,用于请求:'mean'时加载'crlmm'

2.1所需的外部软件工具

MAGAR的功能安装叮铃声用于处理基因分型数据。按照可用的安装说明进行安装在这里并指定包的安装路径qtlSetOption (plink.path =“path_to_plink”)

此外,根据分析的类型,需要更多的外部软件工具()。更具体地说,如果您想执行imputationbgzip而且tabixhtslib包装是需要的,以及vcftools用于分类VCF文件。最后,如果要通过fastQTL时,需要安装的软件工具和指定的可执行文件的位置MAGAR使用qtlSetOption函数的值bgzip.path,tabix.path,vcftools.path,fast.qtl.path

工具 描述 所需 URL
叮铃声 用于处理基因分型数据的工具箱 进口,以二进制PLINK格式或VCF文件方式处理基因分型数据 http://zzz.bwh.harvard.edu/plink/
bgzip 压缩文件的工具 归责,格式化数据上传到密歇根Imputation服务器 http://www.htslib.org/download/
tabix 索引排序文件的工具 归责,格式化数据上传到密歇根Imputation服务器 http://www.htslib.org/download/
vcftools 处理VCF文件的工具 归责,格式化数据上传到密歇根Imputation服务器 https://vcftools.github.io/downloads.html
fastQTL 从基因分型和DNA甲基化数据确定eQTLs (methQTLs)的工具 methQTL打电话,与默认线性模型相比,可选的methQTL调用方法 http://fastqtl.sourceforge.net/

3.输入数据

MAGAR使用两种类型的数据作为输入:使用Illumina Infinium BeadArrays或亚硫酸氢盐测序获得的DNA甲基化数据,以及使用基因分型微阵列或全基因组测序获得的基因分型数据。

3.1DNA甲基化数据(微阵列)

MAGAR应用广泛RnBeadsDNA甲基化数据导入软件包。因此,MAGAR中提供的各种输入选项RnBeads,包括直接从基因表达Omnibus (GEO), IDAT和BED文件下载。有关更多选项,请参阅RnBeads装饰图案和文档。除了原始甲基化数据外,还需要提供一份说明待分析样品的样品注释表。该表格包含每个示例的一行,如下所示:

SampleID,年龄,性别,条形码Sample_1,14,f,209054857842_R01C01 Sample_2,42,f,209054857842_R02C01 Sample_3,45,m,209054857842_R03C01

有关导入过程的详细信息,请参阅RnBeads装饰图案.最重要的是,需要为的导入和预处理模块指定分析选项RnBeadsMAGAR提供默认设置,该设置可在extdata / rnbeads_options.xml.你可以使用这个文件作为你自己设置的模板,然后将它指定给包:

opts <- rnb.xml2options(system.file("extdata","rnbeads_options.xml",package="MAGAR"))Column ="geo_accession", import. dat.platform="probes450") xml。fi <- file.path(getwd(),"rnbeads_options.xml") cat(rnb.options2xml(),file=xml.fi) qtlSetOption(rnbeads. path)Options = xml.fi)

3.2基因分型数据

3.2.2IDAT文件

MAGAR还支持原始IDAT文件并使用CRLMMR-package,配合PLINK进行基因型调用和数据导入。方法中描述的格式的单个示例注释表是该包的必要条件DNA甲基化数据部分。除了上面指定的列名之外,还有一个名为GenoSentrixPosition必须添加,它指定IDAT文件id。

SampleID,年龄,性别,条形码,GenoSentrixPosition Sample_1,14,f,209054857842_R01C01,9701756058_R05C01 Sample_2,42,f,209054857842_R02C01,9701756058_R07C01 Sample_3,45,m,209054857842_R03C01,9742011016_R04C01

3.2.3归责

由于Illumina SNP BeadArray数据通常在进一步分析之前进行估算,因此该包通过密歇根Imputation服务器.使用下面描述的选项设置,包将自动向服务器提交估算作业并处理生成的文件。为了能够在服务器上执行计算,需要一个帐户。帐户创建后,必须在用户设置中请求API令牌,并将其指定为MAGAR使用选项imputation.user.token.在输入过程中,包会暂停一段时间,等待任务完成。作业完成后,该包将提示输入通过电子邮件发送到用户帐户的密码。植入过程必须根据染色体进行拆分,这就是为什么会向该账户发送多封电子邮件,植入过程可能需要几天时间。但是,在注入后,注入的数据将作为PLINK文件可用,因此注入只需执行一次。为了对数据进行预处理以便上传到imputation服务器,包需要bgzip而且tabix工具htslib包中。还请参阅在Michigan imputation Server上配置imputation作业的其他选项文档

qtlSetOption (impute.geno。data=TRUE, impuation .reference.panel="apps@hrc-r1.1", impuation .phasing。方法= " shapeit”,归责。人口=“欧元”)

3.3执行数据导入

doImport函数需要到各自的基因分型和DNA甲基化数据的路径,以及前面讨论的样本注释表。在这篇短文中,我们将描述DNA甲基化数据的导入IDAT格式和基因分型数据叮铃声文件。首先,您必须指定对应的路径IDAT而且叮铃声文件。此外,您必须在样本注释页中指定样本标识符列,以确定基因分型和DNA甲基化数据中的样本。对于较大的文件,我们建议激活将大型矩阵存储在磁盘上而不是主存中的选项(hdf5dump).

对于估算数据,不对基因分型数据进行进一步处理,剂量值按原样使用:

idat.dir<- "idat_dir" geno.dir <- "geno_dir" anno.sheet <- "sample_annotation.tsv" qtlSetOption(hdf5dump=TRUE) imp.data <- doImport(data.location = c(idat.dir=idat.dir,geno.dir=geno.dir), s.anno = anno.sheet, s.id.col = "ID", tab.sep = "\t", out.folder = getwd())

请注意recode.allele.frequencies选项指定,是否根据所分析的队列,根据可用样本中的等位基因频率重新编码SNP参考和替代等位基因。或者,dbSNP本地版本的路径(Sherry et al. 2001)可透过db.snp.ref,并自动从数据库中解析引用/替代等位基因信息。如果要执行imputation,这一点尤其重要,因为Michigan imputation Server对引用不匹配非常敏感。

4methQTL打电话

虽然MAGAR从概念上将methQTL调用分为两个步骤((i)计算相关块,(ii)每个相关块调用methQTL),只需要一个函数调用。函数只需要输入methQTLInput对象,但进一步的选项,如协变量和p值截断可以直接指定为函数参数,或使用qtlSetOption ?

imp.data <- loadMethQTLInput(system.file("extdata","reduced_methQTL",package="MAGAR")) qtlSetOption(standard.deviation.gauss=100, cluster.cor.threshold=0.75) meth.qtl.res <- doMethQTL(imp.data,default.options=FALSE,p.v v .cutoff=0.05)
## 2022-04-26 17:02:18 1.3 STATUS STARTED Imputation procedure knn ## ## 2022-04-26 17:02:18 1.3 STATUS STARTED计算methQTL染色体chr18 ## 2022-04-26 17:02:18 1.3 STATUS STARTED计算关联块## 2022-04-26 17:02:18 1.3 STATUS STARTED计算关联矩阵## 2022-04-26 17:02:18 1.3 STATUS COMPLETED计算关联矩阵#### 2022-04-26 17:02:19 1.3 STATUS STARTED计算两两之间的距离## 2022-04-26 17:02:20 1.3 STATUS COMPLETED计算权重距离## 2022-04-26 17:02:22 1.3 STATUS COMPLETED计算图形## 2022-04-26 17:02:22 1.3 STATUS STARTED计算集群## 2022-04-26 17:02:23 1.3 STATUS COMPLETED计算集群##2022-04-26 17:02:23 1.3 STATUS COMPLETED计算相关块
##保存7 x 5的图像
## 2202-04-26 17:02:23 1.3 STATUS STARTED计算每个相关块的methQTL ## 2202-04-26 17:02:23 1.3 INFO使用1核## 2202-04-26 17:02:23 1.3 STATUS COMPLETED设置多核## 2202-04-26 17:02:41 1.6 STATUS COMPLETED计算每个相关块的methQTL ## 2202-04-26 17:02:41 1.6 STATUS COMPLETED计算染色体chr18的methQTL ## 2202-04-26 17:02:42 1.6 STATUS COMPLETED计算methQTL

现在,我们将更详细地介绍methQTL调用过程的两个步骤。

4.1计算CpG相关块

由于相邻的CpG通常高度相关,因此单独使用每个CpG作为潜在的methQTL候选对象会导致许多冗余结果。因此,我们的目标是近似DNA甲基化单倍型通过确定附近高度相关的cpg。这个过程本身分为六个步骤,并且分别对每个染色体进行:

  1. 计算所有cpg之间的(Pearson)相关矩阵(进一步的相关类型可在选项中获得)correlation.type
  2. 从相关矩阵构建距离矩阵
  3. 丢弃相关性低于给定阈值的所有交互(选项:cluster.cor.threshold
  4. 根据两个cpg之间的基因组距离加高斯(选项:standard.deviation.gauss).标准差值越高,对远端cpg的惩罚越低,因此聚类会变大。
  5. 放弃所有超过该选项的交互absolute.distance.cutoff
  6. 计算由距离矩阵引起的无向加权图上的鲁汶聚类

这将根据相邻cpg之间的相关结构返回一个聚类,稍后我们将使用该结构调用methQTL。请注意,我们使用模拟实验来单独确定每种数据类型的参数。它们将自动为所使用的数据集加载,并且是:

  • 450 k:cluster.cor.threshold= 0.2,standard.deviation.gauss= 5000,absolute.distance.cutoff= 500000
  • 史诗:cluster.cor.threshold= 0.2,standard.deviation.gauss= 3000,absolute.distance.cutoff= 500000
  • rrb / WGBS:cluster.cor.threshold= 0.2,standard.deviation.gauss= 250,absolute.distance.cutoff= 500000

4.2每个相关块调用methQTL

从相关块列表中,MAGAR计算methQTL与同一染色体上所有snp的相互作用。这个过程分为三个步骤:

  1. 根据该选项指定,计算每个相关块的代表CpG(标签-CpG)representative.cpg.computation(默认值:row.medians).
  2. 丢弃所有大于的snpabsolute.distance.cutoff(默认值:1,000,000)远离代表性CpG
  3. 通过使用线性模型调用methQTL。有多个可用的methQTL调用选项,可以通过该选项进行选择linear.model.type(默认值:classical.linear).另外,fastQTL可以设置为meth.qtl.type.这将告诉包使用fastQTL软件(Ongen et al. 2016)

meth.qtl.type说明了如何定义methQTL交互,并提供了三个选项fastQTL

  1. oneVSall:一个CpG只能受一个SNP的影响。我们选择p值最小的那个。
  2. twoVSall:一个CpG既可以受到两个独立snp的积极影响,也可以受到消极影响。该包将输出那些满足p值截断的值。
  3. allVSall:对于每个CpG,所有显示p值低于p值截断值的snp将被返回。

在methQTL调用过程中,可以使用该选项指定潜在的协变量sel.covariates.我们建议至少包括年龄而且作为协变量,因为它们对DNA甲基化模式有很强的影响。

5下游分析与解读

5.1如何使用methQTLResult

上面的过程将创建一个class对象methQTLResult,其中包含在前一步中调用的methQTL。要获得包含所有methQTL的表,需要从对象中提取信息。在下面的大多数函数调用中,都有选项类型* ' SNP ':表征影响任何DNA甲基化状态的SNP * ' CpG ':表征受任何SNP基因型* ' cor影响的每个相关块的代表性CpG。block ':描述所有CpG,这些CpG是相关块的一部分,其代表CpG受任何基因型的影响

此外,您可以获得涉及methQTL相互作用的cpg和snp的基因组注释:

结果。table <- getResult(meth.qtl.res) head(result.table)
庵野。meth <- getAnno(meth.qtl.res,"meth") head(no.meth)
庵野。geno <- getAnno(meth.qtl.res,"geno") head(no.geno)

有关输出的更详细信息,请参见函数getResultsGWASMap

5.2情节

为了可视化methQTL,MAGAR提供一些绘图功能。大多数函数返回类型的对象ggplot,以便日后储存或浏览。可以在一个图中同时显示所有的methQTL,也可以显示特定的methQTL:

结果。table <- result.table[order(result.table$P.value, deleting =FALSE),] qtlPlotSNPCpGInteraction(imp.data,result.table$CpG[1],result.table$SNP[1])
## ' geom_smooth() '使用公式'y ~ x'

qtlDistanceScatterplot (meth.qtl.res)

5.3解释功能

这个包提供了一堆解释函数来描述检测到的methqtl。包括LOLA富集分析(Sheffield and Bock 2016)qtlLOLAEnrichment),基于ensemble regulatory Build定义的假定调控元素的基因组注释丰富(Zerbino et al. 2015)qtlAnnotationEnrichment)、snp中不同碱基取代的富集分析(qtlBaseSubstitutionEnrichment),或TFBS motif富集使用TFBSTools.对提供的方法中可用的methqtl进行充实比较methQTLResult(对于单个输入),或到重叠qtl的列表methQTLResult.浓缩的背景被定义为所有被用作methQTL调用输入的snp / cpg。

res <- qtlbasesreplactionenrichment (meth.qtl.res)

5.4methQTL结果列表

上面讨论的大多数函数都支持单一的methQTLResult作为输入,或此类对象的列表。在指定列表的情况下,函数通常会重叠找到的methQTL,并将其与用于调用methQTL的所有snp / cpg进行比较。此外,还有一些函数特别适用于methQTLResult对象和执行重叠的对象,或者确定特定于数据集的methqtl。

meth.qtl.res。2<- loadMethQTLResult(system.file("extdata","MethQTLResult_chr18",package="MAGAR")) meth.qtl.list <- list(First=meth.qtl.res,Second=meth.qtl.res.2) qtlVennPlot(meth.qtl.list,out.folder=getwd())
##加载所需的命名空间:VennDiagram
qtlUpsetPlot (meth.qtl。List,type = "cor.block")
## 2022-04-26 17:02:44 1.7 STATUS STARTED获取对象1的相关块为对象1 ## 17:02:44 1.7 STATUS STARTED获取对象2的相关块为对象2 ## 2022-04-26 17:02:44 1.7 STATUS COMPLETED获取对象2的相关块为对象2 ##为对象1获取关联块的STATUS COMPLETED为对象1获取关联块的STATUS STARTED为对象2获取关联块的STATUS COMPLETED为对象2获取关联块的STATUS COMPLETED重叠

spec.first <- getSpecificQTL(meth.qtl.list$First,meth.qtl.list[-1])

6高级配置

6.1MAGAR选项

MAGAR是一个灵活的软件包,允许多种类型的methQTL分析。在这里,我们将在一个表中展示描述分析的不同选项,并讨论选择非默认选项时可能出现的问题。大多数选项都有合理的默认值,这些默认值是通过模拟实验确定的。有关详细信息,请参阅的文档qtlSetOption

选项 描述 请注意
外部工具
vcftools.path 用于处理用于基因分型数据的VCF文件的VCFtools的安装路径
plink.path 用于处理基因分型数据的PLINK可执行版本的路径
fast.qtl.path 用于调用methqtl的FastQTL可执行版本的路径 只需要,当meth.qtl.type = ' fastQTL '
bgzip.path HTSlib包中用于压缩基因组数据的bgzip可执行版本的路径
tabix.path HTSlib包中用于索引基因组数据的tabic可执行版本的路径
外部工具配置
rnbeads.options 指定通过RnBeads进行甲基化数据处理的XML文件的路径
rnbeads.report 到现有目录的路径,RnBeads报告将存储在其中
rnbeads.qc RnBeads的QC模块是否要执行的标志
hardy.weinberg.p 在PLINK中用于过滤snp的Hardy-Weinberg测试p值截断
minor.allele.frequency 在PLINK中,一个SNP最少需要的次要等位基因频率
missing.values.samples PLINK所考虑的样本中每个SNP缺失基因型的最大数量
plink.geno PLINK中样品的最低基因分型率
n.permutations 快速qtl中用于校正多次测试的排列数
归责的选项
impute.geno.data 指示是否执行基因分型数据的标志
imputation.user.token 密歇根Imputation服务器生成的用户令牌,允许与服务器API通信 需要在https://imputationserver.sph.umich.edu
imputation.reference.panel 用于计算的参考面板 看到https://imputationserver.readthedocs.io/en/latest/api/欲知详情
imputation.phasing.method 相位法用于imputation 看到https://imputationserver.readthedocs.io/en/latest/api/欲知详情
imputation.population 用于归算的参考面板的总体 看到https://imputationserver.readthedocs.io/en/latest/api/欲知详情
导入选项
meth.data.type 将要处理的甲基化数据的类型 公认的值是idat.dirdata.dirdata.filesGS.report地理,或rnb.set
geno.data.type 将要处理的基因分型数据的类型 公认的值是idat叮铃声
关联块调用
compute.cor.blocks 标志,指示是否要从甲基化数据中识别相关块
correlation.type 用于计算相关块的相关类型 公认的值是皮尔森斯皮尔曼,肯德尔
cluster.cor.threshold 导致相关矩阵中项为零的相关阈值
standard.deviation.gauss 高斯分布的标准偏差,用于根据基因组距离加权相似度
absolute.distance.cutoff 基因组距离的截断点。距离越远,相似度矩阵的值就越为零
max.cpgs 用于计算相关块的最大cpg数 取决于可用的主存
MethQTL打电话
meth.qtl.type 这个选项决定了如何定义一个methQTL 公认的值是oneVSallallVSalltwoVSall,或fastQTL
linear.model.type 确定如何为调用methqtl定义线性模型 公认的值是categorical.anovaclassical.linear,或fastQTL
representative.cpg.computation 确定与SNP基因型相关的每个相关块如何识别具有代表性的CpG 公认的值是row.mediansmean.center,或best.all
n.prin.comp 数值,表示在识别methqtl时将有多少个pc用作协变量
一般选择
hdf5dump 标志,指示大型矩阵是否存储在磁盘上而不是主存中HDF5Array 考虑更多的选择HDF5ArraysetHDF5DumpDir而且setHDF5DumpFile
db.snp.ref dbSNP下载版本的路径。使用dbSNP,可以提取SNP标识符,并从甲基化数据中删除带注释的SNP dbSNP应该是vcf.gz格式,可以从https://ftp.ncbi.nih.gov/snp/organisms/human_9606_b150_GRCh37p13/VCF/
cluster.config 高性能计算集群配置。目前支持SLURM和SGE。
cluster.architecture 指示所使用的高性能计算体系结构的字符串 目前支持的是“slurm”和“sge”
recode.allele.frequencies 标记,表示是否从基因型数据计算等位基因频率。

6.2雇佣MAGAR科学计算集群

MAGAR可以在使用Sun Grid Engine (SGE)技术设置的高性能计算集群上自动分配作业。你可以通过这个选项cluster.submitdoMethQTL从而激活集群提交。注意,您还必须指定可执行文件的路径Rscript并可能使用选项设置指定资源需求cluster.config

qtlSetOption(集群。qtlSetOption(rscript. config = c(h_vmem="60G",mem_free="20G"))path = "/usr/bin/Rscript") meth.qtl.res <- doMethQTL(meth. qtl)QTL = imp.data, cluster。提交= T)

参考文献

Ongen, Halit, Alfonso Buil, Andrew Anand Brown, Emmanouil T. Dermitzakis, Olivier Delaneau, 2016。“数千种分子表型的快速高效QTL作图器。”生物信息学32(10): 1479-85。https://doi.org/10.1093/bioinformatics/btv722

谢菲尔德,内森·C,克里斯托弗·博克,2016。“LOLA: R和Bioconductor中基因组区域集和调控元件的富集分析。”生物信息学32(4): 587-89。https://doi.org/10.1093/bioinformatics/btv612

S. T.雪莉,M. h .沃德,M.霍洛多夫,J.贝克,L.潘,E.M.斯米吉尔斯基和K.西罗特金,2001。“dbSNP: NCBI基因变异数据库。”核酸研究29(1): 308-11。https://doi.org/10.1093/nar/29.1.308

Daniel R. Zerbino, Steven P. Wilder, Nathan Johnson, Thomas Juettemann, Paul R. Flicek, 2015。“整体监管架构。”基因组生物学16(1): 1 - 8。https://doi.org/10.1186/s13059-015-0621-5