一、Variant Calling简介
Variant Calling是指利用Nucleotide序列信息来确定样本中存在的SNPs、Indels、Copy number variations等变异。它是基因组学和生物信息学中的一个基本任务,可以帮助研究者了解生物种群的遗传变异与表达差异,从而更好地理解生物的生理、病理和物种的进化。
Variant Calling的过程可以用三个步骤来描述:首先,对比目标基因组和参考基因组,利用适当的算法来寻找样本的SNPs、Indels和Copy number variations等变异类型;其次,进行变异过滤,去除高比例的假阳性和假阴性;最后,进行注释以便更深入地了解这些变异的生物学意义。
二、Variant Calling算法
Variant Calling的算法主要分为两类:一类是基于比对的算法,另一类是基于组装的算法。基于比对的算法需要将样本的序列数据和参考基因组序列比对来定位样本中的SNPs和Indels等变异。 基于组装的算法则是使用组装软件将重测序数据组装成独立的序列集合,然后比较这些序列之间的差异来确定变异。两种算法都有其优点和限制,分别适用于不同的应用场景。
在基于比对的算法中,常用的算法包括GATK,SAMtools,FreeBayes,VarScan等。GATK是广泛使用的Variant Calling工具之一,它采用了一种基于贝叶斯统计学的算法,可以有效减少假阳性的数量。SAMtools是另一种经典的Variant Calling工具,它的主要特点是高效性和灵活性,能够在大数据集上处理变异,但是它的结果可能包含较高的假阳性。
而在基于组装的算法中,常用的算法包括SOAPdenovo2,SPAdes,ABySS等。这些算法通常用于对非模式生物的基因组进行重测序分析或经过DNA提取后失去完整性的DNA样本进行变异检测。相比于基于比对的算法,基于组装的算法可以检测到更长的Indels和复杂的结构重排。
三、Variant Calling数据过滤
Variant Calling结果需要进行过滤来减少假阴性和假阳性。常用的Variant Calling结果过滤策略包括:对变异的质量过滤,即删除指定阈值下的变异;对变异的测序深度过滤,即删除低于指定阈值的变异;信号比筛选,即检测每个单个核苷酸多种等位基因发生率的比率,删除低于设定阈值的变异等。
同时,也需要注意Variant Calling结果的误差来源,解决误差的方式包括:标准化sam/bam文件,以减少误差;预处理测试数据,以评估测试数据的鲁棒性;提高测序深度,以减少变异检测的假阳性;增加重覆性,以减少变异检测的假阴性。
四、Variant Calling结果注释
Variant Calling后需要对变异进行注释,以便更深入地了解这些变异的生物学意义。变异注释的方式有很多种,从简单到复杂不等。常用的注释方式包括:首先通过Ensembl、UCSC等数据库将变异与转录本、基因以及蛋白质结构联系起来;进一步利用维基基因组注释器(WikiGenome)等工具可以对变异进行更详细的注释,包括影响基因的功能、疾病相关性等;最后,结合不同数据库和公共资源可以对变异进行更加深入的生物学意义注释。
五、Variant Calling的示例代码
# 利用GATK基于比对的Variant Calling代码示例(以hg19为参考基因组)
java -jar $GATK/Jar/GenomeAnalysisTK.jar \
-T UnifiedGenotyper \
-R $ref/hg19.fasta \
-I $BAM/sample1.bam \
-o $VCF/sample1_raw.vcf \
-ploidy 2 \
-stand_call_conf 30 \
-stand_emit_conf 10 \
-dcov 1000 \
-glm BOTH
# 利用SAMtools进行基于比对的Variant Calling代码示例(以hg19为参考基因组)
samtools mpileup -uf $ref/hg19.fasta $BAM/sample1.bam | bcftools call -vm
# 利用FreeBayes进行基于比对的Variant Calling代码示例(以hg19为参考基因组)
freebayes -f $ref/hg19.fasta $BAM/sample1.bam > $VCF/sample1_raw.vcf