内容

1概述

这个小插图描述了如何使用《创世纪》软件包在阵列(SNP)数据上运行遗传关联测试。《创世纪》使用混合模型进行遗传关联检验,因为PC-AiR pc可以作为固定效应协变量来调整群体分层,并且由于样本之间的遗传相似性,从pc - related估计的亲属矩阵(或遗传关系矩阵)可以用于解释表型相关。

2数据

2.1准备扫描标注数据

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

2.2读取基因型数据

assocTestSingle功能《创世纪》包读取基因型数据GenotypeData类创建的类对象GWASTools包中。通过使用GWASTools,一个GenotypeData类对象可以很容易地从:

  • SNP基因型数据的R矩阵
  • GDS文件
  • 叮铃声文件

示例R代码,用于创建GenotypeData对象如下所示。更多的细节可以在GWASTools包参考手册。

2.2.1R矩阵

geno <- matrixgentypeeader(基因型=基因型,snpID = snpID,染色体=染色体,位置=位置,scanID = scanID)
  • 基因型是编码为0 / 1 / 2的基因型值矩阵,其中行表示snp,列表示样本
  • snpID是唯一SNP id的整数向量
  • 染色体是指定每个SNP染色体的整数向量吗
  • 位置是一个指定每个SNP位置的整数向量吗
  • scanID是一个独特的个体id的向量

2.2.2GDS文件

geno <- gdsgentypereader (filename = " gentype .gds") gendata <- geno
  • 文件名是GDS对象的文件路径吗

2.3人类基因组单体型图数据

的关联测试《创世纪》包中,我们分析了来自加利福尼亚州洛杉矶的墨西哥裔美国人(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

2.4从pc - related读取GRM

遗传关联测试的混合模型通常包括一个遗传关系矩阵(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相同。

3.混合模型关联检验

进行基因关联测试有两个步骤《创世纪》.首先,对空模型(即没有SNP基因型项的模型)进行拟合fitNullModel函数。其次,将空模型拟合的输出与基因型数据结合使用,以快速运行snp -表型关联测试assocTestSingle函数。将这两个步骤分成两个函数调用具有计算上的优势;空模型只需要拟合一次,SNP关联测试可以通过染色体或其他一些划分来并行化,以加快分析(详见下文)。

3.1拟合Null模型

关联测试的第一步《创世纪》是在每个SNP都没有影响的零假设下拟合混合模型。这个零模型包含所有的协变量,包括祖先代表pc,以及任何随机效应,如由于遗传亲缘性而产生的多基因效应,但它不包括任何SNP基因型术语作为固定效应。

使用fitNullModel函数,零模型中的随机效应通过协方差结构来指定。这允许使用亲缘关系矩阵或遗传关系矩阵(GRM)包含多基因随机效应。

3.1.1定量的表型

定量表型分析时应采用线性混合模型(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
  • 第一个参数是类ScanAnnotationDataFramedata.frame对象,该对象包含样例数据
  • 结果中的结果变量的名称scanAnnot
  • 柯伐合金中的协变量的名称scanAnnot
  • cov.mat指定模型中包含的随机效应的协方差结构
  • 家庭定量表型应该是高斯型,指定线性混合模型

采用平均信息REML (AIREML)方法估计随机效应的方差分量。当verbose = TRUE,每次迭代中的方差分量估计、对数似然和剩余平方和被打印到R控制台(如上所示)。在这个例子中,σ^ 2 _a随机效应的方差分量是否在cov.mat,σ^ 2 _e为残差方差分量。

3.1.1.1多重固定效应协变量

通过设置,该模型可以拟合多个固定效应协变量柯伐合金等于向量的协变量名。例如,如果我们想把变量“pc1”,“pc2”,“sex”和“age”都作为模型中的协变量:

nullmod <- fitNullModel(scanAnnot, result = "pheno", covars = c("pc1","pc2","sex","age"), cov。mat = myGRM, family = "高斯")

3.1.1.2多个随机效应

该模型还能拟合多个随机效应。这是通过设置来完成的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。

3.1.1.3异构剩余方差

对于所有的观测结果,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 "变量的唯一值。

3.1.2二进制Phentoypes

理想情况下,广义线性混合模型(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在这里不适用。

3.2运行snp -表型关联测试

第二步是关联测试《创世纪》是使用拟合的零模型来检验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)

3.3输出

3.3.1零模型

fitNullModel函数将返回一个包含大量数据的列表。一些对用户更有用的输出包括:

  • varComp:随机效应的方差分量估计
  • fixef:一个data.frame用点估计、标准误差、检验统计量和每个固定效应协变量的p值
  • 适合:一个data.frame与结果,拟合值,和各种残差从模型

也有评估模型拟合的指标,如对数似然(logLik),受限对数似然(logLikR)和赤池信息准则(另类投资会议).此外,还有一些对象,例如工作结果向量(workingY)和估计表型协方差矩阵逆的Cholesky分解(cholSigmaInv)assocTestSingle关联测试的函数。可以通过该命令找到描述所有输出的详细信息帮助(fitNullModel)

3.3.2该协会测试

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)

4遗传评估

估计可用的全部基因型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

当在模型中加入额外的随机效应(例如,共享的家庭效应)时,varCompCI还将返回由这些组件解释的可变性的比例。

注意:varCompCI不能计算在零模型中使用异质残差方差时解释的方差的比例。group.var被用在fitNullModel).通过设置,仍然可以计算原始尺度上方差分量估计的置信区间支持= FALSE

注:方差分量估计是不可解释的二元表型时,拟合使用PQL方法实现fitNullModel;对于这些模型,不应计算被解释的方差比例。

5参考文献