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_iteration | EM 最大迭代次数 | 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 hmmer | HMMER 未安装 | conda install hmmer |
Cannot find bowtie2 | Bowtie2 未安装 | conda install bowtie2 |
No bins produced | contig 太短 | 降低 -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