跳转至

MaxBin2 — 基于期望最大化算法的宏基因组 binning 工具


一句话说明

MaxBin2 用期望最大化(EM)算法,结合覆盖度和四核苷酸频率,自动估计 bin 数量并聚类 contig,无需预先指定 bin 数。


安装与配置

# 激活 binning 环境
conda activate binning

# 从 bioconda 安装 MaxBin2(当前版本 v2.2.7)
conda install -c bioconda maxbin2 -y

# 验证安装
run_MaxBin.pl          # 查看主程序帮助(Perl 脚本)

核心用法

方法一:单样本模式(提供覆盖度文件)

# 先生成 contig 覆盖度文件(每行:contig名\t覆盖度)
# 用 samtools 提取
samtools depth -aa mapped.bam \
    | awk '{sum[$1]+=$3; count[$1]++} END{for(c in sum) print c"\t"sum[c]/count[c]}' \
    > contig_coverage.txt        # 输出格式:contig名 + 平均覆盖度

# 运行 MaxBin2
# -contig:输入组装 fasta
# -abund:覆盖度文件
# -out:输出前缀
# -thread:线程数
run_MaxBin.pl \
    -contig assembly.fa \
    -abund contig_coverage.txt \
    -out maxbin_out/bin \
    -thread 16                   # 线程数

方法二:多样本模式(多个覆盖度文件)

# 为每个样本生成覆盖度文件
for sample in sample1 sample2 sample3; do
    samtools depth -aa ${sample}.bam \
        | awk '{sum[$1]+=$3; count[$1]++} \
               END{for(c in sum) print c"\t"sum[c]/count[c]}' \
        > ${sample}_abund.txt    # 每个样本单独一个覆盖度文件
done

# 创建覆盖度文件列表(一行一个文件路径)
ls *_abund.txt > abund_list.txt  # 生成文件路径列表

# 多样本模式运行(精度更高)
# -abund_list:包含所有覆盖度文件路径的列表文件
run_MaxBin.pl \
    -contig assembly.fa \
    -abund_list abund_list.txt \
    -out maxbin_out/bin \
    -thread 16 \
    -min_contig_length 2000      # 最小 contig 长度过滤

方法三:从 reads 直接运行(简化流程)

# MaxBin2 支持直接输入 reads(内部自动比对)
# -reads:输入 reads 文件(可多次使用)
run_MaxBin.pl \
    -contig assembly.fa \
    -reads sample1_R1.fq.gz \
    -reads2 sample1_R2.fq.gz \
    -out maxbin_out/bin \
    -thread 16

参数详解

参数说明默认值
-contig输入组装 fasta必填
-abund单个覆盖度文件二选一
-abund_list多覆盖度文件列表二选一
-out输出文件前缀必填
-thread线程数1
-min_contig_length最短 contig 过滤1000
-max_iterationEM 最大迭代次数50
-prob_threshold概率阈值(判断归属)0.9
-plotmarker输出 marker gene 图关闭

实战案例

# 场景:宏基因组共组装结果的多样本 binning

# 准备工作
mkdir -p maxbin2_out abund_files

# 1. 多样本覆盖度计算(3个样本)
for s in S1 S2 S3; do
    bwa mem -t 8 coassembly.fa ${s}_1.fq ${s}_2.fq \
        | samtools sort -o ${s}.bam
    samtools index ${s}.bam
    samtools depth -aa ${s}.bam \
        | awk '{sum[$1]+=$3; n[$1]++} END{for(c in sum) print c"\t"sum[c]/n[c]}' \
        > abund_files/${s}_abund.txt
done

# 2. 生成文件列表
ls abund_files/*.txt > abund_list.txt

# 3. 运行 MaxBin2
run_MaxBin.pl \
    -contig coassembly.fa \
    -abund_list abund_list.txt \
    -out maxbin2_out/bin \
    -thread 16 \
    -min_contig_length 2000

# 4. 查看结果
ls maxbin2_out/*.fasta | wc -l   # 统计生成的 bin 数量
cat maxbin2_out/*.summary         # 查看每个 bin 的统计摘要

常见报错与解决

报错信息原因解决方法
Cannot find hmmerHMMER 未安装conda install hmmer
Cannot find bowtie2Bowtie2 未安装conda install bowtie2
No bins producedcontig 太短降低 -min_contig_length
EM did not converge迭代次数不足增加 -max_iteration
Perl 模块缺失报错Perl 依赖缺失用 conda 安装而非手动编译

速查表

# 单样本快速 binning
run_MaxBin.pl -contig assembly.fa -abund abund.txt -out bins/bin -thread 8

# 多样本 binning(推荐)
ls *_abund.txt > abund.list
run_MaxBin.pl -contig assembly.fa -abund_list abund.list -out bins/bin -thread 16

# 查看 bin 统计(summary 文件包含每个 bin 的大小和完整性估计)
cat bins/*.summary