宏基因组Bin及后续分析的具体步骤(十分详细,手把手教会)

        当完成宏基因组的物种和功能注释之后,如果相对数据进行更深层次的挖掘,我们可以进行BIN。现在宏基因组的BINNING工具五花八门,且教程也是层出不穷。其中主要以Maxbin、metawrap、metabat2等为主,不同的软件各有千秋,如metawrap,在BIN的流程上,通过结合concoct, metabat2和maxbin2三个软件的结果,综合判定bins的质量,获得较好的结果,但是缺点是需要较大的服务器内存和花费较长的时间。Metabat2在同类分箱工具中具有更好的表现:

宏基因组最佳分箱工具Metabat2

1. 组装

因此后文中我们选用Metabat2工具进行分箱,首先从序列文件组装开始:

##合并双端数据
cat *_R1.fastq > all_R1.fastq
cat *_R2.fastq > all_R2.fastq

##进行组装,选用工具megahit,如果组装的文件较小,可以选用SPAdes进行组装,获得较好的组装结果。

nohup megahit -1 all_R1.fastq -2 all_R2.fastq -o assembly -t 24 -m 0.8 --min-contig-len 1000 --presets meta-large &

-o 输出文件夹,最终结果和中间文件都会存放在该文件夹下;

-t 调用线程数;

-m 使用的内存,后面数字为占比,0.8即为服务器全部内存的80%;

--min-contig-len 最小片段长度;

--presets meta-large 宏基因组模式;

nohup 后台运行。

2. 计算深度文件

2.1 序列比对

组装完成后,还需一份序列深度的txt文件才能进行分箱,接下来就是进行深度文件的计算,这里采用bwa来进行比对:

##创建索引
bwa index assembly/final.contigs.fasta 

##比对
bwa mem -k 19 -t 24 assembly/final.contigs.fasta all_R1.fastq all_R2.fastq > depth.sam

这里需要注意的是,如果你想让任务后台运行,最好不要直接添加nohup,这会导致后续的操作出现报错的情况,(不要问我怎么知道的)应先创建一个sh文件后再执行nohup的操作指令,具体为:

##创建一个sh文件

vi bwa.sh ##这时候会弹出来一个界面,点i键开始写入内容(bwa mem -k 19 -t 24 assembly/final.contigs.fasta all_R1.fasta all_R2.fasta > depth.sam),然后ESC,接着Shift+:,左下角出现光标,输入wq,回车即可

##运行

nohup sh bwa.sh &

2.2 深度计算

sam文件还需转化为txt文件:

##先查看自己安装的samtools版本
samtools -version

##转换为bam、排序,1.3版本以前
samtools view -bs  depth.sam > depth.bam 
samtools sort  depth.bam > depth_sort.bam 
samtools index  depth_sort.bam 

##1.3版本后,排序和转换同时进行
samtools sort -@ 24 depth.sam > depth.bam
samtools index  -@ 24 depth_sort.bam

接下来bam文件转换为Metabat2所需要的txt文件,需安装好Metabat2,借用其自带的脚本jgi_summarize_bam_contig_depths进行转换: 

jgi_summarize_bam_contig_depths --outputDepth depth.txt depth_sort.bam

3 分箱

nohup metabat2 -m 1500 -t 26 -i assembly.fasta -a depth.txt -o all -v 
其中-m:最小contigs长度
-t:线程
-i:contig文件
-a:contig深度
-o:输出文件路径和前缀
-v:啰嗦模式
time:计时

4 分箱结果及基因评估

进程结束后可在文件夹目录下生成一个bin的目录,里面包含了所有分箱的结果,这时候我们需要对所有的bins进行一个完整度和污染度的评估:

nohup checkm lineage_wf -t 28 -x fa --nt --tab_table -f bins_qa.txt metabat_bins bins_qa_result & 

#-t 线程数
#-x 输入的文件格式后缀为fa,即分箱的结果,如bin.1.fa
#--nt 检测序列为核酸序列
#--tab-table 输出文件格式,为txt或tsv
#-f 输出文件
#metabat_bins 存放metabat2分箱结果的文件;
#bin_qa-result 输出文件

