biostar handbook(十)|如何进行变异检测

2024-06-23 21:08

本文主要是介绍biostar handbook(十)|如何进行变异检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2013053-e65d78595eb8ffff.png
变异检测流程

什么是基因组变异

基因组变异是一个定义比较模糊的概念. 所谓的变异是相对于一个完美的“参考基因组”而言。但是其实完美的“参考基因组”并不存在,因为我们只是选择某一个物种里的其中似乎比较正常的个体进行测序组装,然后基于它进行后续的研究。简单的说,参考和变异是相对而言,变异也可能完全正常。

常见的基因组变异一般可以归为如下几类:

  • SNP, 单核苷酸多态性, 一个碱基的变化
  • INDEL,插入或缺失, 一个碱基的增加或移除
  • SNV, 单核苷酸变异,一个碱基的改变,可以是SNP,也可以是INDEL
  • MNP, 多核苷酸多态性,一个区块中有多个保守的SNP
  • MNV,多核苷酸变异,一个区块中有多个SNP或INDEL
  • short variations, 小于50bp的变异
  • large-scale variation, 大于50bp的大规模变异
  • SV, 结构变异,通常是上千个碱基,甚至是染色体级别上的变异

研究这些变异需要用到不同的手段,其中普通的DNA二代测序在寻找20bp以下的变异比较靠谱,对于大于1kb的结构变异而言,采用光学图谱(Bionanogenomics)可能更加靠谱一点。因此,对于目前最常用的二代测序而言,还是尽量就找SNP和INDEL吧,几个碱基的变化找起来还是相对容易些和靠谱些。

对于SNP的定义这里也要注意下,最初的SNP的定义指的是单个碱基导致的多态性,在群体中广泛存在(1%),可用来作为分子标记来区分不同个体。目前的定义比较粗暴一点,就是那个和“参考基因组”不同的单个位点。值得注意的是,这个概念可能不同人还有不同的定义,当你和别人就某个问题争执的时候,最好问问他是如何定义这个基本概念。由于SNP的广泛存在,并且变异可能会导致疾病,也就是存在某些SNP会导致疾病。Online Mendelian Inheritance in Man,就是一个人类遗传疾病数据库,建议去看下。

最后说下genotype和haplotype。genotype,基因型指的是一个个体的遗传组成。但是对于基因组变异而言,基因型通常指的是个体在某个位点上的等位基因情况。haplotype, 单倍型最初指的是从单个亲本中遗传的一组基因,而在基因组变异背景下,则是指一组变异。

一次简单的变异检测实战

变异检测(variant calling)即通过比较参考序列和比对结果来找到两者的不同并记录,基本上可以分为如下几步:

  • 序列比对
  • 比对后处理(可选)
  • 从联配中确定变异
  • 根据某些标准进行过滤
  • 对过滤的变异注释

这里面的每一个可选的工具都有很多,不同工具组合后的分析流程得到的结果可能会有很大差异。在变异检测这一部分目前就有很多软件,但是常用并且相对比较可靠的工具有如下几个:

  • bcftools: http://www.htslib.org/doc/bcftools.html
  • FreeBayes: https://github.com/ekg/freebayes
  • GATK: https://software.broadinstitute.org/gatk/
  • VarScan2: http://varscan.sourceforge.net/

当然这些工具最初都是用于人类基因组。

以埃博拉基因组为例完成一次简单的Variant Calling,所需工具为efetch, fastq-dump, emboss/seqretbwa, samtoolsFreeBayessnpEff。这些都可以通过conda快速安装。

第一步: 获取参考基因组序列,并建立索引

# 建立文件夹
mkdir -p refs
# 根据Accession下载
ACC=AF086833
REF=refs/$ACC.fa
efetch -db=nuccore -format=fasta -id=$ACC | seqret -filter -sid $ACC > $REF
bwa index $REF

第二步: 获取需要比对的测序数据, 以前10w条为例

# 仅要前10w条read
SRR=SRR1553500
fastq-dump -X 100000 --split-files $SRR

第三步:序列比对

BAM=$SRR.bam
R1=${SRR}_1.fastq
R2=${SRR}_2.fastq
TAG="@RG\tID:$SRR\tSM:$SRR\tLB:$SRR"
bwa mem -R $TAG $REF $R1 $R2 | samtools sort > $BAM
samtools index $BAM

第四步:使用freebayes或HaplotypeCaller(GATK4)检测变异

freebayes -f $REF $BAM > ${SRR}_freebayes.vcf
gatk HaplotypeCaller -R $REF-I $BAM -stand-call-conf 30 \-bamout bamout.bam--genotyping-mode DISCOVERY-O ${SRR}_haplotypecaller.vcf

