GATK:HaplotypeCaller变异检测

本文是阅读一个做算法的文章,有些收获和想法,作为一种记录
我们在使用gatk call snp的时候,常常使用HaplotypeCaller这个参数,这个参数的目的是检测出用来进行snp及小indel变异

HaplotypeCaller这个参数使用的是预组装的方法,能提高变异检测的准确度,但是在某种程度上增加了资源的消耗和分析时长。在分析时,该模块并不会在基因组范围进行全局的变异检测,而是划定高变区间检测,以下是具体的步骤及原理图。


一般在重测序变异检测中,需要测一定深度的reads,那么gatk HaplotypeCaller首先根据参考基因组过一遍,找到那些高变异的区间,然后对区间内的数据及基因组进行组装并且预估单倍型,再就是根据该单倍型计算似然值,最后判定

1.定义区间

为了加速程序的处理速度,gatk并不会对全基因组范围内的所有位点进行变异检测,只会对高变区进行检测,也就是所谓的Active Regions。此处定义的区间选择,来源于比对结果,包括其中的错配、插入、缺失以及soft clipping。

计算时,会计算每个位点出现突变的概率,这一步会同时考虑分型最大似然值以及杂合率,之后通过高斯核做卷积来扩大概率值。当概率值超过0.002时,该区间就会被定义为高变区。在计算过程中,程序会对毗邻的高变区(100bp)进行合并处理,设定的区域大小最小50bp,最长300bp,如果合并区超过300bp,会被截断形成2个或多个高变区,并且存在overlap的reads在相邻的两个高变区中都参与运算。

2.数据组装

高变区的reads以及对应的基因组区域会被切割成存在overlap的小片段,若参考基因组对应的片段集合中存在重复,会将短片段的长度递增直到没有重复或者达到最大长度限制(65nt),若存在65nt的重复短序列,组装停止。序列切割完成后使用de-Bruijn-like graphs算法进行组装。组装获得的边缘根据比对到的reads数目分配权重,比对数量较少的边会从图形中删除,以此来对图形进行精简并形成单倍型数据。
组装完成后会给每个单倍型生成CIGRA信息,以此为依据进行位点的分型。

这一过程类似于序列比对:
也就是说在第一步检测高变异区间以后,gatk会根据测序reads的情况重组单倍型,当然根据位点的不同变异会组装出许多单倍型,那么重组好的单倍型相互之间进行比对,从而筛选出它们之间的变异snp
最后,将这一些单倍型和参考基因组比对,这样就筛选出单倍型之间以及单倍型和参考基因组的snp变异信息了(图中黄色表格)

3.隐马尔科夫模型预估最大似然值

上一步我们说到根据不同reads的变异信息组装出许多的单倍型,那么我们就要将这些reads重新比对会这些单倍型,并且构成单倍型矩阵(某个位点的单倍型矩阵)


组装完成后,将原有的reads回帖到获得的单倍型序列,之后根据比对结果预估在不同单倍型中的最大似然值(likelihood)。具体原理是使用隐马尔科夫模型(pair-HMM,paired Hidden Markov Model)对reads和单倍型之间进行最大似然值的预估

利用马尔可夫模型进行序列比对


在序列比对中,我们将Match,Insert和Delete看作为三个状态,分别用M,I 和D来表示(可参考https://www.jianshu.com/writer#/notebooks/42286457/notes/65851344/preview)
比对所得到的似然值可以构成了单倍型矩阵,具体展开为:

那么接下来,我们根据单倍型以及reads比对到每个单倍型的情况,将该矩阵进行转换,转换为突变基因的似然值:

其中,上面的矩阵为某位点的单倍型矩阵,横坐标为不同组装的单倍型(1,2,3,4,可视为不同的单倍型),纵坐标为测序的reads(1,2,3代表reads 1,2,3),矩阵对应的值就是每条reads比对到该位点的似然值,我们选似然值较高的单倍型作为突变后的基因型
如果考虑突变成两个碱基(即考虑等位基因突变)
我们通常将每一条reads比对到每种单倍型上,得到相应的似然值,对于每一条reads来说选择似然值最大的两个单倍型
即将每一条reads在四个单倍型中最高的两个似然值选出来构成两列的矩阵,根据该矩阵中每条reads在该位点碱基出现的频率来判断突变的类型,比方说第一列中2号单倍型出现频率最多(绿色一共出现2次),即定为此单倍型为第一备选单倍型;而第二列中3号单倍型出现频率最多(暗橙色一共出现2次),选该单倍型为第二备选单倍型,而第一备选单倍型在相应高突变位点为C碱基,第二备选单倍型在相应高突变位点为A碱基,这样就筛选出了两个备选碱基组合

4.分型结果判定

对高突变区的重组单倍型完成后,接下来需要进行分型检验,即检测所测物种突变成什么类型的碱基,以及突变为一个碱基还是两个碱基
确定该物种突变所得的类型以后,与参考基因组对比,看看突变情况



上图表示:

  1. A/C,0/0表示突变类型为A/A;0/1表示突变类型为A/C;1/1表示突变类型为C/C
  2. A/G,0/0表示突变类型为A/A;0/1表示突变类型为A/G;1/1表示突变类型为G/G
    其中0/0和1/1表示突变为1个碱基,0/1表示为突变成2个碱基

根据上述计算,我们可以得到突变基因矩阵,并且定义如下关系式子:


其中G为先验的基因型信息,为已知信息,故P(G) = 1
P(G | R)为在测得的reads的信息条件下,基因型为G的概率,为后验信息


接下来我们根据等位基因矩阵计算每一种突变类型的概率值,其中G(C/C)为突变基因矩阵第一列的每个元素和自己相加再除以2,最后结果相乘;而G(C/A)为突变基因矩阵每一行的前后两个元素相加,再除以2,最后结果相乘,以此类推,最后将这些基因型的似然值相加,得到0.002116
最后用贝叶斯公式计算每个碱基突变类型的概率值,选取最大的作为最合适的突变类型,该例子显然是C/C为最佳突变类型,即突变为C碱基
之后可以将这个基因型于参考基因组对比,看看是否发生变异

参考:https://www.jianshu.com/p/d6964cdcf4c6

https://mp.weixin.qq.com/s/wt1DuVPN1qOpIolfwrgfsg

https://gatk.broadinstitute.org/hc/en-us/articles/360035890531?id=4442

https://mp.weixin.qq.com/s/ZSytDBkP8XYZ57nJHezWWw

你可能感兴趣的:(GATK:HaplotypeCaller变异检测)