评估结果中,我们主要关注的是Completeness和Contamination,即完整度即污染度。其中完整度0-100%;需要注意的是污染度Contamination是可以大于100%,不仅限于0-100%。开发者在github上解释如下:

 大致说的是污染值>100%意味着单拷贝标记基因被多次识别。如一个bins的56个标记基因出现次数大于5次,因此其contamination>100%,这表明这个bins包含5个或者更多的基因组。

bins的筛选根据完整度和污染度进行,具体阈值需要根据自己的研究来决定。主要是分为两类:

1. 单菌的基因组。这一策略是关注高完整度、低污染度的bins,期望构建该菌的完整基因组进行分析,如完整度 > 97%,污染度< 3%。

2. bins群落分析。这一策略则是降低完整度和污染度筛选阈值,如设定阈值为完整度 > 50%,污染度 < 20%。

这两个策略都有相关文献使用,可以找找看。 

5 定量

定量方式在上一篇推文中详细的描述:宏基因组TPM定量。不同的是bins与代表基因间的定量过程有所差别,这是因为bins中含有多个contigs,即多条独立的序列;而上篇推文的定量是单条序列进行的,因此进行bins的定量时,策略需要进行一定的调整,简单来说就是一个bins对每一条contigs进行定量,最后再求其均值作为这个bin的定量结果。这一过程类似于contigs的注释,每一条序列与NR数据库比对后会获得多个比对结果,这时候就需要根据它们的比对得分score来获取可信度最高的物种注释。不过为了简便,我们只需要使用别人造好的轮子,不需要花更多的时间和精力去重新创造,因此metawrap是一个不错的工具,当然,metawrap作为一个综合流程,也可以用它进行宏基因组的分析,详情参考:MetaWRAP分箱流程实战和结果解读。(如只需要metawrap进行bins定量,可以不进行数据库的配置)

#安装好metawrap后,激活环境。安装方法参考上文博客。
conda activate metawrap

