如何用 freebayes call SNP
1,软件介绍
FreeBayes is a Bayesian genetic variant detector designed to find small polymorphisms, specifically SNPs (single-nucleotide polymorphisms), indels (insertions and deletions),
MNPs (multi-nucleotide polymorphisms), and complex events (composite insertion and substitution events) smaller than the length of a short-read sequencing alignment.
FreeBayes is haplotype-based, in the sense that it calls variants based on the literal sequences of reads aligned to a particular target, not their precise alignment.
This model is a straightforward generalization of previous ones (e.g. PolyBayes, samtools, GATK) which detect or report variants based on alignments.
This method avoids one of the core problems with alignment-based variant detection--- that identical sequences may have multiple possible alignments.
haplotype: 单倍型。一个染色单体里具有统计学关联性的一类SNPs. 基因在一条染色体上的组合为haplotype
freebayse 不仅call SNPs , INDELs,还有
MNPs(multi-nucleotide polymorphisms), 连续两个snp位点,如ref为AT, alt为CG
Complex events(composite insetion and substitution events)
所有的结果为:
五中基本类型:'snp','ins','del','mnp','complex',
'snp,snp', 和ref不同的碱基有两个,比如ref为A, alt为T,G 并且这两个的数量都是显著的。但是对于杂合二倍体来说是可能的。举个例子,参考基因组某位点是A, 比对的reads中有两种情况,C和G, 这应该就是snp,snp。其他的这种情况以此类推。
默认的--ploidy就是 dploid, by default all samples are assumed to be diploid。
除了以上五种,还有杂合二倍体可能出现的一下几种情况:(但是这种情况占的比例非常小,因为从进化的角度来看,一个位点两个都突变的概率就很小。杂合度和遗传距离有关,遗传距离越远杂合度就高,遗传距离越近,纯合度越高。一般超过百分之一的杂合度就肯定是杂种了。粳稻和粳稻之间01肯定比粳稻和籼稻之间的01少!!)
'ins,snp', 'ins,ins', 'ins,mnp',
'del,mnp', 'del,del', 'del,snp', 'del,ins'
'mnp,snp', 'mnp,mnp',
'complex,complex', 'complex,del', 'complex,snp', 'complex,mnp', 'complex,ins',
软件中几个重要的参数:
--haplotype-length 应该是haplotype中各变异位点之间的距离,比如mnp和complex都应该是haplotype, 如果设置为0的话:mnp肯定是可以call出来, 因为mnp是连续的几个snp,每个snp之间的距离就是0。而complex比较复杂,如果ref和alt对应的碱基个数相等。当设置为0的时候,会被过滤掉, 但是不等的并不会被过滤掉。
如果不想要complex直接用--no-complex(-u)参数,但是这个参数会将complex拆分,比如可能一个complex拆分成了几个snp等等。如果使用--no-mnps(-X)的话也会分成两个snp,但是并不能保证每个snp的准确性。
之前做snp比较没有使用这个两个参数,所以导致相似度很低,以后将这两个参数加上以后再和sam和gatk比较。
--min-alternare-count 应该就是-C 观察到的最少的alt碱基数,这个很不好设置,因为我觉得深度不同,应该设置的值也不同,整个一刀切不好。 假如深度为10 , 你-C设置为2.和深度是100-C设置为2的效果和你想象的结果是不同的,100的时候你也许想着5以下的都别call出来,深度为10的时候,你也许2一下的别call出来。
--min-alternate-fraction 就是-F 下面有解释。
-K --pooled-continuous。 Output all alleles which pass input filters, regardles of genotyping outcome or model. 问一下--pooled-continuous什么意思?
只加-K 结果类型有:
'mnp', 'ins', 'del', 'snp', 'complex'。
'complex,complex', 'complex,del', 'del,mnp', 'del,ins', 'del,del', 'snp,snp', 'complex,snp', 'complex,mnp', 'del,snp', 'mnp,snp', 'ins,ins', 'ins,snp', 'ins,mnp', 'mnp,mnp', 'complex,ins'。
(三种类型)'complex,complex,del', 'del,mnp,snp', 'del,snp,snp', 'del,ins,ins', 'complex,ins,mnp', 'complex,del,ins', 'complex,complex,complex', 'complex,ins,ins', 'del,del,snp', 'complex,ins,snp', 'mnp,snp,snp', 'ins,mnp,snp', 'del,ins,snp', 'complex,complex,mnp', 'mnp,mnp,snp', 'complex,del,del', 'del,del,del', 'ins,ins,snp', 'complex,snp,snp', 'del,del,mnp', 'del,del,ins', 'complex,del,mnp', 'complex,del,snp', 'ins,snp,snp', 'complex,mnp,mnp', 'mnp,mnp,mnp', 'snp,snp,snp', 'ins,ins,mnp', 'del,mnp,mnp', 'complex,complex,snp', 'ins,ins,ins','complex,mnp,snp', 'complex,complex,ins',
(四种类型)'complex,complex,complex,mnp', 'del,del,del,del', 'complex,complex,ins,snp', 'complex,ins,ins,snp', 'complex,del,mnp,snp', 'complex,del,del,snp', 'complex,complex,del,del', 'complex,complex,del,snp', 'complex,mnp,snp,snp', 'complex,ins,ins,ins',
'ins,ins,ins,snp', 'complex,complex,snp,snp', 'complex,complex,complex,snp', 'complex,complex,complex,complex', 'mnp,snp,snp,snp', 'complex,complex,complex,del', 'del,snp,snp,snp', 'complex,complex,mnp,snp','mnp,mnp,snp,snp', 'complex,del,snp,snp','del,del,del,snp'
后面两种类型,在其他模式下是call不出来的,观察了一下结果,对于类型为complex,complex,complex,complex, 比如某个位点的深度为5, 而alt的深度分别为2,1,1,1。 很明显是测序错误或比对错误导致的这种情况。所以不要用这个参数。
--report-monomorphic :
Report even loci which appear to be monomorphic, and report all considered alleles, even those which are not in called genotypes. Loci which do not have any potential alternates have '.' for ALT.
会报告每个位点。虽然这个位点并没有alt base, 基因型为0/0, alt为. 相当于你的参考序列有多长,就有多少个报告位点。。。。慎重考虑是否需要。
-n --use-best-n-alleles N。 Evaluate only the best N SNP alleles, ranked by sum of supporting quality scores. (Set to 0 to use all; default: all)。 如果将n设置为1,只会call出5中基本类型,其他的都会被滤掉。但是除了滤掉others,这五中基本类型也会减少很多!
下面两张图类型的顺序为: snp, ins, del, mnp, complex, others, total
上图是没有加n1
上图是加了n1, 可以看到others没有了,但是其他五中类型都少了很多。查看了一下丢失的位点,并没有发现质量很低,深度很低等情况。。所以这参数还是不要用了,丢太多数据了!问海宝这个参数到底是什么一个概念。
如果将n设置成2, 默认的设置为0(all)结果基本没有区别。
2,安装与使用
服务器已经安装好软件,下面举例说明用法,
参考序列为:
RAP_cDAN.fasta
bam文件为:
LCS173-1.sorted.rmp.rg.bam
LCS173-2.sorted.rmp.rg.bam
LCS173-3.sorted.rmp.rg.bam
RCS173-1.sorted.rmp.rg.bam
RCS173-2.sorted.rmp.rg.bam
RCS173-3.sorted.rmp.rg.bam
这是样本CS173的六组数据,每组bam数据都经过了sort, remove duplicate, add read group 步骤,这几个前期处理数据步骤是必须的。对bam文件的处理
详见本博客其他文章。除了这几步以为,还要对bam文件进行index,即每个bam文件都要有相应的bai文件。数据处理好后,就可以进行call snp了。
命令:
freebayes -f RAP_cDAN.fasta -L bamfile.list > CS173.vcf
其中,-f 后跟参考序列。-L 后面跟纯文本文件,里面就是bam文件的名字,因为文件较多,所以将名字都放到一个文件中。如果你只有一个文件,那直接将
文件名放于参考序列后面就可以了。 > 是进行重定向,即将结果保存到CS173.vcf文件中。
也可以同时call 不同的样本, 只要将不同的样本数据放到bam.list文件中就可以了,注意,不同样本数据的read group必须唯一,不能重复。
当命令结束后,就会得到结果文件,文件中记录了snp的信息。详细的vcf格式说明另见博客文章。
对于bam文件, 可以合并去call, 也可以分开向上面那样去call. 结果是一样的。建议不合并,既然一样, 干嘛多做合并那一步?浪费时间和硬盘空间。freebayse会根据bam的SM将不同的样本分开,和单独call一个样本相比,同时call多个样本的snp,结果文件格式上会有些差别。
Format后面是对各个样本的描述,
只要某个样本在这个变异位点上有比对情况,就会有相应的信息,但是如果这个位点对于某个样本就没有任何信息,会用点.来代替这个样本在此点的情况。同时在一个文件中展现多个样本,有一个问题,比如info列中的信息,type指的是哪个样的?明明是三个样,为何只有一个类型。
另外ALT列,指的是哪个样的?当三个样的类型是00 01 11 还可以区分,但是如果类型更复杂些,必定是区分不清,下一步研究主要集中在snp。
这是最简单的使用方法,还有一些参数,如果感兴趣的话可以调试,如-C ,默认值为2,即变异位点处至少有两个和参考碱基不同,才会考虑是snp位点。
假如,此某位点的覆盖度为10,但之后一个和参考碱基不同,剩下9个是一样的,那么这个位点不会被call出。
另一个参数-F (--min-alternate-fraction)默认为0.2 ,即至少有20%的碱基和参考碱基不同才能被call出。假如某位点深度为100,但是只有10个碱基和参考序列不同,是不会被call出的。如果该值设置为0,那么参考序列的每个碱基位点都会被call SNP, 尽管没有,也会用0/0代替。现在有个问题是,加入深度是1000, alt是190, 如果按照默认的,这个位点不会出现在结果中,但很明显这应该是一个杂合位点。因为190个碱基被测错, 并且190个测错的结果都一样,这基本是不可能的。所以这个参数的设置挺重要的,怎么样保留我们需要的snp位点。需要考虑一下,比如考虑DP和测序平均深度?
这主要是考虑到了测序错误,比对错误等原因,才设置下限,目的是提高call snp的准确性。但是要根据你自己的数据情况,假如你用RNA-seq数据研究等位基因特异性表达,
某些位点也许表达量很多,深度达到了1000,其中有100个碱基和参考序列有差别,如果你用默认设置,此时并不能将snp call 出,但这可能是一个很重要的特异表达位点。
所以要根据自己的使用目的来设置参数。
3,更多的例子。
examples:
# call variants assuming a diploid sample
freebayes -f ref.fa aln.bam >var.vcf
# require at least 5 supporting observations to consider a variant
freebayes -f ref.fa -C 5 aln.bam >var.vcf
# use a different ploidy
freebayes -f ref.fa -p 4 aln.bam >var.vcf
# assume a pooled sample with a known number of genome copies
freebayes -f ref.fa -p 20 --pooled-discrete aln.bam >var.vcf
# generate frequency-based calls for all variants passing input thresholds
freebayes -f ref.fa -F 0.01 -C 1 --pooled-continuous aln.bam >var.vcf
# use an input VCF (bgzipped + tabix indexed) to force calls at particular alleles
freebayes -f ref.fa -@ in.vcf.gz aln.bam >var.vcf
# generate long haplotype calls over known variants
freebayes -f ref.fa --haplotype-basis-alleles in.vcf.gz \ --haplotype-length 50 aln.bam
# naive variant calling: simply annotate observation counts of SNPs and indels
freebayes -f ref.fa --haplotype-length 0 --min-alternate-count 1 \ --min-alternate-fraction 0 --pooled-continuous --report-monomorphic >var.vcf
对结果进一步筛选,如qual, DP, AO....
大部分问题是出在那些深度较低的位点。
freebayes 产生的是VCF 4.1, 适用于描述很多样本,当然也可以描述一个样本
在freebayes中,qual 指这个位点是变异位点的概率, 理解为1-P, P 是这个位点是纯合的概率。
ROC receiver-operator characteristic ROC曲线
freebayes可以同时call多个样本:
freebayes isdesigned to be run on many individuals from the same population(e.g. many human individuals)simultaneously.
同时call的好处,1, 能够使结果更加准确。2,最后输出文件一致,更容易下游处理, 如某个位点不同样本的情况。如果单独call, 这个样本在这是纯合就不会显示,但是一起call, 都会显示出来。
不同的样本是根据RG信息来区分的, 注意不同样本他们的group ID 不能一样。
The VCF output will have one column per sample in the input.
3,进一步阅读
https://github.com/ekg/freebayes
在装有freebayes的服务器中 敲击 freebayes -h
By freemao
FAFU.
如何用 freebayes call SNP的更多相关文章
- 如何用 MEF 扩展应用程序
最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后 ...
- VS2015下如何用编译、调试程序。
VS2015下如何用编译.调试程序. (通过实践给出截图) 安装步骤: 下载安装网址[VS2015下载地址](http://www.ithome.com/html/win10/164028.htm) ...
- 如何用Azure Web App Services接入微信公众号
注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号 如何用Azure Web App Services接入微信公众号 简介 此示例演示如何创建Azu ...
- 如何用hypermesh生成包含interface的流体网格
在计算气动声学的时候,有些情况是需要我们提取流体计算的结果作为声学分析的边界条件,但是,有些流体网格因为物理模型的问题需要我们设定interface,恰恰你是机械,对流体了解一点,又不想花费太多时间来 ...
- 如何用Qt做SolidWorks二次开发
这个问题困扰了我2年了,之前找到的教程都是MFC的,ATL导入向导或是通过导入类型库的方式来调用控件,我一直都搞不明白. 最近学习了ActiveQT以及通过ActiveQT控制EXCEL.Word.P ...
- 如何用Node编写命令行工具
0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...
- 如何用easyui+JAVA 实现动态拼凑datagrid表格(续)
前面一段时间写了一篇文章: 如何用easyui+JAVA 实现动态拼凑datagrid表格 这篇文章的话,效果是可以实现,但是经过我反复试验,还是存在一些问题的. 今天这篇文章就是向大家介绍下如何避免 ...
- 如何用ORM支持SQL语句的CASE WHEN?
OQL如何支持CASE WHEN? 今天,一个朋友问我,OQL可否支持CASE WHEN语句?他给的示例SQL如下: then '启用' else '停用' from tb_User OQL是SOD框 ...
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...
随机推荐
- php安装出现的部分错误
在CentOS编译PHP5的时候有时会遇到以下的一些错误信息,基本上都可以通过yum安装相应的库来解决.以下是具体的一些解决办法: checking for BZip2 support… yes ch ...
- 使用URL读取网络资源
import java.io.InputStream;import java.io.OutputStream;import java.net.URL; import android.os.Bundle ...
- HTML5表单新增属性
1.form 原来html里面,表单里的元素应该包裹在表单里,如 <form action="login.php" method="get"> &l ...
- POJ 2482 扫描线(面积覆盖最大次数)
Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10806 Accepted: ...
- CoHTMLDocument
http://blog.csdn.net/dlwxn/article/details/2860329 http://www.itnose.net/detail/120267.html 不知道是 线程内 ...
- Spring学习笔记之Bean的一些属性设置
1.beans 里边配置default-init-method="shunge",有这个方法的会执行,没有也不会报错 2.beans 里边配置default-destroy-met ...
- vector中的元素删除
删除vector中的元素,最容易的方法就是使用vector的erase()函数. vector vec;for ( vector::iterator iter = vec.begin(); iter! ...
- MapReduce基础
这篇文章翻译自Yahoo的Hadoop教程,很久之前就看过了,感觉还不错.最近想总结一下以前学的东西,看到现在关于Hadoop的中文资料还比较少,就有了把它翻译出来的想法,希望能帮助到初学者.这只是Y ...
- poj2129 dp
//Accepted 320 KB 47 ms //dp //dp[i][j]=1 表示用s1的前i个,s2的前j个字符能构成s3的前i+j-1个字符 //dp[i][j]=0 表示构不成 //dp[ ...
- EasyUI 验证框使用方法
使用过程中的一积累,备查. EasyUI 验证框使用方法://***************************missingMessage:未填写时显示的信息validType:验证类型见下示例 ...