这个小插图描述了包装甲基化感知基因型与R(MAGAR)可从GitHub获得。MAGAR使用Illumina BeadArrays获得的DNA甲基化数据,以及Illumina基因分型微阵列或全基因组测序获得的基因分型数据来计算甲基化数量性状位点(methQTL)。该包提供了多种类型的线性建模策略来计算methQTL单核苷酸多态性(SNPs)与单个CpGs DNA甲基化状态变化之间的相互作用具有统计学意义。在单个cpg上的DNA甲基化值首先汇总到相关块中,并在调用methQTL时使用该相关块的代表(标记- cpg)。
MAGAR可以使用基本的Bioconductor安装功能进行安装。
if(!requireNamespace("BiocManager")){install.packages("BiocManager")} if(!requireNamespace("MAGAR")){BiocManager::install("MAGAR")}
suppressPackageStartupMessages(库(MAGAR))
##在包'oligoClasses'中找不到方法,用于请求:'mean'时加载'crlmm'
MAGAR的功能安装叮铃声用于处理基因分型数据。按照可用的安装说明进行安装在这里并指定包的安装路径qtlSetOption (plink.path =“path_to_plink”)
.
此外,根据分析的类型,需要更多的外部软件工具()。更具体地说,如果您想执行imputationbgzip而且tabix从htslib包装是需要的,以及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/ |
MAGAR使用两种类型的数据作为输入:使用Illumina Infinium BeadArrays或亚硫酸氢盐测序获得的DNA甲基化数据,以及使用基因分型微阵列或全基因组测序获得的基因分型数据。
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装饰图案.最重要的是,需要为的导入和预处理模块指定分析选项RnBeads.MAGAR提供默认设置,该设置可在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)
MAGAR支持已被处理的数据叮铃声这可以用二进制的形式来表示请全部,.bim而且.fam文件,每分钟而且. map,作为变量调用文件(.vcf),或以剂量格式(到这里。).为了进一步处理,我们使用命令行工具叮铃声,这是一起装运MAGAR.但是,此安装仅对Linux系统有效。Windows和MacOS用户请安装叮铃声工具从在这里并使用选项指定它plink.path
.前面指定的样本标识符还需要匹配基因型调用的样本id。要导入PLINK数据,最好存储.bim,请全部,.fam文件在一个文件夹(这里plink_data
),并指定该包的文件夹位置。
基因族群。Dir <- "plink_data" rnb. txt。Set <- load.rnb.set("rnb_set_dir") s.a no <- "sample_annotation.csv" data. Set <- "rnb_set_dir")loc <- list(idat.dir=rnb.set,geno.dir=plink.dir) qtlSetOption(geno.data. dir=rnb.set)Type ="plink", meth.data. Type ="rn .set")qtl <- doImport(data.location=data. location)loc s.anno =。伊斯兰教纪元,s.id。坳= " SampleID " out.folder = getwd ())
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
由于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”,归责。人口=“欧元”)
的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对引用不匹配非常敏感。
虽然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调用过程的两个步骤。
由于相邻的CpG通常高度相关,因此单独使用每个CpG作为潜在的methQTL候选对象会导致许多冗余结果。因此,我们的目标是近似DNA甲基化单倍型通过确定附近高度相关的cpg。这个过程本身分为六个步骤,并且分别对每个染色体进行:
correlation.type
)cluster.cor.threshold
)standard.deviation.gauss
).标准差值越高,对远端cpg的惩罚越低,因此聚类会变大。absolute.distance.cutoff
这将根据相邻cpg之间的相关结构返回一个聚类,稍后我们将使用该结构调用methQTL。请注意,我们使用模拟实验来单独确定每种数据类型的参数。它们将自动为所使用的数据集加载,并且是:
cluster.cor.threshold
= 0.2,standard.deviation.gauss
= 5000,absolute.distance.cutoff
= 500000cluster.cor.threshold
= 0.2,standard.deviation.gauss
= 3000,absolute.distance.cutoff
= 500000cluster.cor.threshold
= 0.2,standard.deviation.gauss
= 250,absolute.distance.cutoff
= 500000从相关块列表中,MAGAR计算methQTL与同一染色体上所有snp的相互作用。这个过程分为三个步骤:
representative.cpg.computation
(默认值:row.medians).absolute.distance.cutoff
(默认值:1,000,000)远离代表性CpGlinear.model.type
(默认值:classical.linear).另外,fastQTL可以设置为meth.qtl.type
.这将告诉包使用fastQTL软件(Ongen et al. 2016).的meth.qtl.type
说明了如何定义methQTL交互,并提供了三个选项fastQTL:
在methQTL调用过程中,可以使用该选项指定潜在的协变量sel.covariates.我们建议至少包括年龄而且性作为协变量,因为它们对DNA甲基化模式有很强的影响。
上面的过程将创建一个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
.
为了可视化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)
这个包提供了一堆解释函数来描述检测到的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)
上面讨论的大多数函数都支持单一的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])
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.dir ,data.dir ,data.files ,GS.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 | 公认的值是oneVSall ,allVSall ,twoVSall ,或fastQTL . |
linear.model.type |
确定如何为调用methqtl定义线性模型 | 公认的值是categorical.anova ,classical.linear ,或fastQTL |
representative.cpg.computation |
确定与SNP基因型相关的每个相关块如何识别具有代表性的CpG | 公认的值是row.medians ,mean.center ,或best.all |
n.prin.comp |
数值,表示在识别methqtl时将有多少个pc用作协变量 | |
一般选择 | ||
hdf5dump |
标志,指示大型矩阵是否存储在磁盘上而不是主存中HDF5Array 包 |
考虑更多的选择HDF5Array 如setHDF5DumpDir 而且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 |
标记,表示是否从基因型数据计算等位基因频率。 |
MAGAR可以在使用Sun Grid Engine (SGE)技术设置的高性能计算集群上自动分配作业。你可以通过这个选项cluster.submit
来doMethQTL
从而激活集群提交。注意,您还必须指定可执行文件的路径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.