Augustus指南


官方 Tutorial Index

Augustus是一个真核生物基因预测软件,目前有网页服务端本地版,它基于Hidden-Markov Model(隐马尔科夫链模型HMM)(一个不错的HMM介绍博客)的预测方法,因此需要一个已经研究清楚的物种进行training(学习)之后再对新物种进行prediction(预测),用于trainning的物种应该和需要预测的物种具有较近的亲缘关系

特点:官方介绍

Input:

Trainning:

已知物种序列

核酸序列:fasta格式 ( genome.fa )

蛋白序列:fasta格式 ( proteins.aa )

Prediction

未知基因组序列

核酸序列:fasta格式 ( NewGenome.fa )

Output:

可能用到的其他软件

  1. Scipio

    下载地址中下载Scipio Version 1.4,压缩包中包括perl文件和说明文件

Scipio是利用蛋白序列标记出基因组结构的软件,提供核酸序列蛋白序列后,它可以为你解析出基因的结构。它基于BLAT的序列比对功能。scipio可以很好地跨contigs比对。

用途包括:

  1. 检测序列assembly的正确性
  2. 识别外显子区域,可变剪切
  3. 用已知物种蛋白序列描述未知物种的基因组结构
  1. Scipio依赖:perl中的YAML module

    Ubuntu安装yaml-perl命令:
sudo apt-get install libyaml-perl
  1. Scipio依赖:BLAT 下载地址,下载后的文件中有数个可执行文件,请添加进环境变量中,方便Scipio直接调用

Blat,全称 The BLAST-Like Alignment Tool,可以称为"类BLAST 比对工具",对于DNA序列,BLAT是用来设计寻找95%及以上相似至少40个碱基的序列。对于蛋白序列,BLAT是用来设计寻找80%及以上相似至少20个氨基酸的序列。速度快,共线性输出结果简单易读。Blat 把相关的呈共线性的比对结果连接成为更大的 比对结果,从中也可以很容易的找到 exons 和 introns。


Trainning Augustus

重要提示:如果是第一次training,按照下面所述的步骤可以正常完成,但是如果效果不佳,官方介绍中有一些小经验,本文没有包含这部分内容

  • Augustus基于Hidden-Markov Model(隐马尔科夫链模型)的预测方法,因此需要一个已经研究清楚的物种进行training(学习)之后再对新物种进行prediction(预测),用于trainning的物种应该和需要预测的物种具有较近的亲缘关系或者就是本物种。
  • Trainning的实质是用已知的知识调整模型中的种种参数,因此一般已知的知识必须包含各种可能的情况。具体地说,在预测基因的模型中,用于training的数据就必须拥有是基因的序列以及不是基因的序列(基因间隔区,内含子等)。
  • Trainning的数据会被分为两部分,一部分用于Trainning,另一部分用于检测调整参数后的模型。前者称为training set,后者称为test set