#定量
metawrap quant_bins -b metabat_bins -t 28 -o QUANT_BINS -a assembly/final_assembly.fa clean_data/*_1.fastq clean_data/*_2.fastq 

其中,metabat_bin为metabat2运行保存bins的文件位置,如保存在当前目录下的bin目录,表示为 ./bin;-o 为输出文件;-a 为组装的fa序列文件;clean_data/*_1.fastq clean_data/*_2.fastq为质控后的双端序列文件。

最终结果文件夹QUANT_BINS中,会存在.tab后缀的文件,即为定量文件;其余结果中包括一些热图等。

6. 注释

6.1 功能注释

废话少说,功能注释策略是将所有bins的congtigs合并在一起,直接用Eggnog-mapper进行功能注释,但在那之前需要对每个bins的contigs重命名,防止不同bin基因组混在一起,需要注意的是这里bins的contigs指的是预测的功能区CDS(在checkm的结果文件中也含有每个bins的gff文件,可以直接提取使用)

#prodigal预测序列功能区
for ((i=1;i<=205;i++1))
do prodigal  -i bin${i}.fa -o out/bin${i}.gff -g 11 -f gff
done 


接下来提取gff文件的预测到的蛋白编码区CDS,使用python来完成:

for ((i=1;i<=205;i++1))
do python GeneGff.py -i out/bin${i}.gff -r bin${i}.fa -o bin${i}_CDS.fa
done

贴上GeneGff.py的代码:

###maguibin
###2021-9-6
import argparse
import sys
from Bio import SeqIO
from Bio.SeqRecord import SeqRecord
import re

parser = argparse.ArgumentParser()
parser.add_argument('-i',required=True,help='input the GFF file')
parser.add_argument('-r',required=True,help='reference sequence file ')
parser.add_argument('-o',required=True,help='output file path')
args = parser.parse_args()

inputfile = sys.argv[1]
outputfile = sys.argv[2]
reference = sys.argv[3]
count = 0
seq_Dicts=SeqIO.to_dict(SeqIO.parse(reference,"fasta"))
seq=open(outputfile,"w")
with open(inputfile) as f:
    for line in f:
        if re.search(r"^#|^\s*$",line):
            continue
        if re.search("CDS",line):
            filed=line.strip().split("\t")
            scaf_id=filed[0]
            sample_id = scaf_id.split("_")
            Sample_id = sample_id[0]
            start=int(filed[3])-1
            end=int(filed[4])
            subseq=seq_Dicts[scaf_id].seq[start:end]
            count += 1
            gene_id=Sample_id + '|' + "orf_" + str(count)
            if filed[6]=='+':
                sub_record=SeqRecord(subseq,id=gene_id,description="")
            if filed[6]=='-':
                sub_record=SeqRecord(subseq,id=gene_id,description="")
                rc_seq=sub_record.seq.reverse_complement()
                sub_record=SeqRecord(rc_seq,id=sub_record.id,description="")
            SeqIO.write(sub_record,seq,'fasta')
seq.close()

#每个bin中contigs的重命名,以205个Bin为例

for ((i=1; i<=205; i++))
do awk '{if($1~">"){n+=1; print ">Bin_"n} else {print }}' bin${i}_CDS.fa > new_bin${i}.fa
done 

#为每条序列添加对应的bins的编号

for ((i=1; i<=205; i++))
do sed -i "s/>Bin_/>Bin${i}_/" new_bin${i}.fa 
done

#sed调用,因为语句中含有$的特殊字符,需要双引号"",而不是单引号''。否则不生效

#合并所有bin

cat new_bin*.fa > all_bin.fasta


#seqkit将核酸序列转化为蛋白序列,没有先安装,conda安装很快

seqkit translate --threads 20 all_bin.fasta > all_bin.fa

eggnog-mapper进行功能注释,首先是软件安装和数据库配置。

#下载eggnog-mapper
git clone https://github.com/eggnogdb/eggnog-mapper.git

#数据库下载
python ./download_eggnog_data.py

#注释

python emapper.py -i all_bin.fa --output result -d bact --cpu 20 -m diamond --usemen

#-d bact 细菌数据库  
#-m diamond 比对方法 diamond,确保已下载

 eggnog-mapper会生成三个结果文件:

  • [project_name].emapper.hmm_hits: 记录每个用于搜索序列对应的所有的显著性的eggNOG Orthologous Groups(OG). 所有标记为"-"则表明该序列未找到可能的OG
  • [project_name].emapper.seed_orthologs: 记录每个用于搜索序列对的的最佳的OG,也就是[project_name].emapper.hmm_hits里选择得分最高的结果。之后会从eggNOG中提取更精细的直系同源关系(orthology relationships)
  • [project_name].emapper.annotations: 该文件提供了最终的注释结果。大部分需要的内容都可以通过写脚本从从提取。

.emapper.annotations每一列对应的记录如下:

1. query: 检索的基因名或ID

2. seed_ortholog:seed同源数据库的注释结果

 3. evalue:匹配的evalue值

4. score:匹配得分

5. eggNOG_OGs:eggnog的OG数据库比对结果

6. max_annot_lvl:物种信息的注释

7. COG_category:COG数据库

8. Description:对该蛋白的功能描述

9. Preferred_name:预测的基因名

10. GOs:GO数据库比对结果

11. EC:功能蛋白对应的酶编号

12. KEGG_ko:功能蛋白对应的KO编号

13. KEGG_Pathway:KEGG代谢通路

14. KEGG_Module:KEGG模块

15. KEGG_Reaction:KEGG反应过程

16. KEGG_rclass:KEGG rclass数据库

17. BRITE:BRITE数据库,KEGG

18. KEGG_TC:TC数据库

19. CAZy:碳水化合物数据库

20. PFAMs:蛋白结构域

eggnog-mapper的结果包含多个数据库注释结果,可根据自己的需要进行选择。其中常用的KEGG对应的KO和代谢通路、GO没有具体的注释,举要自己在官网上下载其相关文件进行解析使用,具体方法参考:kegg 上ko号对应的通路数据

6.2 物种注释

两个方法,一是软件一步到位,优点:步骤少,简便;缺点:数据库配置对新人不是很友好;

二是自己逐步进行,过程步骤较多,但相对容易理解。

首先是软件进行注释,metawrap或者phylophlan等;而另一个方式是自己下载NR数据库比对。具体选择哪种方法看你自己配置了哪个数据库。这里主要是phylophlan的注释和NR注释,metawrap在在上文的博客链接有详细的教程,不多叙述。这里我推荐phylophlan,因为该软件除了能进行bins的物种注释外,还能构建bins系统进化树,一步到位。参考:PhyloPhlAn 3.0 微生物组系统发育分析

#phylophlan安装
conda create -n python3.7 -c bioconda python=3.7  #创建新的环境
conda activate python3.7 
conda install phylophlan=3.0  
phylophlan --version #检查安装是否成功

phylophlan能够自动下载两个原核生物通用数据库:

1. PhyloPhlAn (-d phylophlan, 400 universal marker genes) presented in Segata, N et al. NatComm 4:2304 (2013)

2. AMPHORA2 (-d amphora2, 136 universal marker genes) presented in Wu M, Scott AJ Bioinformatics 28.7 (2012)

mkdir phylophlan_database && cd phylophlan_database
#amphora2    

wget http://cmprod1.cibio.unitn.it/databases/PhyloPhlAn/amphora2.tar 
wget http://cmprod1.cibio.unitn.it/databases/PhyloPhlAn/amphora2.md5

#phylophlan  
wget http://cmprod1.cibio.unitn.it/databases/PhyloPhlAn/phylophlan.tar   
wget http://cmprod1.cibio.unitn.it/databases/PhyloPhlAn/phylophlan.md5

#linux下载失败就window下载再上传
#解压
tar -xzf phylophlan.tar # 解压文件夹
bunzip2 -k phylophlan/phylophlan.faa.bz2

#amphora2.tar解压同上
#构建索引

diamond makedb --in phylophlan/phylophlan.faa --db phylophlan/phylophlan
diamond makedb --in amphora2/amphora2.faa --db amphora2/amphora2

物种注释,SGB (species-level genome bins) 数据库 (MetaRefSGB, *Pasolli E, et al. Cell 176.3 (2019)。注意SGB.Jan19数据库不需要提前下载,运行的时候会自动下载(这个有点奇怪)。

#SGB.Jan19数据库,其余数据库phylophlan_metagenomic查看,该数据库不需要提前下载,运行的时候会自动下载,而且是运行一次下载一次

phylophlan_metagenomic -i metabat_bin/ \
    -o bin_result \
    --nproc 24 \
    -n 1 \
    -d SGB.Jan19 \
    --verbose 2>&1 | tee logs/phylophlan_metagenomic.log

#-n 1 输出最近的注释结果

结果生成一个tsv文件,包含物种注释信息。

构建进化树,这一步建议是筛选好了bins再进行,缩短运行时间。

#配置文件
python phylophlan_write_config_file \
    -o custom_config_nt.cfg \
    -d n \
    --db_dna makeblastdb \
    --map_dna diamond \
    --msa muscle \
    --trim trimal \
    --tree1 fasttree \
    --tree2 raxml

-o: 输出文件名,-d: 设置该配置文件针对的数据库类型 (这里应该指的是核酸序列或者蛋白序列,我猜的)

#进化树
phylophlan -i metabat_bin/ \
    -d phylophlan/phylophlan \
    --diversity  low \
    -f custom_config_nt.cfg \
    --nproc 18

--diversity 参数有三个选型<low medium high>,指定构建系统发育树的类型。

等待结果文件就行了。最后说一句,这个软件一次过的可能性根据自己的代码能力来,换句话说就是以此过蛮难的,多来几次就好了。 

最后呢,补充bins依靠NR数据库的物种注释:

#NR下载后创建索引

diamond makedb --in nr -d nr.dmnd

#对bins进行处理

for ((i=1; i<=205; i++))
do awk '{if($1~">"){print ">Bin"i} else {print }}' bin${i}_CDS.fa > new_bin${i}.fa
done 

cat new_bin*.fa > all_bin.fasta 
seqkit translate --threads 20 all_bin.fasta > all_bin.fa

#注释
diamond blastp -d nr.dmnd -q all_bin.fa -p 30 -f 6 -sensitive --id 90 -k 50  -e 0.000001 -c 1 -b 12 -o result.tab

#安装MEGAN
wget https://software-ab.informatik.uni-tuebingen.de/download/megan6/MEGAN_Community_unix_6_21_16.sh

sh MEGAN_Community_unix_6_21_16.sh #需要Xmanager或者在服务器安装

#下载GI号对应的taxanomy的mapping文件
wget https://software-ab.informatik.uni-tuebingen.de/download/megan6/prot_acc2tax-Jul2019X1.abin.zip
unzip prot_acc2tax-Jul2019X1.abin.zip

#使用MEGAN的LCA算法进行物种信息注释
../MEGAN/megan/tools/blast2lca -i all_nr_match.txt -f BlastTab -ms 50 -me 0.000001 
-a2t prot_acc2tax-Jul2019X1.abin -o nr_blast_otu_tax.tsv

嗯,差不多就是这样的过程,好像过程也麻烦,还是推荐phylophlan进行注释。

到这里Binning的过程基本就结束了,最后的到的东西是:

① Binning得到的多个bins的基因组

② 每个bins的完整度、污染度信息文件;

③ 每个bins的在不同位点的定量文件

④ 每个bins的物种注释文件

⑤ 每个bins的功能注释文件

⑥ bins构建的系统发育树

这时候你就可以根据需要进行分析了。

扫码关注微生物多组学公众号,后期会更新更多的组学干货。您的关注使我们最大的鼓励。

  • 32
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 宏基因组分析是一种分析特定物种基因组的技术,可以确定基因组结构和功能,以及基因功能的变化。而reads分析和组装分析则是比较物种之间基因组的差异。Reads分析是比较基因组中特定位点的序列,而组装分析则是定位和比较物种间基因组的结构和组成。 ### 回答2: 宏基因组是宏观遗传组成研究的一种方法,用于研究不仅细菌和古细菌,而且真菌和原生动物等非细胞型微生物的基因组。宏基因组研究可以通过bin分析、reads分析和组装分析来进行。 首先是bin分析bin分析通过将来自不同微生物的序列分组,识别出它们的组成成分。这种分析方法可以根据序列的相似性进行分类和分类微生物的进化关系。通过bin分析,我们能够了解宏基因组样品中各种微生物的相对数量以及它们在生态系统中的功能,进而深入理解微生物的种类和丰度。 其次是reads分析。reads分析是指对宏基因组样品中所得到的测序数据进行处理和分析。这种分析方法主要注重在测序数据中识别和比对出各种微生物的DNA序列,以了解它们的系统演化关系和在生态系统中的作用。通过reads分析,我们可以发现宏基因组样品中可能存在的微生物物种,以及它们的功能和代谢特征。 最后是组装分析。组装分析是指将高通量测序数据中的多个reads序列进行拼接组装,以重建出宏基因组样品的完整DNA序列。这种分析方法可以用于研究微生物的基因组结构、基因功能和遗传变异等。通过组装分析,我们可以获取到宏基因组样品中微生物的完整基因序列,进而深入研究微生物的遗传特征和功能。 总的来说,宏基因组bin分析、reads分析和组装分析在研究宏基因组样品中的微生物组成、物种特征和遗传变异等方面具有重要作用。不同的分析方法可以帮助研究者深入理解微生物的种类和功能,为进一步研究宏基因组的生态学、进化学和生物技术应用提供了重要数据和基础。 ### 回答3: 宏基因组 bin 分析、reads 分析和组装分析是在宏基因组研究中常用的三种分析方法,它们各自有不同的目标和方法。 宏基因组 bin 分析指的是将宏基因组测序数据中的序列根据它们所来自的微生物个体进行分类和归类。这种分析方法的目标是将序列按照来源进行排序,识别并分类微生物个体,了解某一环境中存在的不同微生物的种类及其相对丰度。它以参考基因组为基础,将测序得到的序列与已知的基因组进行比对,并通过构建分类树或序列相似度进行分类。Bin 分析可以帮助研究者了解复杂环境中微生物的多样性和功能。 Reads 分析是指对宏基因组测序数据中的每个短序列(reads)进行分析。通过比对每个 reads 与参考基因组的序列相似度,可以了解到每个个体中微生物基因组的内容和多样性。这种分析方法主要关注短序列个体的单个片段,而不是对整个基因组进行研究。 组装分析是将宏基因组测序数据中的所有短序列尝试组装成连续的序列。将所有片段拼接在一起,得到完整的基因组信息。组装分析可以帮助研究者获得更完整、更准确的微生物基因组,从而进一步了解微生物的功能和特征。 总的来说,宏基因组 bin 分析主要关注微生物个体分类和相对丰度,reads 分析关注序列的相似度,而组装分析关注基因组的完整性和结构。这三种方法在宏基因组研究中相互补充,有助于我们更全面地了解微生物的多样性和功能特征。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值