使⽤MAKER进⾏基因注释(⾼级篇之AUGUSTUS模型训练)准备训练集和测试集
根据Augutus的官⽅教程,可靠的基因结构序列的要求如下:
提供基因的编码部分,包含上游⼏KB。通常⽽⾔,基因越多,效果越好,⾄少准备200个基因以上。还得保证这些基因中要有⾜够多的外显⼦,这样⼦才能训练内含⼦。
这些基因的基因结构⼀定要⾜够的准确。不过,也不需要百分百的正确,甚⾄注释都不需要特别的完整,只要保证起始密码⼦和终⽌密码⼦的准确是准确的即可。
需要保证这些基因没有冗余,也就是说不同序列如果有⼏乎相同的注释后氨基酸序列,那么仅仅取其中⼀个(AUGUSTUS教程的建议是:保证任意两个基因在氨基酸⽔平上低于70%的相似度),这⼀步既可以避免过度拟合现象,也能⽤于检验预测的准确性
⼀条序列允许有多个基因,基因可以在正链也可以在负链,但是这些基因间不能有重叠,每个基因只要其中⼀个转录本,存放格式是GenBank
之后随机将注释数据集分成训练集和测试集,为了保证测试集有统计学意义,因此测试集要⾜够多的基因(100~200个),并且要⾜够的随机。
基因结构集的可能来源有:
肖邦小夜曲
Genbank
EST/mRNA-q的可变剪切联配, 如PASA
临近物种蛋⽩的可变剪切联配,如GeneWi
相关物种的数据
预测基因的迭代训练
由于⽬前的转录组数据⽐较多,我先⽤Trinity对转录组数据进⾏从头组装,然后⽤PASA将Trinity组装的转录本回贴到参考基因组上
Launch_PASA_pipeline.pl \离职声明书>尚西山
-fig \
-C \ # 创建数据库
-R \ # 运⾏alignment/asmbly 流程
-g reference.fasta \
-t Trinity.fasta \
--ALIGNERS blat,gmap \ # 可以只⽤⼀个
--CPU 12 &> &> pasa_$(date +%Y-%m-%d-%H-%M).log &
DATABASE=<__DATABASE__> # MySQL中的数据库名, 也是最后⽂件名的前缀
# 如下调整的是PASApipeline-v2.3.3/scripts/validate_alignments_in_db.dbi参数
script validate_alignments_in_db.dbi
validate_alignments_in_db.dbi:--MIN_PERCENT_ALIGNED=<__MIN_PERCENT_ALIGNED__>
validate_alignments_in_db.dbi:--MIN_AVG_PER_ID=<__MIN_AVG_PER_ID__>
这⼀步得到的<prefix>.asmblies.fasta和<prefix>.pasa_asmblies.gff3
从PASA组装中提取ORF(开放阅读框)
PASApipeline-v2.3.3/scripts/pasa_asmbls_to_training_t.dbi \
--pasa_transcripts_fasta <prefix>.gff3\
--pasa_transcripts_gff3 <prefix>.pasa_asmblies.gff3
最后会⽣成⼀系列⽂件,如下
<prefix>.ansdecoder.cds/pep/gff3/bed: 虽然不再基因组上,但是根据转录本信息,有可能是编码区的结果
我是谁为了谁<prefix>.bed/gff3: 对应基因组序列的基因模型
我们需要的是后者。PASA组装的GFF3⽂件的属性⼀栏分为:
complete:
5primer_partial: 缺少起始密码⼦,翻译到5'端为⽌
3primer_partial: 缺少终⽌密码⼦,翻译到3'端为⽌
internal: 缺少起始密码⼦和终⽌密码⼦
格式转换
我们基于PASA的结果,将GFF3格式转换成Genbank格式
augustus/scripts/gff2gbSmallDNA.pl \
山药瘦肉粥
<prefix>.bed/gff3 \ #gff3 from pasa_asmbls_to_training_t.dbi
reference.fa \ # reference genome quence
1000 \ # flank
<prefix>.gene.raw.gb # output
这⼀步的gff2gbSmallDNA会忽略掉UTR序列。
过滤可能错误的基因结构
转录组数据不像以前的EST序列,最后组装的基因数不多。如果同时使⽤多个组织的转录组,就会组装出⼀万条以上的基因,所以我们更加关注于质量。
先创建初始化的物种HMM⽂件
augustus/scripts/new_species.pl \
--species=for_bad_genes_removing \
--AUGUSTUS_CONFIG_PATH=/path/to/augustus/config
然后尝试训练,捕捉错误
augustus/bin/etraining \
--species=for_bad_genes_removing \
--stopCodonExcludedFromCDS=fal \
<prefix>.gene.raw.gb 2>
提取错误,并进⾏过滤
egrep -o 'ctg[[:digit:]]+_[[:digit:]]+-[[:digit:]]+' >
广东甜品
augustus/scripts/filterGenes.pl <prefix>.gene.raw.gb > <prefix>.genes.gb
初步训练
将上⼀步过滤后的⽂件随机分成两份,测试集和训练集。其中训练集的数⽬根据gb的LOCUS数⽬决定,⾄少要有200.
augustus/scripts/randomSplit.pl <prefix>.gene.gb 200 # 200为测试集的基因数
创建初始化HMM参数⽂件,并进⾏训练
augustus/scripts/new_species.pl --species aha_train1
augustus/bin/etraining --species=<prefix> <prefix>.ain | tee train.out
⽤测试数据集检验预测效果。这⾥可以⽐较我们训练的结果,和近缘已训练物种的训练效果
augustus --species=<prefix> <prefix>.st | tee train_test1.out
augustus --species=arabidopsis <prefix>.st | tee ara_test.out
阳台山自然风景区可以⽤tail -n 40 xx_test.out查看预测结果的统计。要看着最后的结果,需要解释⼏个统计学概念:
TP(True Positive): 预测为真,事实为真
FP(Fal Positive): 预测为真,事实为假
FN(Fal Negative): 预测为假,事实为真
TN(True Negative): 预测为假,事实为假
怀孕可以吃豆腐吗基于上述,引出下⾯两个概念。"nsitivity"等于TP/(TP+FP), 是预测为真且实际为真的占你所有认为是真的⽐例."specificity"等于
TN/(TN+FN), 是预测为假且实际为假的占你所有认为是假的⽐例。我们希望在预测中,尽可能地不要发⽣误判,也就是没有基因的地⽅不要找出基因,有基因的地⽅不要漏掉基因。
优化训练参数
很有可能的⼀种情况是,我们第⼀次的训练结果没有已有训练的效果好,所以我们需要进⾏循环训练找到最优参数
augustus/scripts/optimize_augustus.pl --species=<prefix> \
-
-cpus=12 \ #受限于--kfold=k
--rounds=12 \
<prefix>.ain
评估优化训练结果
使⽤optimize_augustus.pl训练的参数未必会⽐前⼀步的训练结果好,因此需要
augustus/bin/etraining --species=<prefix> <prefix>.ain
augustus/bin/augustus --species=<prefix> <prefix>.st | tee train_test2.out
⽐较前后的"nsitivity"和"specificity"参数,选择其中表现⽐较好的⼀个,作为最终⽤于预测的HMM⽂件。