用IGV可视化的效果如下:

2013053-e372b9241c285a31.jpg
IGV对BAM和VCF文件进行可视化

这是最简单的变异检测流程,对于找到的变异还可以进一步过滤,这一部分内容见call variant中关于snp筛选的一些思考

第五步:变异标准化(可选)

由于VCF文件的灵活性,同一种变异可以通过不同的形式表示, 如下图

2013053-2c0545f3d78aa314.jpg
出自 "Unified representation of genetic variants"

变异标准化按照如下规则对变异位点表示进行简化

  • 尽可能以少的字符表示变异
  • 无等位基因可以标识为长度为0
  • 变异位点必须左对齐

看起来很复杂,其实操作起来很简单

bcftools norm -f $REF SRR1553500_freebayes.vcf  > SRR1553500_freebayes_norm.vcf
# Lines   total/split/realigned/skipped:    493/0/0/0

大部分软件,如GATK, freebayes已经是标准化的结果。

变异检测那么简单吗?

经过简单的实战之后,似乎变异检测是一件非常容易的事情,只要敲几行命令就行了。当然最开始我也是想的,毕竟无知者无畏,但是了解的越多,你就会发现事情并没有那么简单。**大部分基因组相关的DNA序列有一些特性是人类的直觉所不能理解的,因为这需要考虑一些背景。

  1. DNA序列可以非常的长
  2. A/T/G/C能够构建任意组合的DNA序列,因此在完全随机情况下,即使随机分配也能产生各种各样的模式。
  3. DNA序列只有部分会受到随机影响,基本上这部分序列都是有功能的。
  4. 不同物种的不同的DNA序列受到不同的随机性影响
  5. 我们按照实验流程将大片段DNA破碎成小的部分,并尝试通过和参考基因组比对找到原来的位置。只有它依旧和原来的位置非常靠近,才能进一步寻找变异。

因此即便序列和基因组某个序列非常接近,从算法的角度是正确比对,但其实偏离了原来正确的位置,那么从这部分找到的变异也是错误的。那我们有办法解决这个问题嘛?基本上不可能,除非技术进步后,我们可以一次性通读所有序列。当然目前比较常用的方法是找到最优变异,并且那个变异能更好的解释问题,且和每条read中的变异都是一致的。这就是目前变异检测软件常用策略:realignment或probabilistic alignment。

变异注释

变异注释意味着猜测遗传变异(SNP, INDEL, CNY, SV)对基因功能,转录本和蛋白序列以及调控序列的影响。为了对变异进行预测,预测软件需要你提供基因组注释信息,并且注释信息的完善程度决定了预测的准确性。变异预测一般会提供如下结果

  • 变异位点所在基因组注释的位置,是转录本上游,还是编码区,还是非编码RNA
  • 列举出收到影响的转录本和基因
  • 确定变异在蛋白序列上的影响, 如stop_gained(终止密码子提前), missense(错义), stop_lost(终止密码子缺失), frameshift(移码)等
  • 对于人类,还可以和已知的位点进行匹配

这些效应的定义可以在序列本体论查询.

变异注释常用软件有:VEP, snpEFF, AnnoVar, VAAST2. 其中VEP是网页工具http://asia.ensembl.org/Tools/VEP, 使用很方便,可惜支持的物种有限。snpEFF可以说是支持物种最多的工具,这里使用它。

snpEff databases > listing.txt
# 确认物种名
grep -i ebola databases
# 下载
snpEff download ebola_zaire

下载之后还需要检查一下snpEFF提供的注释是否和我们所使用参考基因组一致.

snpEff dump ebola_zaire | less

很不幸的是,snpEFF提供的是基于KJ660346构建的数据库,而我们使用的是AF086833。因此需要重新下载对应的参考基因组重新比对,进行注释。对饮参考基因组的地址为https://www.ncbi.nlm.nih.gov/nuccore/KJ660346.1?report=fasta

snpEff ebola_zaire ${SRR}_freebayes.vcf > ${SRR}_annotated.vcf

最终会生成注释后的VCF文件以及变异位点的描述性报告。

这篇关于biostar handbook(十)|如何进行变异检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088276

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

Python脚本:对文件进行批量重命名

字符替换:批量对文件名中指定字符进行替换添加前缀:批量向原文件名添加前缀添加后缀:批量向原文件名添加后缀 import osdef Rename_CharReplace():#对文件名中某字符进行替换(已完结)re_dir = os.getcwd()re_list = os.listdir(re_dir)original_char = input('请输入你要替换的字符:')replace_ch