训练 ab initio 基因预测工具(以SNAP为例)
对于一个新的物种而言,你大概率是没有一个高质量的基因模型去进行基因预测。但是我们可以利用EST序列(少部分物种估计有)、二代测序数据、同源物种蛋白序列,先直接用Maker做基因注释,尽管得到的模型可能不是特别的完美,但可以作为输入反复迭代运行Maker,从而提高最终的表现。
这次使用的是下载的练习数据集(见附录)
cd ~/maker_tutorial/example_02_abinitio
同样,让我们先构建配置文件,并修改如下配置
maker -CTL
vim maker_opts.ctl
# modify the following line
genome=pyu_contig.fasta
est=pyu_est.fasta
protein=sp_protein.fasta
est2genome=1
protein2genome=1
这里的"est2genome"和"protein2genome"表示直接从EST序列和同源但序列中推测基因结构,当然这肯定不靠谱。不过没有关系,我们的目标是将其作为输入用于训练而已。
运行预测程序,大约需要20分钟
~/opt/biosoft/maker/bin/maker &> maker.log &
那么下一步就是收集所有的GFF文件,整理成SNAP所需的ZFF格式
mkdir snap
cd snap
~/opt/biosoft/maker/bin/gff3_merge -d ../pyu_contig1.maker.output/pyu_contig1_master_datastore_index.log
~/opt/biosoft/maker/bin/maker2zff pyu_contig1.all.gff
于是我们就会在snap文件下得到"genome.ann"和"genome.dna". 在这两个文件的基础上,我们就可以参考SNAP的文档开始训练
可以先用fathom genome.ann genome.dna -gene-stats
了解基因的一些信息,比如说这里的测试数据集就有153个基因,几乎平均的分布在正负链上。
1 sequences
0.525725 avg GC fraction (min=0.525725 max=0.525725)
153 genes (plus=79 minus=74)
5 (0.032680) single-exon
148 (0.967320) multi-exon
130.782104 mean exon (min=3 max=704)
87.851593 mean intron (min=61 max=384)
此外还可以用fathom genome.ann genome.dna -validate
检查下是否有明显的错误,这里的153个基因有106个warning,警告类型粗略看了一眼基本都是CDS不完整。
后续就可以开始参数预测。步骤是,先用fathom genome.ann genome.dna -categorize 1000
将序列分类,这里的1000表示基因两侧会额外有1000bp的序列。该参数推荐使用基因一半的长度,如果基因比较稠密则要调低。这一步会生成如下文件:
- alt.ann, alt.dna (genes with alternative splicing)
- err.ann, err.dna (genes that have errors)
- olp.ann, olp.dna (genes that overlap other genes)
- wrn.ann, wrn.dna (genes with warnings)
- uni.ann, uni.dna (single gene per sequence)
这里只用最后一类基因,也就是每个序列上只有一个基因。用fathom uni.ann uni.dna -export 1000 -plus
只输出unigene中正链基因,这一步同样会生成四个文件
- export.aa 每个基因的蛋白序列
- export.ann 正链的基因结构
- export.dna 正链的DNA
- export.tx 每个基因的转录本
接着让forge
负责预测参数, 由于输出会很多,所以建议创建个文件夹
mkdir params
cd params
forge ../export.ann ../export.dna
cd ..
最后是hmm-assembler.pl
构建HMM,即基因模型文件, hmm-assembler pyu params > pyu1.hmm
完成SNAP的模型构建后,修改"maker_opts.ctl"用以增加该文件,并不再用est和protein直接推测基因结构。
snaphmm=pyu1.hmm
est2genome=0
protein2genome=0
再一次运行maker
~/opt/biosoft/maker/bin/maker &> maker.log &
这次结果会比上一次有很明显的提升,你可以重复上面的代码从而进一步提高SNAP的模型。