参考链接:
https://mp.weixin.qq.com/s/awdjoXRYobrQAbXmAp3C0g
gatk4的使用:https://zhuanlan.zhihu.com/p/69726572?from_voters_page=true (一定要看!)
https://cloud.tencent.com/developer/article/1445600
http://www.bio-info-trainee.com/3144.html
https://www.jianshu.com/p/825e7d618838
gatk官网:需要翻墙
碱基矿工公众号文章--WES系列(gatk4相关):
https://mp.weixin.qq.com/s/NXV_08mUvsJ5_RZXfwuleQ
https://mp.weixin.qq.com/s/sFnPOfXsJFHI1xwWLzyNLg
https://mp.weixin.qq.com/s/L2w6sH58F44R7n-FZkv7Ig
https://mp.weixin.qq.com/s/Sa019WuSg8fRQgkWAIG4pQ
全外显子call snp全过程
https://zhuanlan.zhihu.com/p/45094576
0、gatk工具的使用说明
参考链接:https://www.plob.org/article/7005.html
(1)对GATK的测试主要使用的是人类全基因组和外显子组的测序数据,而且全部是基于illumina数据格式,目前还没有提供其他格式文件(如Ion Torrent)或者实验设计(RNA-Seq)的分析方法。
(2)GATK是一个应用于前沿科学研究的软件,不断在更新和修正,因此,在使用GATK进行变异检测时,最好是下载最新的版本,目前的版本是2.8.1(2014-02-25)。下载网站:http://www.broadinstitute.org/gatk/download。
(3)在GATK使用过程中(见下面图),有些步骤需要用到已知变异信息,对于这些已知变异,GATK只提供了人类的已知变异信息,可以在GATK的FTP站点下载(GATK resource bundle)。如果要研究的不是人类基因组,需要自行构建已知变异,GATK提供了详细的构建方法。
(4)GATK在进行BQSR和VQSR的过程中会使用到R软件绘制一些图,因此,在运行GATK之前最好先检查一下是否正确安装了R和所需要的包,所需要的包大概包括ggplot2、gplots、bitops、caTools、colorspace、gdata、gsalib、reshape、RColorBrewer等。如果画图时出现错误,会提示需要安装的包的名称。
gatk-原始数据处理:比对+去除PCR重复+局部重比对+BQSR:https://www.plob.org/2014/04/14/7009.html
gatk-变异检测+VQSR:https://www.plob.org/article/7023.html
gatk-变异的后续分析:https://www.plob.org/article/7035.html
1、Read Group的信息解释
参考链接:https://mp.weixin.qq.com/s/awdjoXRYobrQAbXmAp3C0g
在使用bwa进行比对时,会有-R参数用来补充read group信息,这对于后续进行call variation时必要的
read group:在sam中以@RG开头,它是用来将比对的read进行分组的。不同的组之间测序过程被认为是相互独立的,这个信息对于我们后续对比对数据进行错误率分析和Mark duplicate时非常重要。
1)ID,这是Read Group的分组ID,一般设置为测序的lane ID(不同lane之间的测序过程认为是独立的),下机数据中我们都能看到这个信息的,一般都是包含在fastq的文件名中
2)PL,指的是所用的测序平台,这个信息不要随便写!特别是当我们需要使用GATK进行后续分析的时候,更是如此!这是一个很多新手都容易忽视的一个地方,在GATK中,PL只允许被设置为:ILLUMINA,SLX,SOLEXA,SOLID,454,LS454,COMPLETE,PACBIO,IONTORRENT,CAPILLARY,HELICOS或UNKNOWN这几个信息。基本上就是目前市场上存在着的测序平台,当然,如果实在不知道,那么必须设置为UNKNOWN,名字方面不区分大小写
3)SM,样本ID,同样非常重要,有时候我们测序的数据比较多的时候,那么可能会分成多个不同的lane分布测出来,这个时候SM名字就是可以用于区分这些样本;
4)LB,测序文库的名字,这个重要性稍微低一些,主要也是为了协助区分不同的group而存在。文库名字一般可以在下机的fq文件名中找到,如果上面的lane ID足够用于区分的话,也可以不用设置LB。
除了以上这四个之外,还可以自定义添加其他的信息,不过如无特殊的需要,对于序列比对而言,这4个就足够了。这些信息设置好之后,在RG字符串中要用制表符(\t)将它们分开
总结:ID一般用来写lane ID,如果在测的时候一个样本一个lane,那也可以是sample id。PL必须是它指定的那几个。SM是样本的ID,如果是一个样本一个lane的话,ID=SM,如果是一个样本多个lane的话(测序很深时),ID是laneID,SM是样本id,要做区分。LB,可以随便设置。
例子:
$ bwa mem -t 4 -R '@RG\tID:foo_lane\tPL:illumina\tLB:library\tSM:sample_name' /path/to/human.fasta read_1.fq.gz read_2.fq.gz | samtools view -S -b - > sample_name.bam
2、为什么比对完之后要排序(sort)?
FASTQ文件里面这些被测序下来的read是随机分布于基因组上面的,第一步的比对是按照FASTQ文件的顺序把read逐一定位到参考基因组上之后,随即就输出了,它不会也不可能在这一步里面能够自动识别比对位置的先后位置重排比对结果。因此,比对后得到的结果文件中,每一条记录之间位置的先后顺序是乱的,我们后续去重复等步骤都需要在比对记录按照顺序从小到大排序下来才能进行,所以这才是需要进行排序的原因
[注意] 排序后如果发现新的BAM文件比原来的BAM文件稍微小一些,不用觉得惊讶,这是压缩算法导致的结果,文件内容是没有损失的。
3、去除重复序列的原因
https://mp.weixin.qq.com/s/awdjoXRYobrQAbXmAp3C0g
首先什么是重复序列,重复序列是在进行PCR扩增时,由同一个DNA分子产生了很多的相同的拷贝。重复序列的存在会导致对于变异的判断产生错误,主要有以下几点:
1)DNA在打断的时候会发生一些变异,而PCR会扩大这个信号,导致假阳性的出现。
2)PCR过程会引入新的变异,这些变异越早发生,那其在后续的扩增中错误的拷贝会越多,导致假阳性
3)PCR本身存在序列偏好性,如果存在真实的变异后,PCR产生了偏好性,如对reference序列扩增偏向强烈,那变异的碱基信息会减少,导致假阴性,反之,导致假阳性。
4)目前使用的主流工具,GATK、Samtools、Platpus等这种利用贝叶斯原理的变异检测算法都是认为所用的序列数据都不是重复序列(即将它们和其他序列一视同仁地进行变异的判断,所以带来误导),因此必须要进行标记(去除)或者使用PCR-Free的测序方案
其次是如何识别或去除重复序列,既然PCR扩增是把同一段DNA序列复制出很多份,那么这些序列在经过比对之后它们一定会定位到基因组上相同的位置,比对的信息看起来也将是一样的!于是,我们就可以根据这个特点找到这些重复序列了!事实上,现有的工具包括Samtools和Picard中去除重复序列的算法也的确是这么做的。不同的地方在于,samtools的rmdup是直接将这些重复序列从比对BAM文件中删除掉,而Picard的MarkDuplicates默认情况则只是在BAM的FLAG信息中标记出来,而不是删除,因此这些重复序列依然会被留在文件中,只是我们可以在变异检测的时候识别到它们,并进行忽略。
3.1、为什么有的数据处理中需要merge bam,有的不需要?
在进行了PCR去重之后,随后要进行局部区域重比对,但是对于测序量较大的样本,会产生多个bam文件,因此在这种情况下需要使用samtools将多个bam merge起来构成该样本的完整的bam
samtools merge <out.bam> <in1.bam> [<in2.bam> ... <inN.bam>]
4、局部区域重比对
局部区域重比对也叫Indel 局部区域重比对,其目的是将BWA比对过程中所发现有潜在序列插入或者序列删除(insertion和deletion,简称Indel)的区域进行重新校正。这个过程往往还会把一些已知的Indel区域一并作为重比对的区域,那为什么要做这种矫正呢?
其根本原因来自于参考基因组的序列特点和BWA这类比对算法本身,注意这里不是针对BWA,而是针对所有的这类比对算法,包括bowtie等。这类在全局搜索最优匹配的算法在存在Indel的区域及其附近的比对情况往往不是很准确,特别是当一些存在长Indel、重复性序列的区域或者存在长串单一碱基(比如,一长串的TTTT或者AAAAA等)的区域中更是如此。
另一个重要的原因是在这些比对算法中,对碱基错配和开gap的容忍度是不同的。具体体现在罚分矩阵的偏向上,例如,在read比对时,如果发现碱基错配和开gap都可以的话,它们会更偏向于错配。但是这种偏向错配的方式,有时候却还会反过来引起错误的开gap!这就会导致基因组上原本应该是一个长度比较大的Indel的地方,被错误地切割成多个错配和短indel的混合集,这必然会让我们检测到很多错误的变异。而且,这种情况还会随着所比对的read长度的增长(比如三代测序的Read,通常都有几十kbp)而变得越加严重。
因此,我们需要有一种算法来对这些区域进行局部的序列重比对。这个算法通常就是大名鼎鼎的Smith-Waterman算法,它非常适合于这类场景,可以极其有效地实现对全局比对结果的校正和调整,最大程度低地降低由全局比对算法的不足而带来的错误。而且GATK的局部重比对模块,除了应用这个算法之外,还会对这个区域中的read进行一次局部组装,把它们连接成为长度更大的序列,这样能够更进一步提高局部重比对的准确性。
下图给大家展示一个序列重比对之前和之后的结果,其中灰色的横条指的是read,空白黑线指的是deletion,有颜色的碱基指的是错配碱基。
image.png
相信大家都可以明显地看到在序列重比对之前,在这个区域的比对数据是多么的糟糕,如果就这样进行变异检测,那么一定会得到很多假的结果。而在经过局部重比对之后,这个区域就变得非常清晰而分明,它原本发生的就只是一个比较长的序列删除(deletion)事件,但在原始的比对结果中却被错误地用碱基错配和短的Indel所代替。
在gatk中,该过程包含了两个步骤
第一步,RealignerTargetCreator ,目的是定位出所有需要进行序列重比对的目标区域(如下图);
第二步,IndelRealigner,对所有在第一步中找到的目标区域运用算法进行序列重比对,最后得到捋顺了的新结果。
以上这两个步骤是缺一不可的,顺序也是固定的。而且,需要指出的是,这里的-R参数输入的human.fasta不是BWA比对中的索引文件前缀,而是参考基因组序列(FASTA格式)文件,下同。
另外,在重比对步骤中,我们还看到了两个陌生的VCF文件,分别是:1000G_phase1.indels.b37.vcf和Mills_and_1000G_gold_standard.indels.b37.vcf。这两个文件来自于千人基因组和Mills项目,里面记录了那些项目中检测到的人群Indel区域。我上面其实也提到了,候选的重比对区除了要在样本自身的比对结果中寻找之外,还应该把人群中已知的Indel区域也包含进来,而这两个是我们在重比对过程中最常用到的。这些文件你可以很方便地在GATK bundle ftp中下载(ftp://ftp.broadinstitute.org/bundle/),注意一定要选择和你的参考基因组对应的版本,我们这里用的是b37版本。
不过在使用GATK的HaplotypeCaller模块的时候,不需要进行重比对,因为该算法在设计的时候就已经考虑了重比对,而使用其它工具的时候,重比对是必须的。
网友评论