GWAS中的赢家诅咒与其校正 Winner’s curse correction

  1. GWAS中的赢家诅咒 Winner’s curse
  2. 赢家诅咒的校正 WC correction
  3. winnerscurse R包
  4. 参考

GWAS中的赢家诅咒 Winner’s curse

GWAS中的赢家诅咒是指遗传效应的大小由于GWAS中的筛选过程(通过全基因组显著阈值筛选lead SNP)而被系统性地过高估计

赢家诅咒本用来指代在拍卖中类似的现象。即使一件拍卖品对所有买家来说都有相同的价值(出价是无偏的),最后拍得物品的赢家很可能过高估计了拍卖偏的内在价值。类比于GWAS,lead SNP即为赢家,而它的效应量可能过高估计了真实的遗传效应。
image

赢家诅咒的校正 WC correction

假设观察到的\beta_{Observed}的近似分布为:

\beta_{Observed} \sim N(\beta_{True},\sigma^2)

\beta_{Observed}的一个例子
image

  • $c$ : 显著性阈值对应的Z分数

上面的式子等价于

{{\beta_{Observed} - \beta_{True}}\over{\sigma}} \sim N(0,1)

{{\beta_{Observed} - \beta_{True}}\over{\sigma}}的一个例子
image

在通过阈值筛选的情况下,\beta_{Observed}的近似抽样分布(实际上为一个截断正态分布 truncated normal distribution)为:

f(x,\beta_{True}) ={{1}\over{\sigma}} {{\phi({{{x - \beta_{True}}\over{\sigma}}})} \over {\Phi({{{\beta_{True}}\over{\sigma}}-c}) + \Phi({{{-\beta_{True}}\over{\sigma}}-c})}}

其中

|{{x}\over{\sigma}}|\geq c

  • \phi(x) : 标准正态分布的概率密度函数
  • \Phi(x) : 标准正态分布的累积分布函数

从以上的近似抽样分布可以得到,筛选出来的SNP的效应量的期望分布为:

E(\beta_{Observed}; \beta_{True}) = \beta_{True} + \sigma {{\phi({{{\beta_{True}}\over{\sigma}}-c}) - \phi({{{-\beta_{True}}\over{\sigma}}-c})} \over {\Phi({{{\beta_{True}}\over{\sigma}}-c}) + \Phi({{{-\beta_{True}}\over{\sigma}}-c})}}

  • \beta_{Observed} is biased.
  • 偏差的大小由 \beta_{True}, SE \sigma, 以及用于筛选的显著性阈值决定.

公式推导可以参考 Ghosh, A., Zou, F., & Wright, F. A. (2008). Estimating odds ratios in genome scans: an approximate conditional likelihood approach. The American Journal of Human Genetics, 82(5), 1064-1074. 中的Appendix A

用这个式子便可以对效应量进行赢家诅咒的校正。

winnerscurse R包

可以使用这个R包进行赢家诅咒的校正。

https://amandaforde.github.io/winnerscurse/articles/winners_curse_methods.html

参考

  • Bazerman, M. H., & Samuelson, W. F. (1983). I won the auction but don’t want the prize. Journal of conflict resolution, 27(4), 618-634.
  • Göring, H. H., Terwilliger, J. D., & Blangero, J. (2001). Large upward bias in estimation of locus-specific effects from genomewide scans. The American Journal of Human Genetics, 69(6), 1357-1369.
  • Zhong, H., & Prentice, R. L. (2008). Bias-reduced estimators and confidence intervals for odds ratios in genome-wide association studies. Biostatistics, 9(4), 621-634.
  • Ghosh, A., Zou, F., & Wright, F. A. (2008). Estimating odds ratios in genome scans: an approximate conditional likelihood approach. The American Journal of Human Genetics, 82(5), 1064-1074.

Also see reference: https://amandaforde.github.io/winnerscurse/articles/winners_curse_methods.html

GWAS检验效能 Power analysis for GWAS

第一类错误,第二类错误以及检验效能

该表列举了零假设H_0与统计学检验结果(是否拒绝原假设H_0)之间的关系

H0 为真 H0 为假
不拒绝原假设 真阴性 : 1 - \alpha 第二类错误 (伪阴性) : \beta
拒绝原假设 第一类错误 (伪阳性) : \alpha 真阳性 : 1 -  \beta

\alpha : 显著性水平

根据定义,检验效能( statistical power )指某检验正确地拒绝零假设的概率,也就是上表中的真阳性( True positive)。

Power = Pr ( Reject\ | H_0\ is\ False) = 1 -  \beta

image

影响检验效能的因素 Factors affecting power

  • 总的样本量 Total sample size
  • 病例与对照的比例 Case and control ratio
  • 变异的效应量大小 Effect size of the variant
  • 风险等位的频率 Risk allele frequency
  • 显著性阈值 Significance threshold

非中心参数 Non-centrality parameter

非中心参数 : 非中心参数(Non-centrality parameter; NCP)用于描述零假设H_0与备择假设H_1之间差异的程度。

考虑如下的线性模型:

y = \mu +\beta x + \epsilon

误差项的方差为:

\sigma^2 = Var(y) - Var(x)\beta^2

通常情况下单个SNP所能解释的表型的方差是极其有限的,所以我们可以近似地认为

\sigma^2  \thickapprox Var(y)

在哈迪温伯格平衡下,有

Var(x) = 2f(1-f)

  • f : 该变异的等位频率(allele frequency)

自由度为1的\chi^2分布的非中心参数NCP则为

\lambda = ({{\beta}\over{SE_{\beta}}})^2

数量表型的检验效能

\lambda = ({{\beta}\over{SE_{\beta}}})^2 \thickapprox N \times {{Var(x)\beta^2}\over{\sigma^2}} \thickapprox N \times {{2f(1-f) \beta^2 }\over {Var(y)}}