作为用于training Augustus的已知信息,一般可以有以下几种:

  1. 该物种已经存在的基因结构信息(比如:GenBank中的数据)
  2. 该物种ESTs信息加上相对于的基因组信息(可使用PASA
  3. 该物种de novo组装的RNA-seq数据加上对应的基因组数据
  4. 该物种已知的蛋白序列和对应的基因组数据
  5. 近源物种的基因结构信息
  6. 已经Trainning过的模型保存参数集后可以反复使用

1. 对于没有直接基因结构的情况,可以使用Scipio制作基因结构文件

如果已经有基因结构信息,且文件格式为Genbank格式的文件(*.gb)可以跳过此步。这种文件包含了:

  1. 核酸序列
  2. CDS编码区域的序列坐标信息
  3. UTR信息

1.1 Run Scipio

scipio.1.4.pl --blat_output=prot.vs.genome.psl genome.fa proteins.aa > scipio.yaml # takes ~7m

scipio.yaml包含了每个蛋白alignment的细节,可用于下一步提取

  • 输入的基因组5M,耗时约7min
  • --blat_output=prot.vs.genome.psl的含义就是记录时间。
  • genome.fa和proteins.aa为fasta格式。

1.2 Extract a GFF file,从scipio.yaml中提取GFF (General Feature Format) 基因结构文件

cat scipio.yaml | yaml2gff.1.4.pl > scipio.scipiogff
scipiogff2gff.pl --in=scipio.scipiogff --out=scipio.gff
cat scipio.yaml | yaml2log.1.4.pl > scipio.log #产生log文件

scipio.gff文件是我们所希望得到的GFF文件,log文件可以帮助检测是否每个蛋白都得到标注。

scipio.gff长这样:

chr2R   Scipio  CDS     900562  900621  1.000   +       0       transcript_id "392"
chr2R Scipio CDS 904518 904880 1.000 + 0 transcript_id "392"
chr2R Scipio CDS 904940 905131 1.000 + 0 transcript_id "392"
chr2R Scipio CDS 905195 905263 1.000 + 0 transcript_id "392"
chr2R Scipio CDS 3595076 3596041 1.000 + 0 transcript_id "2517"
...

1.3 可选步骤 可视化基因结构(GBrowse)

GBrowse 下载并配置GBrowse,将GFF文件转化成GBrowse可读的文件。

1.4 将GFF文件转化成Genbank格式的文件

Augustus的etrainning学习软件需要输入Genbank格式的文件,这种文件包含了:

  1. 核酸序列
  2. CDS编码区域的序列坐标信息
  3. UTR信息

由于大部分的基因结构信息都是GFF或GTF格式,Augustus提供了gff2gbSmallDNA.pl进行格式转化

gff2gbSmallDNA.pl scipio.gff genome.fa 1000 genes.raw.gb

整合gff文件和fasta文件,genes.raw.gb文件中将会有每个基因序列和其1000bp的上下游基因间隔序列

1.5 去除不适合trainning的基因序列

genes.raw.gb文件已经符合Augustus的要求,但是其中可能包含:

  1. 可变剪切的基因
  2. 缺失启示密码子的基因
  3. 缺失终止密码子的基因
  4. 非正常的终止密码子(in-frame stop codons)

这些序列不适合用于软件的trainning,所以最好去除

etraining --species=generic --stopCodonExcludedFromCDS=true genes.raw.gb 2> train.err

得到问题序列文件train.err

--stopCodonExcludedFromCDS=true选项指将gb文件中的终止密码子视为cds中的一部分,这个选项需要视gb文件的来源而定,非scipio来源的文件可能需要设置为false

train.err长这样:

gene 186 transcr. 1 in sequence chr2R_549753-555284: Initial exon has length < 3!
gene 461 transcr. 1 in sequence chr2R_1034318-1036751: Initial Exon doesn't begin with start codon.
gene 567 transcr. 1 in sequence chr2R_1198437-1201521: Initial Exon doesn't begin with start codon.
gene 4537 transcr. 1 in sequence chr2R_1354359-1361857: Initial Exon doesn't begin with start codon.
gene 4783 transcr. 1 in sequence chr2R_1669860-1673241: Terminal exon doesn't end in stop codon. Variable stopCodonExcludedFromCDS set right?
gene 5161 transcr. 1 in sequence chr2R_2043765-2046183: Single exon gene doesn't begin with atg codon but with ccc
gene 6319 transcr. 1 in sequence chr2R_3734070-3735386: Initial Exon doesn't begin with start codon.
gene 3577 transcr. 1 in sequence chr2R_4767472-4770826: Initial Exon doesn't begin with start codon.

使用下面的命令来筛选掉这些问题序列:

cat train.err | perl -pe 's/.*in sequence (\S+): .*/$1/' > badgenes.lst
filterGenes.pl badgenes.lst genes.raw.gb > genes.gb
grep -c "LOCUS" genes.raw.gb genes.gb
# genes.raw.gb:594 原来序列有594个基因
# genes.gb:586 筛选后还剩586个

badgenes.lst为问题基因序列

genes.gb为没有问题的基因,依然是gb格式

2. 将用于Trainning的基因结构信息分为Trainning set和test set

随机的将genes.gb文件分为两个部分

randomSplit.pl genes.gb 100

该命令会生成genes.gb.test文件,它包含100条序列。

同时会生成genes.gb.trains文件,包含剩下的序列。

  • 为了满足test的统计学意义,test set必须足够大(100-200 genes),才能起到检测作用。
  • test set的选择必须满足随机,不能只是选择文件最前面100个或者最后面100个genes
  • randomSplit.pl是Augustus中包含的软件

3. 为你的物种产生meta参数文件

  • 模型中有两类参数:meta parametersparameters(一般参数)。
  • 前者包括拼接位点模型窗口的大小(the size of the window of the splice site models)马尔科夫模型顺序(the order of the Markov model)等;
  • 后者则是比如拼接位点模式的分布(the distribution of splice site patterns)编码区非编码区k-mer概率(the k-mer probabilities of coding and noncoding regions)等。
  • 一般来说meta parameters决定了parameters的算法,而且meta的数量比较少,而parameters则非常多
  • Training本质是调整模型中的parameters,但是不会改变meta parameters
new_species.pl --species=bug

假设我们的物种叫bug

这条命令会在环境变量AUGUSTUS_CONFIG_PATH指定的位置建立一系列文件和文件夹

就像这样:

creating directory /home/mario/augustus/trunk/config/species/bug/ ...
creating /home/mario/augustus/trunk/config/species/bug/bug_parameters.cfg ...
creating /home/mario/augustus/trunk/config/species/bug/bug_weightmatrix.txt ...
creating /home/mario/augustus/trunk/config/species/bug/bug_metapars.cfg ...
...

bug_parameters.cfg文件包含了meta parameters和parameters,还包括一些对output文件输出的控制选项。

编辑bug_parameters.cfg文件,将stopCodonExcludedFromCDS选项改为ture

4. 第一次Training

4.1 Trainning

这里将进行第一次Training,training所使用的meta parameters是默认值。

etraining --species=bug genes.gb.train

这条命令将会在环境变量AUGUSTUS_CONFIG_PATH指定的位置$AUGUSTUS_CONFIG_PATH/species/bug建立或者更新一些文件,这些文件是exon, intron和intergenic region的parameter文件(training的结果文件)

ls -ort $AUGUSTUS_CONFIG_PATH/species/bug/

展示出与模型相关的各个参数保存文件,

其中:bug_{intron,exon,igenic}.pbl是新生成的文件

4.2 Testing

那么,我们现在就可以使用之前划分出来的test set来检测Trainning的效果

Test set的文件为genes.gb.train

augustus --species=bug genes.gb.test | tee firsttest.out # takes ~1m
  • 这条命令对genes.gb.test中的所有核酸序列信息进行了预测,这里不会使用其中的结构信息的。
  • 之后又将预测信息和gb文件给出的结构信息进行了比较,从而评价trainning的模型。
  • 产生文件为firsttest.out*
grep -A 22 Evaluation firsttest.out

该命令展示了评价部分,输出这样的表格:

*******      Evaluation of gene prediction     *******

---------------------------------------------\
| sensitivity | specificity |
---------------------------------------------|
nucleotide level | 0.975 | 0.89 |
---------------------------------------------/ ----------------------------------------------------------------------------------------------------------\
| #pred | #anno | | FP = false pos. | FN = false neg. | | |
| total/ | total/ | TP |--------------------|--------------------| sensitivity | specificity |
| unique | unique | | part | ovlp | wrng | part | ovlp | wrng | | |
----------------------------------------------------------------------------------------------------------|
| | | | 115 | 76 | | |
exon level | 511 | 472 | 396 | ------------------ | ------------------ | 0.839 | 0.775 |
| 511 | 472 | | 40 | 5 | 70 | 43 | 3 | 30 | | |
----------------------------------------------------------------------------------------------------------/ ----------------------------------------------------------------------------\
transcript | #pred | #anno | TP | FP | FN | sensitivity | specificity |
----------------------------------------------------------------------------|
gene level | 118 | 100 | 53 | 65 | 47 | 0.53 | 0.449 |
----------------------------------------------------------------------------/

表格中有三个子表格:

  1. nucleotide level,sensitivity(预测到的百分率),specificity(其中正确的百分率)
  2. exon level, #pred total/unique(预测得到unique外显子总数),#anno total/unique(实际unique外显子总数),TP(正确的预测),FP(假阳性),FN(假阴性)
  3. gene level
  4. 100个基因中,预测到53个
  5. 83.9%的外显子被预测到
  6. 77.5%的外显子预测成功

5. optimize_augustus.pl的优化

  • 脚本optimize_augustus.pl可以通过不断迭代Tranning和Testing的过程,根据模型评价自动修改*_parameters.cfg文件中的meta parameters,使meta parameters的取值最优。
  • 这个脚本的运行会非常费时间,而且最终的效果一般只能提高准确度几个百分点,慎重使用
  • 在本例中Trainning基因组越5M,耗时越1d

    使用此脚本augustus和etraining命令必须在环境变量中

5.1 自动调整meta parameters

optimize_augustus.pl --species=bug genes.gb.train  # takes ~1d

本句命令最好加上nohup

命令完成后,meta parameters调整完毕。

5.2 retraining Augustus

meta parameters调整好后必须重新Trainning模型,否则没有任何意义。

etraining --species=bug genes.gb.train

同样你可以进行检验

augustus --species=bug genes.test.gb
  • 如果此时你的gene level的sensitivity还是低于20%说明Trainning set不够大,请添加数据。

  • 如果你获得了满意的Trainning结果,请开始prediction

Augustus指南(Trainning部分)的更多相关文章

  1. Augustus 进行基因注释

      目前的从头预测软件大多是基于HMM(隐马尔科夫链)和贝叶斯理论,通过已有物种的注释信息对软件进行训练,从训练结果中去推断一段基因序列中可能的结构,在这方面做的最好的工具是AUGUSTUS它可以仅使 ...

  2. augustus, gene prediction, trainning

    做基因组注释 先用augustus训练,然后再用maker做基因注释 augustus提供一些训练好的,如果有和你的物种非常接近的,直接用提供的,没有的话再自己训练. 网址: http://bioin ...

  3. GlimmerHMM指南

    GlimmerHMM指南 官方用户手册 GlimmerHMM是一种De novo的新基因预测软件. 新基因发现基于Generalized Hidden Markov Model (GHMM). Gli ...

  4. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  5. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  6. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  7. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  8. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  9. Atitit.研发管理软件公司的软资产列表指南

    Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...

随机推荐

  1. mybatis学习笔记(2)基本原理

    引言在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹(参考:<MyBatis----基础知识>).但是,为什么还要要学习mybatis的工作原理?因为,随着myb ...

  2. 并发编程从零开始(六)-BlockingDeque+CopyOnWrite

    并发编程从零开始(六)-BlockingDeque+CopyOnWrite 5.2 BlockingDeque BlockingDeque定义了一个阻塞的双端队列接口: 该接口继承了BlockingQ ...

  3. [源码解析] Pytorch 如何实现后向传播 (2)---- 引擎静态结构

    [源码解析] Pytorch 如何实现后向传播 (2)---- 引擎静态结构 目录 [源码解析] Pytorch 如何实现后向传播 (2)---- 引擎静态结构 0x00 摘要 0x01 Engine ...

  4. 关于stm32串口必须要学的5个串口以及串口应用和注意事项

    串口是我们常用的一个数据传输接口,STM32F103系列单片机共有5个串口. 其中1-3是通用同步/异步串行接口USART(Universal Synchronous/Asynchronous Rec ...

  5. 【BZOJ-2199】奶牛议会

    链接: BZOJ-2199 题意: 给出 \(n(1\leq n\leq 1000)\) 个点,\(m(1\leq m\leq 4000)\) 个形如:"点 \(a\) 取 \(ca\) 或 ...

  6. poj 2724 Purifying Machine(二分图最大匹配)

    题意: 有2^N块奶酪,编号为00...0到11..1. 有一台机器,有N个开关.每个开关可以置0或置1,或者置*.但是规定N个开关中最多只能有一个开关置*. 一旦打开机器的开关,机器将根据N个开关的 ...

  7. Python技法4:闭包

    闭包:用函数代替类 有时我们会定义只有一个方法(除了__init__()之外)的类,而这种类可以通过使用闭包(closure)来替代.闭包是被外层函数包围的内层函数,它能够获取外层函数范围中的变量(即 ...

  8. 『学了就忘』Linux基础命令 — 29、关机和重启

    目录 1.sync数据同步 2.shutdown命令 3.reboot命令 4.halt和poweroff命令 5.init命令 1.sync数据同步 sync命令的基本信息如下: 命令名称:sync ...

  9. C++ 默认拷贝构造函数 深度拷贝和浅拷贝

    C++类默认拷贝构造函数的弊端 C++类的中有两个特殊的构造函数,(1)无参构造函数,(2)拷贝构造函数.它们的特殊之处在于: (1) 当类中没有定义任何构造函数时,编译器会默认提供一个无参构造函数且 ...

  10. Qt5 C++ GUI界面 开发环境配置 详细教程

    本博客已暂停更新,需要请转新博客http://www.whbwiki.com/333.html Qt 下载 Qt 体积很大,有 1GB~3GB,官方下载通道非常慢,相信很多读者会崩溃,所以建议大家使用 ...