目前的从头预测软件大多是基于HMM(隐马尔科夫链)和贝叶斯理论,通过已有物种的注释信息对软件进行训练,从训练结果中去推断一段基因序列中可能的结构,在这方面做的最好的工具是AUGUSTUS它可以仅使用序列信息进行预测,也可以整合EST, cDNA, RNA-seq数据作为先验模型进行预测。
  • 安装

安装较为复杂,可选用conda进行安装

  • 使用

(1)若存在已经被训练的物种(augustus --species=help查看),则直接使用一下代码进行预测基因,以拟南芥为例:

1 augustus --speices=arabidopsis test.fa > test.gff

(2)若不存在被训练过的物种,则需要进行训练

  • 准备训练集和测试集

根据Augutus的官方教程,可靠的基因结构序列的要求如下:

a. 提供基因的编码部分,包含上游几KB。通常而言,基因越多,效果越好,至少准备200个基因以上。还得保证这些基因中要有足够多的外显子,这样子才能训练内含子

b. 这些基因的基因结构一定要足够的准确。不过,也不需要百分百的正确,甚至注释都不需要特别的完整,只要保证起始密码子和终止密码子的准确是准确的即可。

c. 需要保证这些基因没有冗余,也就是说不同序列如果有几乎相同的注释后氨基酸序列,那么仅仅取其中一个(AUGUSTUS教程的建议是:保证任意两个基因在氨基酸水平上低于70%的相似度),这一步既可以避免过度拟合现象,也能用于检验预测的准确性

d. 一条序列允许有多个基因,基因可以在正链也可以在负链,但是这些基因间不能有重叠,每个基因只要其中一个转录本,存放格式是GenBank

之后随机将注释数据集分成训练集和测试集,为了保证测试集有统计学意义,因此测试集要足够多的基因(100~200个),并且要足够的随机。

基因结构集的可能来源有:

a. Genbank

b. EST/mRNA-seq的可变剪切联配, 如PASA

c. 临近物种蛋白的可变剪切联配,如GeneWise

d. 相关物种的数据

e. 预测基因的迭代训练

  • 流程如下

(1)格式转换;基于选取物种的GFF3以及ref.fa 文件将其转换为Genbank格式

1 perl ~/miniconda2/bin/gff2gbSmallDNA.pl ./Spinach_genome/spinach_gene_v1.gff3 ./Spinach_genome/spinach_genome_v1.fa 1000 genes.raw.gb

(2)尝试训练,捕捉错误;

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

(3)过滤掉可能错误掉基因结构

1 cat train.err | perl -pe 's/.*in sequence (\S+): .*/$1/' >badgenes.lst
2 filterGenes.pl badgenes.lst genes.raw.gb > genes.gb

(4)提取上一步顾虑后的genes.db中的蛋白  (其中第4-6步骤,也有人忽视)

1 grep '/gene' genes.gb |sort |uniq  |sed 's/\/gene=//g' |sed 's/\"//g' |awk '{print $1}' >geneSet.lst
2 python extract_pep.py geneSet.lst Spinach_genome/spinach_pep_v1.fa

(5)将得到的蛋白序列进行建库,自身blastp比对。根据比对结果,如果基因间identity >= 70%,则只保留其中之一,再次得到一个过滤后的gff文件,gene_filter.gff3

1 makeblastdb -in geneSet.lst.fa -dbtype prot -parse_seqids -out geneSet.lst.fa
2 blastp -db geneSet.lst.fa -query geneSet.lst.fa -out geneSet.lst.fa.blastp -evalue 1e-5 -outfmt 6 -num_threads 8
3 python delete_high_identity_gene.py geneSet.lst.fa.blastp Spinach_genome/spinach_gene_v1.gff3

(6)将得到的gene_filter.gff3 转换为genbank 格式文件

1 perl ~/miniconda2/bin/gff2gbSmallDNA.pl  gene_filter.gff3  ./Spinach_genome/spinach_genome_v1.fa 1000 genes.gb.filter

(7)将上一步过滤后的文件随机分成两份,测试集和训练集。其中训练集的数目根据gb的LOCUS数目决定,至少要有200

1 ## 100 为测试集的基因数目,其余为训练集
2 randomSplit.pl genes.gb.filter 100

(8)初始化HMM参数设置(在相应~/minicode/config/species/relative name中形成参数,若之前已经存在该物种名字,则需要删除),并进行训练

1 new_species.pl --species=spinach
2 etraining --species=spinach genes.gb.filter.train

(9)用测试数据集检验预测效果,这里可以比较我们训练的结果,和近缘已训练物种的训练效果

1 augustus --species=spinach genes.gb.filter.test | tee firsttest.out
2 augustus --species=arabidopsis genes.gb.filter.test | tee firsttest_ara.out

在 firsttest.out 的尾部可以查看预测结果的统计,首先需要解释几个统计学概念

  • TP(True Positive): 预测为真,事实为真
  • FP(False Positive): 预测为真,事实为假
  • FN(False Negative): 预测为假,事实为真
  • TN(True Negative): 预测为假,事实为假

基于上述,引出下面两个概念。"sensitivity"等于TP/(TP+FP)(预测到的百分率), 是预测为真且实际为真的占你所有认为是真的比例."specificity"等于TN/(TN+FN)(其中正确的百分率), 是预测为假且实际为假的占你所有认为是假的比例。我们希望在预测中,尽可能地不要发生误判,也就是没有基因的地方不要找出基因,有基因的地方不要漏掉基因。