显著性阈值: C = CDF_{\chi^2}^{-1}(1 - \alpha,df=1)

  • CDF_{\chi^2}^{-1}(x) : \chi^2分布的累积分布函数的反函数

Power = Pr(\lambda > C ) = CDF_{\chi^2}(C, ncp = \lambda,df=1)

  • CDF_{\chi^2}(x, ncp= \lambda) : 非中心参数NCP为\lambda\chi^2分布的累积分布函数

病例对照表型的检验效能 Power for large-scale case-control genome-wide association studies

  • P_{case} : 在病例中风险等位的频率 Risk allele frequency in cases
  • N_{case} : 病例的样本量 Number of cases. The total allele count for cases is then 2N_{case}.
  • P_{control} : 在对照中风险等位的频率 Risk allele frequency in controls
  • N_{control} : 对照的样本量 Number of control. The total allele count for control is then 2N_{control}.

这种情况下零假设为 : P_{case} = P_{control} , 即风险等位的频率在病例中与对照中是一样的。

检验两个正态分布的比例的不同时,所用的统计量为

z = {{P_{case} - P_{control}}\over {\sqrt{ {{P_{case}(1 - P_{case})}\over{2N_{case}}} + {{P_{control}(1 - P_{control})}\over{2N_{control}}} }}}

显著性阈值: C = \Phi^{-1}(1 - \alpha / 2 )

Power = Pr(|Z|>C) = 1 - \Phi(-C-z) + \Phi(C-z)

计算GWAS统计效能的网页工具 GAS power calculator

GAS power calculator工具实现了上述的计算方法,可以通过网页工具,指定参数后进行计算。

GAS power calculator

示例: image

参考

  • https://cloufield.github.io/GWASTutorial/20_power_analysis/
  • Skol, A. D., Scott, L. J., Abecasis, G. R., & Boehnke, M. (2006). Joint analysis is more efficient than replication-based analysis for two-stage genome-wide association studies. Nature genetics, 38(2), 209-213.
  • Johnson, J. L., & Abecasis, G. R. (2017). GAS Power Calculator: web-based power calculator for genetic association studies. BioRxiv, 164343.
  • Sham, P. C., & Purcell, S. M. (2014). Statistical power and significance testing in large-scale genetic studies. Nature Reviews Genetics, 15(5), 335-346.

GWAS多表型分析-MTAG

本文内容:

  1. MTAG简介
  2. 核心概念
  3. 核心假设
  4. 算法简介
  5. 特点与不足
  6. 使用教程
  7. 参考

MTAG简介

MTAG( multi-trait analysis of GWAS)是一个使用GWAS概括新数据进行多表型联合分析的方法,相比于单表型的GWAS,MTAG可以利用关联表型的信息提升目标表型的检验统计power。

核心概念

MTAG的核心概念是当某个表型的GWAS结果与其他表型的结果存在相关性时,就可以通过整合其他表性的效应量来提高该表型效应量的估计值。

核心假设

对于不同表型,所有的SNP都共享同一个效应量的方差协方差矩阵

MTAG算法简单介绍如下所示:

