qiime2自建数据库进行物种注释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qiime2自建数据库进行物种注释相关的知识,希望对你有一定的参考价值。

参考技术A

虽然 --p-trunc-len 我们指定的是460,但是它会智能的根据引物来截取,最终得到的序列是 430bp 左右

参考:
https://docs.qiime2.org/2020.11/tutorials/feature-classifier/

Augustus 进行基因注释

目前的从头预测软件大多是基于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

(3.1)提取上一步顾虑后的genes.db中的蛋白,进行自身比对,并鉴定出identity <70%的基因,形成GFF3文件,而后在从格式转换开始进行操作 (有些人不进行这个操作)

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

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

(5)初始化HMM参数设置(在相应config中形成参数),并进行训练

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

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

1 augustus --species=spinach genes.gb.test | tee firsttest.out
2 augustus --species=arabidopsis genes.gb.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)(其中正确的百分率), 是预测为假且实际为假的占你所有认为是假的比例。我们希望在预测中,尽可能地不要发生误判,也就是没有基因的地方不要找出基因,有基因的地方不要漏掉基因。

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

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

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

1 etraining --species=spinach genes.gb.train
2 augustus --species=spinach genes.gb.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

 

 

参考

 

以上是关于qiime2自建数据库进行物种注释的主要内容,如果未能解决你的问题,请参考以下文章

Qiime2 数据导入

Augustus 进行基因注释

annotation非人类物种基因组注释(MSU为例)

qiime1和2有啥不同

QIIME2使用方法

KEGG Pathway Anonatation