跳转至

MetaBAT2 — 宏基因组自动分箱(binning)工具


一句话说明

MetaBAT2 根据四核苷酸频率和跨样本覆盖度,自动将宏基因组组装 contig 聚类成基因组箱(MAG)。


安装与配置

# 创建独立 conda 环境,避免依赖冲突
conda create -n binning python=3.9 -y

# 激活环境
conda activate binning

# 从 bioconda 安装 MetaBAT2(当前最新 v2.18)
conda install -c bioconda -c conda-forge metabat2 -y

# 验证安装
metabat2 --help          # 查看帮助信息
jgi_summarize_bam_contig_depths --help  # 查看覆盖度计算工具帮助

核心用法

第一步:比对生成 BAM 文件

# 用 BWA 将原始 reads 比对回组装 contig(每个样本都要做)
bwa index assembly.fa            # 对组装结果建索引

# 样本1比对
bwa mem -t 16 assembly.fa sample1_R1.fq.gz sample1_R2.fq.gz \
    | samtools sort -o sample1.bam  # 比对并排序
samtools index sample1.bam          # 建立 BAM 索引

# 样本2比对(多样本覆盖度有助于提高 binning 精度)
bwa mem -t 16 assembly.fa sample2_R1.fq.gz sample2_R2.fq.gz \
    | samtools sort -o sample2.bam
samtools index sample2.bam

第二步:计算 contig 覆盖度

# jgi_summarize_bam_contig_depths 生成覆盖度矩阵
# --outputDepth:覆盖度输出文件名
# --pairedContigs:记录配对 contig 信息(可选)
jgi_summarize_bam_contig_depths \
    --outputDepth depth.txt \
    --pairedContigs paired.txt \
    sample1.bam sample2.bam         # 可以接多个 BAM 文件

第三步:执行 binning

# 核心命令:MetaBAT2 分箱
# -i:输入组装 fasta 文件
# -a:输入覆盖度文件(上一步生成的 depth.txt)
# -o:输出 bin 的前缀(会生成 bin.1.fa, bin.2.fa 等)
# -t:使用线程数
# -m:最小 contig 长度(默认 2500bp)
# --maxP:最大概率阈值(默认 95)
metabat2 \
    -i assembly.fa \
    -a depth.txt \
    -o bins/bin \
    -t 16 \
    -m 2000 \
    --maxP 95 \
    --minS 60 \
    --maxEdges 200 \
    -v                              # -v 输出详细日志

参数详解

参数说明默认值
-i输入组装 fasta 文件必填
-a覆盖度深度文件可选(无则仅用 kmer)
-o输出 bin 文件前缀必填
-t并行线程数0(全部)
-m最小 contig 长度(bp)2500
--maxP最大概率阈值(%)95
--minS最小得分阈值60
--maxEdges每个节点最大边数200
--seed随机种子(保证可重现)0
-v详细输出模式关闭

实战案例

# 完整流程示例:单样本宏基因组 binning
# 1. 建索引
bwa index megahit_output/final.contigs.fa

# 2. 比对
bwa mem -t 16 megahit_output/final.contigs.fa \
    reads_R1.fq.gz reads_R2.fq.gz \
    | samtools sort -@ 8 -o mapped.bam
samtools index mapped.bam

# 3. 计算覆盖度
jgi_summarize_bam_contig_depths \
    --outputDepth contig_depth.txt \
    mapped.bam

# 4. 运行 MetaBAT2
mkdir -p metabat2_bins
metabat2 -i megahit_output/final.contigs.fa \
         -a contig_depth.txt \
         -o metabat2_bins/bin \
         -t 16 -m 2000 -v

# 5. 查看生成的 bin 数量
ls metabat2_bins/*.fa | wc -l    # 统计 bin 文件数量

常见报错与解决

报错信息原因解决方法
No bins were producedcontig 太短或样本太少降低 -m 到 1500,增加样本数
depth file not found覆盖度文件路径错误检查 -a 参数路径是否正确
BAM file is not sortedBAM 未排序samtools sort 重新排序
out of memory内存不足增加内存或减少线程数 -t
输出 bin 过多(>500)参数过松提高 --maxP--minS

速查表

# 快速单行流程(已有 BAM 文件时)
jgi_summarize_bam_contig_depths --outputDepth depth.txt *.bam
metabat2 -i assembly.fa -a depth.txt -o bins/bin -t 16 -m 2000

# 查看 bin 统计信息
for f in bins/*.fa; do echo "$f: $(grep -c '>' $f) contigs"; done

# 统计 bin 总大小
for f in bins/*.fa; do awk '/^>/{next}{sum+=length($0)}END{print FILENAME": "sum" bp"}' $f; done