特点:

  1. 使用GWAS概括性数据,不需要个体基因型信息
  2. 所使用的GWAS概括性数据可以有样本重叠,不需要独立样本,因为MTAG会通过二变量LD分数回归来调整样本重叠可能带来的误差。(GWASLab:通过Bivariate LD Score regression估计遗传相关性 genetic correlation
  3. MTAG可以计算对于特定表型每一个SNP的效应量估计值。
  4. MTAG计算相对高效,因为其每一步都有封闭解。

不足:

MTAG最主要的问题来源于那些与一个表型无关,而与另一个表型存在真实相关的SNP,MTAG对于此类SNP会有估计偏差,对于无关的SNP产生远离0的偏倚,造成假阳性。


使用教程

安装

MTAG是一个基于python的软件,可以从作者的github上下载:

https://github.com/JonJala/mtag

环境要求:

python2.7

  • numpy (>=1.13.1)
  • scipy
  • pandas (>=0.18.1)
  • argparse
  • bitarray (for ldsc)
  • joblib

示例数据下载:

neuroticism 与 subjective well-being gwas的概括性数据:

http://ssgac.org/documents/1_OA2016_hm3samp_NEUR.txt.gz

http://ssgac.org/documents/1_OA2016_hm3samp_SWB.txt.gz

输入格式 (GWAS的概括性数据)

snpid    chr    bpos    a1    a2    freq    z    pval    n

snpid,chr,bpos分别为snp的rsID,染色体号,与碱基位置,

a1,a2分别为效应等位(effect allele),与非效应等位

freq为a1的频率

z,pval,n则分别为检验的Z分数,p值,与样本量

(也可以使用beta与se来代替z,-use_beta_se

MTAG示例代码

python /[path]/mtag.py  \
	--sumstats 1_OA2016_hm3samp_NEUR.txt,1_OA2016_hm3samp_SWB.txt \
	--out ./tutorial_results_1.1NS \
	--n_min 0.0 \
  --stream_stdout

sumstats: 输入的GWAS的概括性数据, 使用逗号间隔

out: 输出文件的前缀

n_min:样本量阈值 (n低于此阈值的SNP会被舍弃)

stream_stdout : 将log文件实时输出到终端

如果使用东亚的LD分数参考,还需要指定

-ld_ref_panel 这个选项所使用的数据与LDSC相同,可以通过LDSC下载 (GWASLab:连锁不平衡分数回归 LD score regression -LDSChttps://alkesgroup.broadinstitute.org/LDSCORE/

输出

总共四组文件,

  1. .log 文件
  2. _sigma_hat.txt 存储估计的残差协方差矩阵
  3. _omega_hat.txt 存储估计的遗传方差矩阵
  4. _trait_1.txt 与_trait_2.txt文件则为MTAG的效应量估计结果

.log 文件:

head -n 20 tutorial_results_1.1NS.log
2021/10/31/10:43:32 PM 
<><><<>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
<>
<> MTAG: Multi-trait Analysis of GWAS 
<> Version: 1.0.8
<> (C) 2017 Omeed Maghzian, Raymond Walters, and Patrick Turley
<> Harvard University Department of Economics / Broad Institute of MIT and Harvard
<> GNU General Public License v3
<><><<>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
<> Note:  It is recommended to run your own QC on the input before using this program. 
<> Software-related correspondence: maghzian@nber.org 
<> All other correspondence: paturley@broadinstitute.org 
<><><<>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

Calling ./mtag.py \
--stream-stdout  \
--n-min 0.0 \
--sumstats 1_OA2016_hm3samp_NEUR.txt,1_OA2016_hm3samp_SWB.txt \
--out ./tutorial_results_1.1NS

MTAG效应量估计值文件(trait_1):

head tutorial_results_1.1NS_trait_1.txt
SNP	CHR	BP	A1	A2	Z	N	FRQ	mtag_beta	mtag_se	mtag_z	mtag_pval
rs2736372	8	11106041	T	C	-7.7161416126199995	111111.11111099999	0.4179	-0.032488048690724455	0.004191057650619415	-7.751754186899077	9.063170638233748e-15
rs2060465	8	11162609	T	C	7.69444599845	62500.0	0.6194	0.038971244976047835	0.005364284755639267	7.264947099439278	3.731842884367329e-13
rs10096421	8	10831868	T	G	-7.561098219	111111.11111099999	0.4646	-0.0306226260844897350.004144573386350028	-7.388607518772383	1.483744201034853e-13
rs2409722	8	11039816	T	G	-7.382616018080001	111111.11111099999	0.4627	-0.032187004733709536	0.004145724613962613	-7.763903233057294	8.235474166666265e-15
rs11991118	8	10939273	T	G	7.32202915636	111111.11111099999	0.5056	0.030603923980300953 0.004134432028802615	7.402207550419989	1.339389362466671e-13
rs2736371	8	11105529	A	G	-7.32009158327	62500.0	0.3806	-0.03759068256663257	0.005364284755639268	-7.007585219467501	2.42466338629309e-12
rs2736313	8	11086942	T	C	-7.24228035161	111111.11111099999	0.4646	-0.03068115211425502 0.004144573386350028	-7.402728641577938	1.3341420385130596e-13
rs876954	8	8310923	A	G	-7.15791677597	62500.0	0.4813	-0.03422779585744538	0.005212736369758894 -6.566185862767606	5.162037825451834e-11
rs1533059	8	8684953	A	G	-7.074128564239999	62500.0	0.4478	-0.035027431607855014	0.00523771146606734	-6.687545091932079	2.269452965596589e-11

其中mtag_beta mtag_se mtag_z mtag_pval列为这一个表型mtag计算后的结果。

参考:

Turley, P., Walters, R.K., Maghzian, O.et al.Multi-trait analysis of genome-wide association summary statistics using MTAG.Nat Genet50,229–237 (2018). https://doi.org/10.1038/s41588-017-0009-4

Tutorial 1: The Basics · JonJala/mtag Wiki

使用GWAS概括性数据进行条件分析 GCTA – COJO

GCTA-COJO: multi-SNP-based conditional & joint association analysis using GWAS summary data

本文内容:

背景介绍
GCTA-COJO使用方法
参考样本的选择
参考

背景介绍:

通常情况下GWAS或是meta分析检验的是基于单个SNP模型的相关,所估计的效应量为被检验SNP的边际效应,但相比于多SNP模型的联合效应,单个SNP模型的边际效应并没有考虑该SNP与周围SNP的LD

这会带来两个问题:

  1. 如果两个SNP成负相关,那么这两个SNP的效应都会被减弱。
  2. 如果两个SNP都达到了显著的阈值,事后很难通过LD来确定这两个SNP的相关的程度。

如果我们有原始样本层面的基因型,以及单SNP检验后的概括性数据,就可以在没有表型数据的情况下,将边缘效应转化为联合效应。

但一般情况下,对于一个包含很多队列的meta分析,我们无法获取个体的基因型数据,所以不能计算X′X(转化为联合效应时必须的步骤),但X′X本质上是一个SNP基因型的协方差矩阵,我们可以通过1.meta-analysis的基因型频率,与2.从可以获得基因型的参考样本计算而得的SNP之间的LD,来进行估计。这样的基于meta分析的基因频率与参考队列的LD的估计过程也可以用在相应的条件分析之中。(详细推导过程见原文)

使用方法:

COJO内置于GCTA软件中:

输入文件为

  1. 来自meta分析的概括性数据 summary-level statistics from a meta-analysis GWAS
  2. 参考样本的基因组文件 plink格式

-cojo-file [test.ma](<http://test.ma/>) 用于指定概括性数据:

概括性数据输入文件格式如下所示,

SNP A1 A2 freq b se p N 
rs1001 A G 0.8493 0.0024 0.0055 0.6653 129850 
rs1002 C G 0.0306 0.0034 0.0115 0.7659 129799 
rs1003 A C 0.5128 0.0045 0.0038 0.2319 129830
...

需要包含,各列需要按次顺序排列,列名则没有要求

1.SNP的ID,
2.效应等位A1,      #注意 A1,A2不能颠倒
3.参考等位A2,
4.效应等位的频率,   #也就是A1的频率
5.效应的大小,
6.标准差,
7.p值,
8.以及样本大小 

注意

1.对于病例对照研究,效应大小应当是 log(odds ratio),以及其相对应的标准差。

  1. 即使你的研究对象只是一部分SNP,在准备输入文件时,也要准备所有SNP的概括性数据,主要原因是GCTA-COJO需要所有SNP的概括性数据来计算表型方差。可以使用--extract选项来限制COJO分析的区域。

COJO分析中可用的选项:

--cojo-slct

通过逐步法筛选出独立关联的SNP。结果将保存在*.jma文件中,还会有一个额外的文件*.jma.ldr保存SNP两两间的LD。

--cojo-top-SNPs 10

通过逐步法筛选出指定数量的独立关联的SNP,不设P值得阈值,找到指定数量的SNP为止。输出文件同--cojo-slct

--cojo-joint

不进行模型筛选,直接估计所有纳入的SNP的联合效应。输出文件同上。

--cojo-cond cond.snplist

校正给定列表中的SNP后进行关联分析。结果将保存在*.cma文件中。

其中cond.snplist的格式如下所示:

rs1001
rs1002
...

--cojo-p 5e-8

基因组范围显著的阈值,默认为 5e-8 。当使用–cojo-slct时,该选项才有效。

-cojo-wind 10000

当两个SNP的距离超过指定值时,认为其为连锁平衡的。默认值为10000 Kb (i.e. 10 Mb)

-cojo-collinear 0.9

模型选择时,程序会检查SNP之间的共线性问题,如果某一SNP在回归中的R2大于阈值,那么该SNP将不会被选择。默认值为0.9 。

-diff-freq 0.2

检查GWAS概括性数据中频率与参考样本中频率的差值,差值过大的SNP会被去除。默认值为0.2.

-cojo-gc

选择后p值会进行基因组控制。 e.g. –cojo-gc 1.05.

COJO分析的使用例:

# Select multiple associated SNPs through a stepwise selection procedure
gcta64  --bfile test  --chr 1 --maf 0.01 --cojo-file test.ma --cojo-slct --out test_chr1

# Select a fixed number of of top associated SNPs through a stepwise selection procedure
gcta64  --bfile test  --chr 1 --maf 0.01 --cojo-file test.ma --cojo-top-SNPs 10 --out test_chr1

# Estimate the joint effects of a subset of SNPs (given in the file test.snplist) without model selection
gcta64  --bfile test  --chr 1 --extract test.snplist  --cojo-file test.ma --cojo-joint --out test_chr1

# Perform single-SNP association analyses conditional on a set of SNPs (given in the file cond.snplist) without model selection
gcta64  --bfile test  --chr 1 --maf 0.01 --cojo-file test.ma --cojo-cond cond.snplist --out test_chr1

输出文件格式

结尾为.jma的文件 (使用-cojo-slct 或 –cojo-joint时的输出)

Chr SNP bp freq refA b se p n freq_geno bJ bJ_se pJ LD_r
1 rs2001 172585028 0.6105 A 0.0377 0.0042 6.38e-19 121056 0.614 0.0379 0.0042 1.74e-19 -0.345
1 rs2002 174763990 0.4294 C 0.0287 0.0041 3.65e-12 124061 0.418 0.0289 0.0041 1.58e-12 0.012
1 rs2003 196696685 0.5863 T 0.0237 0.0042 1.38e-08 116314 0.589 0.0237 0.0042 1.67e-08 0.0 
...

输出文件的列依次是染色体号,SNP ID,位置,效应等位的频率,效应量大小,标准差,原始P值,估计的有效样本量,参考样本中的频率,joint analysis中该SNP的效应量大小,标准差,P值,以及列表中第i个SNP与第i+1个SNP的LD。

LD矩阵(使用-cojo-slct 或 –cojo-joint时的输出)

存储于后缀为jma.ldr的文件中

SNP rs2001 rs2002 rs2003 ...
rs2001 1 0.0525 -0.0672 ...
rs2002 0.0525 1 0.0045 ...
rs2003 -0.0672 0.0045 1 ...
...

结尾为.cma的文件 (使用–cojo-cond选项会生成)

Chr SNP bp freq refA b se p n freq_geno bC bC_se pC
1 rs2001 172585028 0.6105 A 0.0377 0.0042 6.38e-19 121056 0.614 0.0379 0.0042 1.74e-19
1 rs2002 174763990 0.4294 C 0.0287 0.0041 3.65e-12 124061 0.418 0.0289 0.0041 1.58e-12
1 rs2003 196696685 0.5863 T 0.0237 0.0042 1.38e-08 116314 0.589 0.0237 0.0042 1.67e-08
...

GCTA-COJO 分析中参考样本的选择(重要!)

  1. 如果你的概括性数据来自单一的GWAS,那么最好的参考样本就是这个GWAS中的样本。
  2. 当概括性数据来自Meta分析,个体的基因型无法获取时,可以使用一个样本量较大队列的数据。例如,Wood et al. 2014 Nat Genet 使用了ARIC cohort (data available from dbGaP)
  3. 建议使用样本量大于4000的参考样本
  4. 不建议使用 HapMap 或 1000G 的参考样本,因为其样本量太小。

实际使用中可以使用填补后的基因型数据来估计LD,例如可以从BBJ中随机抽取20000个无关联的个体,提取其填补后的基因型作为EAS群体的参考面板。

参考:

Conditional and joint analysis method: Yang et al. (2012) Conditional and joint multiple-SNP analysis of GWAS summary statistics identifies additional variants influencing complex traits. Nat Genet 44(4):369-375. [PubMed ID: 22426310]

GCTA software: Yang J, Lee SH, Goddard ME and Visscher PM. GCTA: a tool for Genome-wide Complex Trait Analysis. Am J Hum Genet. 2011 Jan 88(1): 76-82. [PubMed ID: 21167468]

GWAS方法 – SAIGE 校正样本对照失衡的广义线性混合模型

关键词:saige,GLMM,case-control imbalance,binary phenotype, SPA

本文内容:

SAIGE开发背景
SAIGE原理简介
	第一步
	第二步
	注意事项
SAIGE使用方法
	安装
	第一步
	第二步
	结果解读
参考

一句话解释:SAIGE是一种基于广义线性混合模型的,针对二分类表型(binary phenotype)能够调整样本对照不平衡(case-control imbalance)与隐性关联(cryptic relatedness)的GWAS检验方法。

① SAIGE开发背景:

在大规模生物银行,对上千种表型进行的GWAS中,大多数二分类变量的病例都远小于对照,线性混合模型,或逻辑斯蒂混合模型对于此种病例对照严重失衡(1:10,甚至到1:100)的表型,都不能很好地控制1类错误,容易造成假阳性出现。

SAIGE便是针对此问题开发的方法,目前UKBB等GWAS概括性数据所使用的方法均为SAIGE。SAIGE的特点是利用 SPA(saddlepoint approximation , 鞍点近似法) 在病例对照比例严重失衡时,仍然获得准确的p值。

② SAIGE原理简介:

SAIGE全称是 Scalable and Accurate Implementation of GEneralized mixed model 广义混合模型的可扩展且准确的实现。

SAIGE 与 bolt-lmm 或 regenie 类似,都需要两个步骤。saige基于广义线性混合模型GLMM模型:

https://gwaslab.files.wordpress.com/2021/04/image-26.png?w=301

其中

为给定协变量与基因型时,第i个样本为病例的概率,bi为随机效应,服从N(0,τψ)的分布。其中ψ是N X N的遗传关联矩阵(GRM),τ是加性遗传方差。Xi为协变量,Gi表示等位基因的个数,取值为0,1,2,α为 (1+p)x 1 的表示固定效应的系数向量,β为遗传效应的系数。

具体流程如下:

第一步(构建null模型),估计方差与其他参数:

利用 array genotype ,估计 null 逻辑斯蒂混合模型(GLMM)。

https://gwaslab.files.wordpress.com/2021/04/image-27.png?w=236

SAIGE通过PQL方法 和 AI-REML 算法简化计算提高效率。

迭代估计模型中参数:

每一次迭代中,让

为y的估计的均值,

则权重矩阵为

为N X N的如下工作向量的方差矩阵

目前诸如GMMAT等方法在这一步时需要计算该方差矩阵的逆,

当N较大时,该步骤计算量巨大,为了简化计算,SAIGE采用了PCG算法(PCG是一种找到线性系统解的数值方法,BOLT_LMM也用到此算法)

在如下零假设(null hypothesis)的情况下:

分数检验统计量由下式得到

其方差Var(T)为

其中

因为我们需要对每一个SNP都计算P,计算量巨大,

SAIGE假设真随机效应b已经给定,并计算两种情况下T的方差的比值,来进行简化计算

假设b给定时:

则方差比值r

saige中会取随机取30个snp来估计r。

第二步(检验):分数检验,并通过SPA调整。

采用上述比值r对分数检验的T检验量进行调整,即可得到SAIGE的T检验量。

一般情况下,传统方法假设T渐进服从一个高斯分布,但是当病例对照(case-control)的比例不平衡,以及被检验变异有较低的MAC(Minor allele count)时,T统计量就会与高斯分布有显著偏离。saige方法之所以能调节病例对照不平衡 ,关键点就在于利用SPA对检验的调整,以获得一个较为准确的P值。(saige采用了fastSPA)

SPA:saddlepoint approximation (SPA) 鞍点近似法

SAIGE整体架构如下所示:

https://github.com/weizhouUMICH/img/raw/master/SAIGE2step.png

③ SAIGE的注意事项:

注意:该比值只有在MAC大于30时,才保持恒定,当MAC小于30时,要谨慎使用此方法

④ SAIGE使用方法:

saige的github页面:https://github.com/weizhouUMICH/SAIGE

安装:

saige是基于R的软件,有多种安装方法:

可以通过R安装,也可以通过CONDA安装,但安装过程复杂,个人推荐使用docker进行安装,方便快捷。

docker pull wzhou88/saige:0.44.2

第一步,估计空模型

输入文件:

1 基因型文件PLINK格式

2 表性文件

3 协变量文件

#For Binary traits:
Rscript step1_fitNULLGLMM.R     \
        --plinkFile=./input/nfam_100_nindep_0_step1_includeMoreRareVariants_poly \
        --phenoFile=./input/pheno_1000samples.txt_withdosages_withBothTraitTypes.txt \
        --phenoCol=y_binary \
        --covarColList=x1,x2 \
        --sampleIDColinphenoFile=IID \
        --traitType=binary        \
        --outputPrefix=./output/example_binary \
        --nThreads=4 \
        --LOCO=FALSE \
        --IsOverwriteVarianceRatioFile ## v0.38. Whether to overwrite the variance ratio file if the file already exists

#For Quantitative traits, if not normally distributed, inverse normalization needs to be specified to be TRUE --invNormalize=TRUE
Rscript step1_fitNULLGLMM.R     \
        --plinkFile=./input/nfam_100_nindep_0_step1_includeMoreRareVariants_poly \
        --phenoFile=./input/pheno_1000samples.txt_withdosages_withBothTraitTypes.txt \
        --phenoCol=y_quantitative \
        --covarColList=x1,x2 \
        --sampleIDColinphenoFile=IID \
        --traitType=quantitative       \
		--invNormalize=TRUE	\
        --outputPrefix=./output/example_quantitative \
        --nThreads=4 \\
        --LOCO=FALSE	\\
	--tauInit=1,0

共有三个输出文件:

  • .rda文件,包含空模型
  • 30个随机选择的SNP的关联结果
  • 包含估计的方差比值的文本文件 (回忆上述SAIGE算法中的r

.rda文件,包含空模型

./output/example_quantitative.rda

#open R
R
#load the model file in R
load("./output/example_quantitative.rda")
names(modglmm)
modglmm$theta

#theta: a vector of length 2. The first element is the dispersion parameter estimate and the second one is the variance component parameter estimate
#coefficients: fixed effect parameter estimates
#linear.predictors: a vector of length N (N is the sample size) containing linear predictors
#fitted.values: a vector of length N (N is the sample size) containing fitted mean values on the original scale
#Y: a vector of length N (N is the sample size) containing final working vector
#residuals: a vector of length N (N is the sample size) containing residuals on the original scale
#sampleID: a vector of length N (N is the sample size) containing sample IDs used to fit the null model

30个随机选择的SNP的关联结果

less -S ./output/example_quantitative_30markers.SAIGE.results.txt

方差比值文件 variance ratio file

less -S ./output/example_quantitative.varianceRatio.txt

第二步

输入文件为:

1 插补后的剂量文件,如VCF,BGEN,BCF或SAV,以及

2 对应的索引文件

3 样本文件,无header,包含一列对应剂量文件的样本ID。

4 第一步所得的rda模型文件

5 第一步所得的方差比值文件

这里以常用的bgen与VCF文件为例

#bgen for dosages
Rscript step2_SPAtests.R \
        --bgenFile=./input/genotype_100markers.bgen \
        --bgenFileIndex=./input/genotype_100markers.bgen.bgi \
        --minMAF=0.0001 \ #最小MAF不能低于0.0001
        --minMAC=1 \ #最小MAC不能低于1
        --sampleFile=./input/samplefileforbgen_10000samples.txt \
        --GMMATmodelFile=./output/example.rda \
        --varianceRatioFile=./output/example.varianceRatio.txt \
        --SAIGEOutputFile=./output/example.SAIGE.bgen.txt \
        --numLinesOutput=2 \
        --IsOutputAFinCaseCtrl=TRUE

#VCF containing dosages (--vcfField=DS)
Rscript step2_SPAtests.R \
        --vcfFile=./input/dosage_10markers.vcf.gz \
        --vcfFileIndex=./input/dosage_10markers.vcf.gz.tbi \
        --vcfField=DS \
        --chrom=1 \
        --minMAF=0.0001 \   #最小MAF不能低于0.0001
        --minMAC=1 \   #最小MAC不能低于1
        --sampleFile=./input/sampleIDindosage.txt \
        --GMMATmodelFile=./output/example.rda \
        --varianceRatioFile=./output/example.varianceRatio.txt \
        --SAIGEOutputFile=./output/example.SAIGE.vcf.dosage.txt \
        --numLinesOutput=2 \
        --IsOutputAFinCaseCtrl=TRUE

输出结果各列的解读如下:

CHR: chromosome
POS: genome position 
SNPID: variant ID
Allele1: allele 1
Allele2: allele 2
AC_Allele2: allele count of allele 2
AF_Allele2: allele frequency of allele 2
imputationInfo: imputation info. If not in dosage/genotype input file, will output 1
N: sample size
BETA: effect size of allele 2
SE: standard error of BETA
Tstat: score statistic of allele 2

#SPA后的p值
p.value: p value (with SPA applied for binary traits) 

p.value.NA: p value when SPA is not applied (only for binary traits)
Is.SPA.converge: whether SPA is converged or not (only for binary traits)
varT: estimated variance of score statistic with sample relatedness incorporated
varTstar: variance of score statistic without sample relatedness incorporated
AF.Cases: allele frequency of allele 2 in cases (only for binary traits and if --IsOutputAFinCaseCtrl=TRUE)
AF.Controls: allele frequency of allele 2 in controls (only for binary traits and if --IsOutputAFinCaseCtrl=TRUE)
Tstat_cond, p.value_cond, varT_cond, BETA_cond, SE_cond: summary stats for conditional analysis

除此之外SAIGE还支持条件分析,男女分层分析,X染色体分析等多种功能:

详细文档见:https://github.com/weizhouUMICH/SAIGE/wiki/Genetic-association-tests-using-SAIGE#installing-saige

参考:

Zhou, W. et al. (SAIGE)Efficiently controlling for case-control imbalance and sample relatedness in large-scale genetic association studies. Nat. Genet. 50, 1335–1341 (2018).

基因组控制与基因组膨胀系数λ Genomic control λGC

本文内容


什么是基因组控制 Genomic Control
基因组膨胀系数λGC (Genomic Inflation Factor) 的计算方法
GC的注意事项以及解决办法
  1. 什么是基因组控制 Genomic Control

基因组控制是矫正GWAS中因群体分层等原因而导致检验统计量膨胀的一种方法。

考虑一种简单病例对照研究,假设有N个样本,以及n个SNP,φ是样本中病例的比例(0<φ<1), 对于某个SNP,其在病例以及对照中的频率如下表所示:

为了检验关联性,我们会基于隐形,显性,以及加性遗传模型来计算自由度为1的卡方检验量。这里以加性遗传模型为例,对SNP进行趋势检验 ( Armitage’s trend test)。其计算公式为:

我们假设对于每个SNP,我们都计算了其相应的趋势检验的Y2l统计量,当这些SNP之间没有连锁不平衡LD,且不存在人群分层以及隐性关联时,检验量Y2服从卡方分布。

基因组控制(Genomic control,GC)模型假设是这些检验统计量会因为群体分层以及隐形关联等原因出现膨胀,膨胀系数为 λ (基因组膨胀系数 Genomic Inflation Factor)。同时GC模型假设这个膨胀系数在基因组上对于所有SNP是近似相等的。

2.基因组膨胀系数 Genomic Inflation Factor 的计算方法

基于此我们可以通过下式来估计λGC ,

取GWAS检验后所有卡方检验量的中间值,除以0.456,其中0.456为卡方检验量的期望值 (卡方分布中,第50百分位数的卡方统计量,r语言中qchisq(0.5,1)对应的值)。之所以取中间值计算λGC是因为要避免异常值的影响。

λ越接近1,就表明不存在群体分层导致的统计量膨胀。

将GWAS检验后所有卡方统计量除以λ后重新计算p值得过程即为基因组控制 GC。

例如这个GWAS研究的QQ图,可以看到观测值有一个明显的系统性的抬升,这通常意味着样本中存在在群体分层,通过计算我们得到这个GWAS研究的基因组膨胀系数为 λ=1.17,

将原始的统计量除以1.17,重新计算p值后,可以看到之前的抬升得到有效控制。

3. GC的注意事项以及解决办法:

但要注意的是,GC假设基因组中只有少数的loci与表型相关,绝大多数被检验的SNP是与表型无关的,而目前的主流GWAS检验方法大多基于无限小模型(infinitesimal model)(详见:解释复杂疾病的四种主流模型 CDCV/RAME/infinitesimal/Broad-sense-heritability),该模型假设所有SNP与表型都是有关的,只是效应量很小。这种情况下就不再适用GC。

其他解决人群分层等的办法包括:

等等

参考:

Devlin, B. & Roeder, K. Genomic control for association studies. Biometrics 55, 997–1004 (1999).

Devlin, B. Genomic control, a new approach to genetic-based associationb studies. (2001).

基于LMM的一种快速的关联检验方法 fastGWA

TL;DR

一句话总结:fastGWA是基于LMM的检验方法,该方法应用了一种快速的估算方法(fastGWA-REML,也就是网格搜索),可以避免计算协方差矩阵V的逆,从而大幅提升计算速度。

背景:

目前基于线性混合模型(LMM)的检验方法已经被广泛应用于GWAS研究中,因为LMM可以矫正群体分层以及亲缘关系。基本的原理就是以从所有SNP估计而来的样本结构为条件,检验变异与表型的关联。详见 LMM模型

然而该模型的运算时间过长,目前的方法时间复杂度约为 O(mn2)到 O(m2n)之间,其中m是变异的数量,n是样本大小。

基于此背景,fastGWA旨在运用一种及其节省运算资源的算法,来进行基于LMM的GWAS分析,该方法内置在GCTA软件中。

fastGWA的LMM模型:

一般情况下LMM模型需要通过REML来估计参数,fastGWAS采用了以下的算法来简化计算,提升速度。

fastGWA-REML 算法:grid search(加速的重点)

计算 log-likelihood scores 时,将g的方差可能的取值范围,等间距取100个值,

所以每一步的间隔就是

注意,这里可能的取值上限取了大于表型方差的值,原因是要尽可能的包含各种情况,包括当真实的遗传力较大,且环境因素影响也十分显著时, g的方差估计值可能大于表型方差。

接下来,要细化搜索窗口,在前面100个取值点中,log-likelihood scores 取最大值的点周围,20%的范围内,再细分16步:

也就是说如果第一步

那么就要在下面的范围里,再细分出16个取值点,

每步的大小如下,

接下来不断重复这个步骤,直到两次细分后找的最大值只差小于:

这样我们就可以相对快速而精准的估计出随机效应方差的大小。

有了估计的协方差矩阵,我们就能利用一般化的最小二乘法估计效应量beta,算式如下:

参考:

Jiang L, Zheng Z, Qi T, et al. A resource-efficient tool for mixed model association analysis of large-scale data[J]. Nature genetics, 2019, 51(12): 1749-1755.

https://cnsgenomics.com/software/gcta/#Overview

基于高斯混合模型的关联检验 Bolt-LMM – GWAS方法

Key words: LMM,高斯混合模型,贝叶斯,无穷小模型,长尾分布

TL;DR

Bolt-LMM对SNP的效应拟合高斯混合模型,该算法使用一种快速的方差近似方法,计算近似的表型残差,并通过回顾性的分数检验统计量检验残差与待检验SNP的关联,这样就构建了表型预测的贝叶斯模型与频率学派关联检验的桥梁。同时,基于LD分数回归,还会对统计量进行调整。

背景:

在bolt-lmm论文发表时已出现的LMM方法有以下的不足:

  • 需要大量的计算资源,时间复杂度高。
  • 现有模型由于对遗传结构非最优化(suboptimal modeling assumptions regarding the genetic architectures)的假设,会导致power降低。当前标准的线性混合模型是基于无穷小模型(infinitesimal model),该模型假设所有的变异都是效应量很小的因果变异,各效应量相互独立,服从高斯分布,但实际情况中,对于复杂表型,因果loci的数量大约为1000个左右。

为了解决以上问题,Bolt-LMM采取了贝叶斯的观点修改了混合模型,新模型中SNP效应量服从非高斯的先验分布,以更好地反映效应量大小不同的loci的遗传效应。

方法详解:

BOLT-LMM算法包含四个步骤,每一步都需要若干次时间复杂度为O(MN)的迭代。 (1a) 估计方差系数; (1b) 计算无穷小混合模型下的关联统计量 (Bolt-LMM-inf) (2a) 估计高斯混合模型的系数 (2b) 计算高斯混合模型下的关联统计量 (Bolt-LMM)
简要推导:

标准的线性混合模型如下所示:

Y是表型,x是待检验的SNP,g是遗传效应,e是环境因素 在无穷小模型下,遗传效应g可以表示为:

其中XGRM是一个NxM的矩阵,每一列都是某个SNP标准化后的基因型,βGRM是长度为M的向量,包含了SNP的随机效应,效应都从相同的正态分布中抽取,并且整体上服从协方差矩阵如下所示的多元正态分布,

这里BOlt-LMM为了避免近端污染(proximal contamination),采用了LOCO方法。

这个矩阵在习惯上称为GRM,或是亲缘关系矩阵K,于是有:

σg2是方差系数。 环境效应也被认为是独立同分布,服从多元正态分布,

σe2是方差系数,I是单位矩阵。 实际上σg2与σe2是未知的,所以我们要先通过REML来估计。然后计算前瞻性的卡方检验统计量:

其中,

使σg2与σe2为空模型:β=0是的估计值,在LOCO下,检验统计量变为:

BOLT-LMM-inf 无穷小混合模型统计量:

cinf是一个常数的校正因子,由下式估计:

使得,

实际操作中选取30个伪随机的SNP来估计cinf。我们可以将BOLT-LMM-inf统计量视为前瞻性统计量(将表型视为随机)的近似,或是回顾性的统计量(将基因型视为随机,基于SNP构建空模型)
BOLT-LMM 高斯混合模型关联统计量:
我们注意到,

是以下最优无偏估计(BLUP)的表型残差向量的标量倍数,

因此,BOLT-LMM-inf统计量就等价于计算(并调整)待检验的SNP xtest与BLUP残差的相关系数的平方。 混合模型的power是基于以下事实,SNPs是基于对“去噪声”后的表型残差进行检验,即被混合模型估计的其他SNP的效应已经被矫正。我们可以一般化这个过程,定义:

其中 yresidual-LOCO表示拟合标准LMM的高斯混合扩展(用于待测SNP不在一条染色体上的SNP)后的一般化的表型残差向量,C表示校正因子,通过LD分数回归估计,以使得BOLT-LMM的卡方统计量回归后的截距匹配BOLT-LMM-inf的截距。在无穷小模型下,yresidual-LOCO与Vy成正比,BOLT-LMM的卡方统计量即为BOLT-LMM-inf的卡方统计量。
为了定义高斯混合模型LMM扩展,我们首先构建贝叶斯框架下的标准LMM模型,BOLT-LMM-inf的空模型是

其中,SNP效应βm(m是指除m号染色体之外染色体上的SNP)互相独立且服从以下的高斯先验分布

环境效应也互相独立,服从以下分布:

这里BLUP估计等同于计算遗传效应XLOCOβLOCO的后验均值

为了一般化这个模型(非无穷小模型),对于SNP效应,我们采用一个更一般化的先验分布,在BOLT-LMM中,使用了两个高斯分布的spike and slab的混合分布作为先验分布,如下所示:

这种混合更灵活的表示了遗传效应更为典型的长尾分布(heavier-tailed distributions)。 在这个一般化的模型中,后验均值不再与BLUP相一致,但我们仍可以拟合这个贝叶斯模型以或得残差: 

最后将残差带入前面的算式就可以得到BOLT-LMM 高斯混合模型关联统计量。

参考:

Loh, P. R. et al. Efficient Bayesian mixed-model analysis increases association power in large cohorts. Nature Genetics 47, 284–290 (2015).

GWAS线性混合模型中的LOCO Leave-one-chromosome-out

关键词:LMM,proximal contaminal, LOCO

目前的GWAS已经开始逐渐使用线性混合模型( linear mixed models ,LMM)来代替早期的线性模型,主要原因是线性混合模型能够校正多种原因造成的混淆,例如遗传关联( genetic relatedness ),家庭关联( familial relatedness ),群体分层( population structure )等,LMM模型也因此能够控制假阳性,并提高检验power。

但在使用混合线性模型中一个重要的问题就是,当我们在GRM中纳入了被检验的SNP时,反而会导致power降低。原因是在模型中我们对待检测SNP进行了二重拟合( double-fitting ),即:

  • 1 . 作为检验关联时的固定效应(fixed effect)
  • 2. 在GRM中作为随机效应 (random effect)

这种现象就被称为 临近污染 “proximal contamination”

为了避免此现象造成的power损失,理论上在构建null模型中排除掉待检验SNP是正确的做法,但这样太占运算资源,所以在实践中,我们会采用 LOCO Leave-one-chromosome-out ,即使用排除掉待检验SNP所在的染色体的所有SNP,再进行检验(也就是说我们有对应22个常染色体的loco null模型)。

目前主流的软件都已支持loco,只需要–loco 指定即可。

参考:

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3597090/

Advantages and pitfalls in the application of mixed-model association methods

GWAS的条件分析 Conditional analysis

关键字:conditional analysis,leading SNP, secondary casual variants , fine-mapping

GWAS研究中,对于某个复杂表型,我们会发现很多显著关联的基因座(loci),每个基因座里有若干显著的SNP,这些SNP通常处于LD。这时我们就会面临一个问题,这个基因座里显著的SNP单单因为与leading SNP(该loci里P值最低的SNP)连锁不平衡而显著,还是因为这个SNP本身就与就与表型相关联。这时就应该进行条件分析(conditional analysis),实际上是一种fine-mapping(对casual SNP 致病SNP的精确定位)的方法,目的是确认是否存在次要的因果SNP secondary causal variants。

一般来说进行条件分析的方法很简单,

1.从GWAS结果中抽出每个关联基因座的leading SNP,

2.将该leading SNP作为协变量加入检验模型

3.再次进行关联检验,确认 关联基因座里除 leading SNP 以外还是否有次要的致病SNP secondary causal variants。

例如下图所示的情况:

图1:针对橙色圈中的leading SNP (该loci里p值最低),进行条件分析后的曼哈顿图。A:该loci只有一个信号,表示没有 secondary causal variants ,之所以有多个显著snp是因为与leading SNP处于连锁不平衡。B:除了leading SNP 还有其他信号,表示这个loci还存在 secondary causal variants 。


通常conditional analysis的功能已经集成在关联检验的软件中(如PLINK,SAIGE),我们只需要提供lead snp的 id 或是 位置,就可以进行条件分析了。

例如:

PLINK中的 –condition 选项,也可以使用 –condition–list(同时将多个SNP作为covariate纳入检验模型)

SAIGE 第二步中,也提供了 –condition 选项 ,可以对单个或多个snp进行条件分析

参考:

Strategies for fine-mapping complex traits.

https://www.cog-genomics.org/plink/1.9/assoc

https://github.com/weizhouUMICH/SAIGE/wiki/Genetic-association-tests-using-SAIGE