(10)很有可能的一种情况是,我们第一次的训练结果没有已有训练的效果好,所以我们需要进行循环训练找到最优参数;(运行会非常费时间,而且最终的效果一般只能提高准确度几个百分点,慎重使用)

1 optimize_augustus.pl --species=spinach genes.gb.filter.train

(11)再次进行训练,并检验,进行前后比较

1 etraining --species=spinach genes.gb.filter.train
2 augustus --species=spinach genes.gb.filter.test | tee secondtest.out
  • 如果此时你的gene level的sensitivity还是低于20%说明Trainning set不够大,请添加数据;
  • 如果你获得了满意的Trainning结果,请开始prediction

下面命令可用于从 firsttest.out 中提取氨基酸序列

sed -n '/^#/p' firsttest.out | sed -n '/start/,/\]/p' | sed 's/# start gene />/g;s/protein sequence \= \[//g;s/#//g;s/\]//g;s/^\s//g' >seq.fa

参考

------END-------

关注下方公众号可获得更多精彩

Augustus 进行基因注释的更多相关文章

  1. augustus, gene prediction, trainning

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

  2. 基于PASA进行基因预测

    PASA, acronym for Program to Assemble Spliced Alignments, is a eukaryotic genome annotation tool tha ...

  3. kegg-kass注释--转载

    在注释KEGG的时候,一直用到kaas,具体kaas是个什么东东,简单的总结一下吧.     KEGG是由日本人搞的一个代谢图,收录基因和基因组的数据库,数据库可以分为 3大部分,基因数据库, 化学分 ...

  4. 项目二:使用机器学习(SVM)进行基因预测

    SVM软件包 LIBSVM -- A Library for Support Vector Machines(本项目所用到的SVM包)(目前最新版:libsvm-3.21,2016年7月8日) C-S ...

  5. (转)基因芯片数据GO和KEGG功能分析

    随着人类基因组计划(Human Genome Project)即全部核苷酸测序的即将完成,人类基因组研究的重心逐渐进入后基因组时代(Postgenome Era),向基因的功能及基因的多样性倾斜.通过 ...

  6. GO注释

    1.GO资源简介 由于生物系统的惊人复杂性和需要分析的数据集的不断增加,生物医学研究越来越依赖于以可计算的形式存储的知识.基因本体论(GO)项目为基因功能和基因产物的可计算知识提供了目前最全面的资源. ...

  7. 10、差异基因topGO富集

    参考:http://www.biotrainee.com/thread-558-1-1.html http://bioconductor.org/packages/3.7/bioc/ http://w ...

  8. (基因功能 & 基因表达调控)研究方案

    做了好久的RNA-seq分析,基因表达也在口头溜了几年了,但似乎老是浮在表面. 对一件事的了解程度决定了你的思维深度,只想做技工就不用想太多,想做大师就一定要刨根问底. 老是说基因表达,那么什么是基因 ...

  9. 【豆科基因组】绿豆Mungbean, Vigna radiata苏绿基因组预印

    目录 一.来源 二.结果 测序组装 组装评价 编码基因预测 基因功能注释 非编码RNA注释 假基因预测 重复序列注释 进化分析和分歧时间估计 全基因组复制 LTR插入时间估计 正选择基因 一.来源 H ...

随机推荐

  1. 23.合并k个有序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

  2. [Beta]the Agiles Scrum Meeting 8

    会议时间:2020.5.22 21:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 帮助解决博客评分功能遇到的问题 tq 暂无 wjx 完成批量创建团队项目功能 班级 ...

  3. 示波器分析I2C时序波形图

    对于嵌入式开发的朋友来说,I2C协议实在是再熟悉不过了,有太多的器件,采用的都是通过I2C来进行相应的设置.今天,我们就随便聊聊这个I2C协议. I2C协议中最重要的一点是I2C地址.这个地址有7位和 ...

  4. 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105516090 学习课程:<2019王道考研计算机网络> 学习目的 ...

  5. Python课程笔记(二)

    1.格式化输出 print("%d %d %s" % (15, 3.14, 12.8)) 对比C语言 printf("%d,%d,%s",15, 3.14, 1 ...

  6. 『学了就忘』Linux基础命令 — 19、目录操作的相关命令

    目录 1.ls命令 2.cd命令 (1)绝对路径和相对路径 (2)cd命令的简化用法 3.pwd命令 4.mkdir命令 5.rmdir命令 常用目录操作的相关命令: ls命令 cd命令 pwd命令 ...

  7. 『学了就忘』Linux基础命令 — 27、搜索操作相关命令

    目录 1.whereis命令 2.which命令 3.locate命令 1.whereis命令 whereis是搜索系统命令的命令,也就是说,whereis命令不能搜索普通文件,而只能搜索系统命令. ...

  8. 力扣 - 剑指 Offer 06. 从尾到头打印链表.md

    题目 剑指 Offer 06. 从尾到头打印链表 思路1(递归) 首先先遍历整个脸表,计算出链表的长度(用于初始化数组).然后进行递归,从链表头部递归到尾部,这期间什么都不做,直到递归到最后一个节点的 ...

  9. Java开发介绍之JDK JRE JVM 和 环境变量配置

    一.JDK>JRE>JVM JDK(Java Development Kit):Java开发工具包 JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和 ...

  10. vue配置请求拦截器和响应拦截器

    首先确保我们已经设置的store.js进行值的存取,这时候我们需要配置请求和响应的拦截器设置 main.js import Vue from 'vue' import App from './App' ...