这个小插图描述了如何使用《创世纪》软件包在阵列(SNP)数据上运行遗传关联测试。《创世纪》使用混合模型进行遗传关联检验,因为PC-AiR pc可以作为固定效应协变量来调整群体分层,并且由于样本之间的遗传相似性,从pc - related估计的亲属矩阵(或遗传关系矩阵)可以用于解释表型相关。
的fitNullModel
功能《创世纪》包从标准中读取样例数据data.frame
类对象或ScanAnnotationDataFrame
类创建的类对象GWASTools包中。该对象必须包含混合模型分析中所有样本的所有结果和协变量数据。此外,该对象必须包含一个名为“scanID”的变量,该变量包含分析中每个样本的唯一标识符。而一个标准data.frame
可以使用,我们建议使用ScanAnnotationDataFrame
对象,因为它可以与基因型数据配对(见下文),以确保样本表型和基因型数据匹配。通过使用GWASTools,一个ScanAnnotationDataFrame
类对象可以轻松地从data.frame
类对象。示例R代码,用于创建ScanAnnotationDataFrame
对象如下所示。更多的细节可以在GWASTools包参考手册。
# pheno是表现型值的向量# make a data.frame mydat <- data.frame(scanID = mypcair$sample. frame)Id, pc1 = mypcair$vectors[,1], pheno = pheno) head(mydat)
## scanID pc1 pheno ## NA19919 NA19919 - 0.1251511091 0.1917327 ## NA19916 NA19916 -0.13151738 -0.5687960 ## NA19835 NA19835 -0.08832100 0.8734804 ## NA20282 NA20282 -0.08617667 0.877452 ## NA19703 NA19703 -0.11969449 1.6116791 ## NA19902 NA19902 -0.11458896 0.6663577
# ScanAnnotationDataFrame scanAnnot <- ScanAnnotationDataFrame(mydat) scanAnnot
## ScanAnnotationDataFrame类的对象:NA19919 NA19916…NA19764 (173 total) ## varLabels: scanID pc1 pheno ## varMetadata: labelDescription
的assocTestSingle
功能《创世纪》包读取基因型数据GenotypeData
类创建的类对象GWASTools包中。通过使用GWASTools,一个GenotypeData
类对象可以很容易地从:
示例R代码,用于创建GenotypeData
对象如下所示。更多的细节可以在GWASTools包参考手册。
geno <- matrixgentypeeader(基因型=基因型,snpID = snpID,染色体=染色体,位置=位置,scanID = scanID)
基因型
是编码为0 / 1 / 2的基因型值矩阵,其中行表示snp,列表示样本snpID
是唯一SNP id的整数向量染色体
是指定每个SNP染色体的整数向量吗位置
是一个指定每个SNP位置的整数向量吗scanID
是一个独特的个体id的向量geno <- gdsgentypereader (filename = " gentype .gds") gendata <- geno
文件名
是GDS对象的文件路径吗的SNPRelate包提供了snpgdsBED2GDS
函数将二进制PLINK文件转换为GDS文件。
snpgdsBED2GDS(床上。fn = "基因型。床”,荡妇。fn = "基因型。荡妇”,家人。fn = "基因型。fam公司”。gdsfn = " genotype.gds”)
bed.fn
是PLINK .bed文件的路径吗bim.fn
是PLINK .bim文件的路径吗fam.fn
是PLINK .fam文件的路径吗out.gdsfn
是输出GDS文件的文件路径吗一旦PLINK文件被转换为GDS文件,那么GenotypeData
对象可以按上面所述创建。
的关联测试《创世纪》包中,我们分析了来自加利福尼亚州洛杉矶的墨西哥裔美国人(MXL)和美国西南部的非裔美国人(ASW)人群样本的SNP数据。墨西哥裔美国人和非洲裔美国人有着不同的祖先背景,在这些数据中有家族亲属。173个个体的20K常染色体snp子集的基因型数据作为GDS文件提供。
#读取GDS数据gdsfile <- system。文件(“extdata”、“HapMap_ASW_MXL_geno。HapMap_geno <- gdsgentypereader (filename = gdsfile)
#创建一个基因型数据类对象与成对的ScanAnnotationDataFrame HapMap_genoData <-基因型数据(HapMap_geno, scanAnnot = scanAnnot) HapMap_genoData
##类GenotypeData的对象## | data: ## File: /tmp/RtmphfjICZ/Rinst31bace58b36aad/GENESIS/extdata/HapMap_ASW_MXL_geno。gds (901.8K) ## +[] * ## |- +样本。id {Int32,factor 173 ZIP(40.9%), 283B} * ## |——+ snp. id {Int32,factor 173 ZIP(40.9%), 283B}id {Int32 20000 ZIP(34.6%), 27.1K} ## |——+ snp。位置{ Int32 20000 ZIP(34.6%), 27.1K } ## |--+ snp.chromosome { Int32 20000 ZIP(0.13%), 103B } ## \--+ genotype { Bit2 20000x173, 844.7K } * ## | SNP Annotation: ## NULL ## | Scan Annotation: ## An object of class 'ScanAnnotationDataFrame' ## scans: NA19919 NA19916 ... NA19764 (173 total) ## varLabels: scanID pc1 pheno ## varMetadata: labelDescription
遗传关联测试的混合模型通常包括一个遗传关系矩阵(GRM),以解释样本个体之间的遗传相似性。如果我们使用PC-Relate的亲属关系系数估计来构建这个GRM,那么函数pcrelateToMatrix
应用于提供合适格式的矩阵fitNullModel
.
# mypcrel包含先前pc关联分析的亲属关系估计myGRM <- pcrelateToMatrix(mypcrel) myGRM[1:5,1:5]
## NA19625 NA19649 NA19650 NA19651 NA19652 ## NA19625 0.9802757412 -0.001187704 -0.001460617 -0.008141279 0.0003310268 ## NA19649 -0.0011877043 1.040838166 0.569730537 0.004897574 -0.0128561993 ## NA19650 -0.0014606167 0.569730537 1.053822976 0.006999645 0.014637741 ## NA19651 -0.0081412786 0.004897574 0.006999645 1.01024569 0.0093895282 ## NA19652 0.0003310268 -0.012856199 0.014637724 0.009389528 0.9818343788
注意,这个矩阵的行名和列名都与扫描注释数据中使用的scanid相同。
进行基因关联测试有两个步骤《创世纪》.首先,对空模型(即没有SNP基因型项的模型)进行拟合fitNullModel
函数。其次,将空模型拟合的输出与基因型数据结合使用,以快速运行snp -表型关联测试assocTestSingle
函数。将这两个步骤分成两个函数调用具有计算上的优势;空模型只需要拟合一次,SNP关联测试可以通过染色体或其他一些划分来并行化,以加快分析(详见下文)。
关联测试的第一步《创世纪》是在每个SNP都没有影响的零假设下拟合混合模型。这个零模型包含所有的协变量,包括祖先代表pc,以及任何随机效应,如由于遗传亲缘性而产生的多基因效应,但它不包括任何SNP基因型术语作为固定效应。
使用fitNullModel
函数,零模型中的随机效应通过协方差结构来指定。这允许使用亲缘关系矩阵或遗传关系矩阵(GRM)包含多基因随机效应。
定量表型分析时应采用线性混合模型(LMM)。下面的示例R代码适合基本的空混合模型。
# fit null混合模型nullmod <- fitNullModel(scanAnnot, result = "pheno", covars = "pc1", cov. null <- fitNullModel)mat = myGRM, family = "高斯")
# [1] 0.4545551 0.4545551 -240.5810010 1.0922746 ## [1] 0.07965827 0.76971759 -237.50257078 1.07504652 ## [1] 0.1002053 0.8089861 -237.4969271 1.0050101 ## [1] 0.1010074 0.8127311 -237.4969254 1.0000249
ScanAnnotationDataFrame
或data.frame
对象,该对象包含样例数据结果
中的结果变量的名称scanAnnot
柯伐合金
中的协变量的名称scanAnnot
cov.mat
指定模型中包含的随机效应的协方差结构家庭
定量表型应该是高斯型,指定线性混合模型采用平均信息REML (AIREML)方法估计随机效应的方差分量。当verbose = TRUE
,每次迭代中的方差分量估计、对数似然和剩余平方和被打印到R控制台(如上所示)。在这个例子中,σ^ 2 _a
随机效应的方差分量是否在cov.mat
,σ^ 2 _e
为残差方差分量。
通过设置,该模型可以拟合多个固定效应协变量柯伐合金
等于向量的协变量名。例如,如果我们想把变量“pc1”,“pc2”,“sex”和“age”都作为模型中的协变量:
nullmod <- fitNullModel(scanAnnot, result = "pheno", covars = c("pc1","pc2","sex","age"), cov。mat = myGRM, family = "高斯")
该模型还能拟合多个随机效应。这是通过设置来完成的cov.mat
等于一个矩阵的列表。例如,如果我们想包括一个由矩阵“myGRM”给出的具有协方差结构的多基因随机效应和一个由矩阵“H”指定的具有协方差结构的户随机效应:
nullmod <- fitNullModel(scanAnnot, result = "pheno", covars = "pc1", cov。mat = list("GRM" = myGRM, "House" = H), family = "高斯")
矩阵的名称cov.mat
确定方差分量参数的名称。因此,在本例中,打印到R控制台的输出将包括σ^ 2 _grm
对于由“myGRM”指定的随机效应,σ^ 2 _house
对于由“H”指定的随机效应,和σ^ 2 _e
残差方差分量。
注意:用于指定混合模型中随机效应的协方差结构的每个矩阵的行和列名称必须是分析中每个样本的唯一scanid。
对于所有的观测结果,LMMs通常都适合于恒定的(齐次的)残差方差假设。然而,对于某些结果,可能有证据表明不同的观察组有不同的残差方差,在这种情况下,同方差的假设就被违背了。group.var
可以用一些分组变量来拟合独立的(异构的)残差方差分量。例如,如果我们有一个分类变量“研究”scanAnnot
,那么我们可以对“study”的每个唯一值估计不同的残差方差分量,使用以下代码:
nullmod <- fitNullModel(scanAnnot, result = "pheno", covars = "pc1", cov。mat = myGRM, family = "高斯",组。var = "研究")
在这个例子中,残差方差分量σ^ 2 _e
用特定群体的残差方差分量代替σ^ 2 _study1
,σ^ 2 _study2
,其中" study1 ", " study2 ",…是" study "变量的唯一值。
理想情况下,广义线性混合模型(GLMM)适合二元表型;然而,拟合GLMM比拟合LMM需要更多的计算量。为了提供一种计算效率高的方法来拟合这样的模型,fitNullModel
使用惩罚准似然(PQL)近似GLMM (Breslow和Clayton)。本程序的实现在《创世纪》与GMMAT (Chen et al.)相同,更多的细节可以在该手稿中找到。如果我们的结果变量“pheno”是二进制的,那么同样的R代码可以用来拟合零模型,但是家庭=二项
.
nullmod <- fitNullModel(scanAnnot, result = "pheno", covars = "pc1", cov。mat = myGRM, family = "binomial")
多重固定效应协变量和多重随机效应可以用与定量表型相同的方法为二元表型指定。group.var
在这里不适用。
第二步是关联测试《创世纪》是使用拟合的零模型来检验GenotypeData
对象,用于与指定的结果变量关联。这是用assocTestSingle
函数。的使用assocTestSingle
用于运行与定量或二元表型的关联测试是相同的。
才能对一个GenotypeData
对象,我们首先决定一次要读取多少个snp。我们通过创建一个GenotypeBlockIterator
对象,该对象定义snp块。默认设置是在每个块中读取10,000个snp,但这可能会随着snpBlock
论点。
-基因块迭代器(hapmap_基因数据,snpBlock=5000)
下面的示例R代码使用我们使用的空模型运行关联分析fitNullModel
在前一节中。
assocTestSingle(基因迭代器,null。模型= null, BPPARAM = BiocParallel::SerialParam())
genoData
是一个GenotypeData
类对象null.model
的输出fitNullModel
缺省情况下,该函数将对所有snp进行关联测试genoData
对象。然而,由于计算的原因,并行化这一步骤可能是可行的,通过染色体或其他预先选择的分组来划分snp。如果我们只想测试预先指定的一组snp,可以通过将snpID值的向量传递给snpInclude
参数时创建迭代器。
# mysnps是我们想要测试的SNPs的snpID值的向量。模型= nullmod)
的fitNullModel
函数将返回一个包含大量数据的列表。一些对用户更有用的输出包括:
varComp
:随机效应的方差分量估计fixef
:一个data.frame
用点估计、标准误差、检验统计量和每个固定效应协变量的p值适合
:一个data.frame
与结果,拟合值,和各种残差从模型也有评估模型拟合的指标,如对数似然(logLik
),受限对数似然(logLikR
)和赤池信息准则(另类投资会议
).此外,还有一些对象,例如工作结果向量(workingY
)和估计表型协方差矩阵逆的Cholesky分解(cholSigmaInv
)assocTestSingle
关联测试的函数。可以通过该命令找到描述所有输出的详细信息帮助(fitNullModel)
.
的assocTestSingle
函数将返回data.frame
与每个SNP关联测试的摘要信息。每一行对应一个不同的SNP。
(协会)
# #变体。id chr pos n.obs freq MAC Score评分。SE得分。统计## 1 1 1 1 173 0.3901734 135 1.201347 8.670690 0.1385526 ## 2 2 1 2 173 0.4942197 171 -6.915853 9.150746 -0.7557693 ## 3 3 1 3 173 0.1011561 35 -1.366449 5.441663 -0.2511087 ## 4 4 1 4 173 0.4855491 168 -7.120154 9.429106 -0.7551251 ## 5 5 1 5 172 0.4447674 153 7.404077 8.708558 0.8502070 ## 6 6 1 6 172 0.2093023 72 10.364356 7.374279 1.4054739 ## Score.pval Est Est.SE PVE ## 1 0.8898037 0.01597942 0.1153311 0.0001122594 ## 2 0.4497875 -0.08259101 0.1092807 0.0033401932 ## 3 0.8017301 -0.04614558 0.1837674 0.0003687368 ## 4 0.4501739 -0.08008448 0.1060546 0.0033345010 ## 5 0.3952100 0.09762892 0.1148296 0.0042270995 ## 6 0.1598804 0.19059138 0.1356065 0.0115515076
variant.id
:唯一的snp ID空空的
:染色体pos
:这个职位n.obs
:该SNP分析的样本数量频率
:被测等位基因(“A”)的频率MAC
:小等位基因数分数
:评分函数的值得分。SE
:分数的估计标准误差得分。统计
:分数Z检验统计量Score.pval
:基于分数检验统计量的p值美国东部时间
:该SNP的效应量估计(beta)的近似值Est.SE
:效应量估计标准误差的近似值通过
:被解释表型变异比例的近似可以通过该命令找到描述所有输出的详细信息帮助(assocTestSingle)
.
估计可用的全部基因型snp所解释的总表型变异的比例通常是有兴趣的;这提供了该性状狭义遗传力的估计值。估计遗传力的一种方法是使用来自零混合模型的方差分量估计。《创世纪》包括varCompCI
计算由每个随机效应和95%置信区间解释的方差比例的函数。
varCompCI(nullmod, prop = TRUE)
##比例下95上95 ## V_A 0.110543 -0.2190884 0.4401745 ## V_resid。Var 0.889457 0.5598255 1.2190884
fitNullModel
道具
是一个逻辑指标,表明点估计值和置信区间应以解释的总变率的比例(TRUE)或按原始尺度(FALSE)返回。当在模型中加入额外的随机效应(例如,共享的家庭效应)时,varCompCI
还将返回由这些组件解释的可变性的比例。
注意:varCompCI
不能计算在零模型中使用异质残差方差时解释的方差的比例。group.var
被用在fitNullModel
).通过设置,仍然可以计算原始尺度上方差分量估计的置信区间支持= FALSE
.
注:方差分量估计是不可解释的二元表型时,拟合使用PQL方法实现fitNullModel
;对于这些模型,不应计算被解释的方差比例。
布雷斯洛NE和克莱顿DG。(1993)。广义线性混合模型的近似推理。美国统计学会杂志88:9-25。
陈浩,王超,Conomos MP, Stilp AM, Li Z, Sofer T, Szpiro AA, Chen W, Brehm JM, Celedon JC, Redline S, Papanicolaou GJ, Thornton TA, Laurie CC, Rice K和Lin x。Logistic混合模型在遗传关联研究中的群体结构控制和二元性状的亲缘性。中国生物医学工程学报,38(4):563 - 566。
高加滕,s.m.,班格莱,康诺莫斯,m.p.,劳里,c.a.,麦克休,c.p.,佩恩特,我,……和劳里,C.C.(2012)。GWASTools:一个R/Bioconductor包,用于全基因组关联研究的质量控制和分析。生物信息学,28(24),3329 - 3331。