跳转至

宏基因组装配与评估(MEGAHIT / metaSPAdes / QUAST / MetaQUAST)


一句话概述

宏基因组装配将来自复杂微生物群落的短序列reads拼接为较长的连续序列(contigs),本教程覆盖MEGAHIT和metaSPAdes装配器以及QUAST/MetaQUAST质量评估的完整实战流程。


目录


1. 核心知识点

序号步骤工具目的输入输出关键参数
1质控与预处理FastQC/Trim Galore/BBTools去除低质量reads和宿主污染Raw FASTQClean FASTQ-q 20 --length 50
2宿主序列去除Bowtie2/BWA去除宿主DNA污染Clean FASTQ + 宿主基因组去宿主FASTQ--un-conc-gz
3MEGAHIT装配MEGAHIT低内存快速宏基因组装配Clean FASTQContigs FASTA--min-contig-len 500
4metaSPAdes装配metaSPAdes高质量宏基因组装配Clean FASTQContigs/Scaffolds--meta, 内存需求高
5装配质量评估QUAST/MetaQUAST评估装配连续性和正确性Contigs FASTA质量报告参考基因组(可选)
6Reads回比Bowtie2/BWA-MEM评估装配覆盖率Contigs + readsBAM/mapping率比对率统计
7覆盖度计算MetaBAT2/jgi_summarize计算contig覆盖深度BAM文件深度表多样本联合
8基因预测Prodigal在contigs上预测基因Contigs FASTA基因GFF + 蛋白FAA-p meta
9BinningMetaBAT2/CONCOCT/MaxBin2将contigs聚类为基因组binContigs + 深度 + 组成Bin FASTA文件最小contig长度
10Bin质量评估CheckM/CheckM2评估bin的完整性和污染Bin FASTA质量报告completeness/contamination

2. 各步骤详解

步骤1:质控与预处理

白话解释:宏基因组原始测序数据中包含低质量碱基、接头序列、极短片段和可能的宿主DNA。这些"噪音"如果不去除,会增加装配的错误率并浪费计算资源。宏基因组的数据量通常很大(数十到数百GB),因此质控效率很重要。

技术细节

宏基因组质控的特殊考量: - 数据量大:宏基因组项目通常每个样本5-50 GB数据,需要高效的质控工具 - 复杂度高:包含数千个物种的序列,质控参数不能太激进(避免丢失低丰度物种) - 宿主污染:人类相关样本(肠道、皮肤等)可能含30-90%的宿主DNA - PhiX spike-in:Illumina测序常加入PhiX对照,需要去除

BBTools suite(BBDuk)在宏基因组质控中特别高效,支持一步完成接头去除、质量修剪和PhiX过滤。

# BBDuk一步质控(推荐,速度快)
bbduk.sh \
  in1=raw_R1.fastq.gz in2=raw_R2.fastq.gz \
  out1=clean_R1.fastq.gz out2=clean_R2.fastq.gz \
  ref=adapters.fa,phix174_ill.ref.fa \
  ktrim=r k=23 mink=11 hdist=1 \
  qtrim=rl trimq=20 \
  minlen=50 \
  threads=16

# 或使用Trim Galore
trim_galore --paired --quality 20 --length 50 \
  --cores 4 --fastqc \
  raw_R1.fastq.gz raw_R2.fastq.gz \
  -o trimmed/

步骤2:宿主序列去除

白话解释:如果样本来自与宿主相关的环境(如人类肠道),很大比例的reads可能来自宿主基因组。这些宿主序列不仅浪费装配计算资源,还可能产生错误的contigs。需要先将reads比对到宿主基因组,去除比对上的reads。

技术细节

去宿主的策略: - 将reads比对到宿主参考基因组 - 保留未比对的reads(即微生物来源的reads) - 对于人类样本,使用GRCh38参考基因组 - 可以使用严格参数减少假比对(误删微生物序列)

Bowtie2的--very-sensitive模式可以更彻底地去除宿主序列,但速度稍慢。对于高宿主比例的样本(如痰液),这一步可以大幅减少后续处理的数据量。

# 构建宿主基因组索引
bowtie2-build --threads 16 human_genome_GRCh38.fa host_index

# 去除宿主reads
bowtie2 -x host_index \
  -1 clean_R1.fastq.gz -2 clean_R2.fastq.gz \
  --very-sensitive \
  --threads 16 \
  --un-conc-gz dehost_R%.fastq.gz \
  -S /dev/null 2> host_mapping_stats.txt

# 统计宿主比例
echo "宿主reads比例:"
grep "overall alignment rate" host_mapping_stats.txt

步骤3:MEGAHIT装配

白话解释:MEGAHIT是一个专为宏基因组设计的装配器,最大的特点是内存使用低、速度快。它使用succinct de Bruijn图和多个k-mer大小的迭代装配策略,适合处理大规模宏基因组数据。

技术细节

MEGAHIT的核心特性: - Succinct de Bruijn Graph(SdBG):压缩的数据结构,内存占用仅为标准dBG的1/10 - 多k-mer迭代:自动使用一系列k值(默认21,29,39,59,79,99,119,141),综合利用不同k值的优势 - 适用场景:内存有限(<100GB RAM)、数据量大、需要快速结果

k-mer选择的权衡: - 小k值:对低覆盖度物种更友好,但可能产生更多分支(重复区域歧义) - 大k值:能解决重复区域,但需要更高覆盖度

MEGAHIT vs metaSPAdes的选择: - MEGAHIT:内存效率高、速度快,适合大数据量和资源受限的情况 - metaSPAdes:装配质量通常略高(特别是高覆盖度物种),但内存需求大得多

# MEGAHIT基本运行
megahit \
  -1 dehost_R1.fastq.gz \
  -2 dehost_R2.fastq.gz \
  -o megahit_output \
  --min-contig-len 500 \
  -t 16 \
  --presets meta-large

# 更精细的参数控制
megahit \
  -1 dehost_R1.fastq.gz \
  -2 dehost_R2.fastq.gz \
  -o megahit_output \
  --min-contig-len 500 \
  --k-min 21 --k-max 141 --k-step 12 \
  --min-count 2 \
  --memory 0.9 \
  -t 16

# 多样本联合装配(co-assembly)
megahit \
  -1 sample1_R1.fq.gz,sample2_R1.fq.gz,sample3_R1.fq.gz \
  -2 sample1_R2.fq.gz,sample2_R2.fq.gz,sample3_R2.fq.gz \
  -o coassembly_output \
  --min-contig-len 1000 \
  -t 32 \
  --presets meta-large

步骤4:metaSPAdes装配

白话解释:metaSPAdes是SPAdes装配器的宏基因组模式。它使用多k-mer de Bruijn图和自动选择的参数,装配质量通常优于MEGAHIT,特别是对于中高丰度物种。但代价是更高的内存需求和更长的运行时间。

技术细节

metaSPAdes的特性: - 基于SPAdes框架,使用paired de Bruijn图 - 自动多k-mer装配(默认k=21,33,55,77,99,127) - 可以利用PE信息构建scaffolds - 内存需求高:每100M reads约需100-200GB RAM

metaSPAdes不适合的场景: - 超大数据量(>100GB),内存不够 - 需要快速结果的情况 - 低复杂度样本(metaSPAdes为高多样性设计)

注意:metaSPAdes不支持超过1亿条paired-end reads的输入。如果数据量太大,需要先做digital normalization或使用MEGAHIT。

# metaSPAdes装配
metaspades.py \
  -1 dehost_R1.fastq.gz \
  -2 dehost_R2.fastq.gz \
  -o metaspades_output \
  -t 32 \
  -m 500 \
  --only-assembler

# 如果同时有Illumina和Nanopore数据(混合装配)
metaspades.py \
  -1 illumina_R1.fastq.gz \
  -2 illumina_R2.fastq.gz \
  --nanopore nanopore_reads.fastq.gz \
  -o hybrid_assembly \
  -t 32 \
  -m 500

# 检查装配结果
echo "metaSPAdes contigs统计:"
grep -c "^>" metaspades_output/contigs.fasta

步骤5:装配质量评估

白话解释:装配完成后,需要评估结果的质量。主要关注两方面:(1)连续性——contigs有多长?(2)正确性——装配有没有错误?QUAST提供详细的装配统计,MetaQUAST专门针对宏基因组。

技术细节

关键装配质量指标: - Total length:所有contigs的总长度 - Number of contigs:contig数量(越少通常越好) - N50:将contigs按长度排序,累积长度达到总长50%时的contig长度(越大越好) - L50:为达到N50所需的最少contig数(越小越好) - Largest contig:最长的contig - GC content:反映群落组成

MetaQUAST相比QUAST的额外功能: - 自动识别已知物种的参考基因组 - 计算基因组恢复率(多少参考基因组被装配覆盖) - 评估嵌合体contigs(混合了不同物种的序列)

注意:宏基因组的N50不如单基因组装配中那么有意义(高丰度物种贡献大contig,低丰度物种只有短contig)。

# QUAST基本评估
quast.py \
  megahit_output/final.contigs.fa \
  metaspades_output/contigs.fasta \
  -o quast_comparison \
  --min-contig 500 \
  -t 16 \
  --labels "MEGAHIT,metaSPAdes"

# MetaQUAST(宏基因组专用)
metaquast.py \
  megahit_output/final.contigs.fa \
  metaspades_output/contigs.fasta \
  -o metaquast_output \
  --min-contig 500 \
  -t 16 \
  --labels "MEGAHIT,metaSPAdes" \
  --max-ref-number 50

# 快速统计(不需要参考基因组)
# assembly-stats或自定义脚本
assembly-stats megahit_output/final.contigs.fa

步骤6:Reads回比(Read Mapping)

白话解释:把原始reads比对回装配结果,看看有多少reads能找到"家"。比对率(mapping rate)是装配质量的重要指标——如果大量reads无法比对,说明装配遗漏了很多序列信息。

技术细节

Reads回比的多重用途: 1. 评估装配完整性:mapping率越高,说明装配越完整 2. 计算覆盖深度:后续binning的核心输入 3. 多样本差异覆盖:不同样本对同一组contigs的覆盖模式可以帮助binning区分不同物种

对于co-assembly(多样本联合装配),需要将每个样本的reads单独比对回来,产生多个BAM文件。不同物种在不同样本中的丰度差异(覆盖度模式)是MetaBAT2等binning工具的重要信号。

好的宏基因组装配通常有60-90%的mapping率(取决于样本复杂度和测序深度)。

# 构建contigs索引
bowtie2-build --threads 16 final.contigs.fa contigs_index

# Reads回比
bowtie2 -x contigs_index \
  -1 dehost_R1.fastq.gz -2 dehost_R2.fastq.gz \
  --threads 16 \
  --very-sensitive \
  --no-unal \
  2> mapping_stats.txt \
  | samtools sort -@ 8 -o mapped.bam

samtools index mapped.bam

# 统计mapping率
echo "Mapping率:"
samtools flagstat mapped.bam | grep "mapped ("

# 多样本回比(用于binning)
for SAMPLE in sample1 sample2 sample3; do
  bowtie2 -x contigs_index \
    -1 ${SAMPLE}_R1.fastq.gz -2 ${SAMPLE}_R2.fastq.gz \
    --threads 16 --no-unal \
    | samtools sort -@ 8 -o ${SAMPLE}_mapped.bam
  samtools index ${SAMPLE}_mapped.bam
done

步骤7:覆盖度计算

白话解释:计算每个contig在每个样本中被reads覆盖的平均深度。这个信息对binning至关重要——来自同一物种的contigs应该在各样本中有相似的覆盖模式。

技术细节

覆盖度计算方法: - 平均深度:contig上所有位置的平均覆盖reads数 - 变异深度(方差):深度的不均匀性,过高可能表示嵌合体

MetaBAT2提供的jgi_summarize_bam_contig_depths工具是标准的覆盖度计算工具,它同时计算平均深度和深度方差,输出格式直接兼容MetaBAT2。

多样本覆盖信息(differential coverage)是binning的关键——同一物种的contigs在不同样本中的丰度变化应该一致(协变),而不同物种的contigs覆盖模式不同。

# 使用MetaBAT2的工具计算覆盖深度
jgi_summarize_bam_contig_depths \
  --outputDepth depth.txt \
  sample1_mapped.bam \
  sample2_mapped.bam \
  sample3_mapped.bam

# 输出格式:contigName contigLen totalAvgDepth sample1_depth sample1_var ...
head -2 depth.txt

步骤8:基因预测

白话解释:在装配好的contigs上预测基因(开放阅读框),为后续的功能注释和代谢分析做准备。宏基因组中的基因预测必须使用meta模式(因为contigs可能来自不完整的基因组片段)。

技术细节

Prodigal的meta模式(-p meta)与normal模式的区别: - meta模式使用预训练的参数,不从输入数据中学习(因为宏基因组中每个物种的contig可能很少) - meta模式可以处理来自多个物种的混合序列 - 对于短contigs(<100kb),meta模式更可靠

输出文件: - .gff:基因坐标和属性 - .faa:预测蛋白质的氨基酸序列 - .fna:预测基因的核酸序列

注意:Prodigal只预测蛋白编码基因,不预测rRNA/tRNA。如需完整注释,可使用Prokka(但对大量contigs可能较慢)。

# Prodigal meta模式
prodigal -i final.contigs.fa \
  -o genes.gff \
  -a proteins.faa \
  -d genes.fna \
  -f gff \
  -p meta

# 统计
echo "预测基因数: $(grep -c '>' proteins.faa)"
echo "平均基因长度: $(grep -v '>' genes.fna | awk '{total+=length($0)} END{print total/NR}')"

步骤9:Binning

白话解释:Binning是宏基因组分析的关键步骤——将属于同一物种的contigs"分拣"到同一个bin中,每个bin理想情况下代表一个物种的基因组(MAG, Metagenome-Assembled Genome)。主要利用两类信号:序列组成(GC含量、四核苷酸频率)和覆盖深度模式。

技术细节

主流binning工具: - MetaBAT2:速度快,自动选参数,使用TNF+覆盖度 - MaxBin2:使用EM算法,需指定目标bin数 - CONCOCT:基于高斯混合模型,适合多样本 - SemiBin2:基于深度学习的新方法,准确度高 - DAS Tool:整合多个工具的结果,选择最优bin集合(推荐!)

Binning策略: - 使用多个工具分别binning,然后用DAS Tool整合 - 最小contig长度通常设为1500-2500bp(太短的contig组成信息不足) - 多样本联合binning(co-assembly + 差异覆盖)通常优于单样本binning

# MetaBAT2 binning
metabat2 \
  -i final.contigs.fa \
  -a depth.txt \
  -o bins/metabat2/bin \
  -m 1500 \
  --maxP 95 --minS 60 \
  -t 16

# MaxBin2 binning
run_MaxBin.pl \
  -contig final.contigs.fa \
  -abund depth_maxbin.txt \
  -out bins/maxbin2/bin \
  -thread 16

# CONCOCT binning
cut_up_fasta.py final.contigs.fa -c 10000 -o 0 --merge_last \
  -b contigs_10K.bed > contigs_10K.fa
concoct --composition_file contigs_10K.fa \
  --coverage_file coverage_table.tsv \
  -b bins/concoct/ \
  --threads 16

# DAS Tool整合(推荐)
DAS_Tool \
  -i metabat2_contigs2bin.tsv,maxbin2_contigs2bin.tsv,concoct_contigs2bin.tsv \
  -l MetaBAT2,MaxBin2,CONCOCT \
  -c final.contigs.fa \
  -o bins/das_tool \
  --write_bins \
  -t 16 \
  --search_engine diamond

步骤10:Bin质量评估

白话解释:评估每个bin是否真的代表一个"好的"基因组。主要看两个指标:完整性(conserved genes找到了多少)和污染(是否混入了其他物种的序列)。根据MIMAG标准,高质量MAG需要完整性>90%且污染<5%。

技术细节

CheckM/CheckM2:评估bin质量的金标准工具 - 使用单拷贝标记基因评估完整性 - 如果标记基因出现多拷贝,提示污染 - CheckM2使用机器学习方法,对不完整基因组评估更准确

MAG质量标准(MIMAG, Bowers et al. 2017): - 高质量:完整性>90%,污染<5%,有23S/16S/5S rRNA和≥18个tRNA - 中质量:完整性≥50%,污染<10% - 低质量:完整性<50%,污染<10%

后续改进: - bin refinement:使用RefineM或手动curation去除污染contigs - reassembly:将bin对应的reads提取出来重新装配(常能改善)

# CheckM2评估
checkm2 predict \
  --input bins/das_tool/bins/ \
  --output_directory checkm2_results \
  --threads 16 \
  --extension fa

# CheckM (经典版本)
checkm lineage_wf \
  bins/das_tool/bins/ \
  checkm_results/ \
  -x fa \
  -t 16 \
  --pplacer_threads 4

# 查看结果摘要
checkm qa checkm_results/lineage.ms checkm_results/ \
  -f checkm_summary.txt \
  --tab_table

# 筛选高质量MAG
awk -F'\t' '$12>90 && $13<5' checkm_summary.txt > high_quality_mags.txt
echo "高质量MAG数: $(wc -l < high_quality_mags.txt)"

3. 实战命令/代码(完整流程)

#!/bin/bash
# ==================================================
# 宏基因组装配与评估完整流程
# ==================================================

set -euo pipefail

THREADS=32
MEMORY=200  # GB
R1="raw_data/sample_R1.fastq.gz"
R2="raw_data/sample_R2.fastq.gz"
HOST_DB="databases/human_GRCh38"
OUTDIR="metagenome_assembly"

mkdir -p ${OUTDIR}/{qc,assembly/{megahit,metaspades},evaluation,mapping,binning,checkm}

# ==== Step 1: 质控 ====
echo "=== Step 1: 质控 ==="
bbduk.sh \
  in1=${R1} in2=${R2} \
  out1=${OUTDIR}/qc/clean_R1.fastq.gz out2=${OUTDIR}/qc/clean_R2.fastq.gz \
  ref=adapters.fa,phix174_ill.ref.fa \
  ktrim=r k=23 mink=11 hdist=1 \
  qtrim=rl trimq=20 minlen=50 \
  threads=${THREADS}

# ==== Step 2: 去宿主 ====
echo "=== Step 2: 去宿主 ==="
bowtie2 -x ${HOST_DB} \
  -1 ${OUTDIR}/qc/clean_R1.fastq.gz -2 ${OUTDIR}/qc/clean_R2.fastq.gz \
  --very-sensitive --threads ${THREADS} \
  --un-conc-gz ${OUTDIR}/qc/dehost_R%.fastq.gz \
  -S /dev/null 2> ${OUTDIR}/qc/host_stats.txt

echo "宿主比例:"
grep "overall alignment rate" ${OUTDIR}/qc/host_stats.txt

# ==== Step 3: MEGAHIT装配 ====
echo "=== Step 3: MEGAHIT装配 ==="
megahit \
  -1 ${OUTDIR}/qc/dehost_R1.fastq.gz \
  -2 ${OUTDIR}/qc/dehost_R2.fastq.gz \
  -o ${OUTDIR}/assembly/megahit \
  --min-contig-len 500 \
  -t ${THREADS} \
  --presets meta-large

# ==== Step 4: metaSPAdes装配 ====
echo "=== Step 4: metaSPAdes装配 ==="
metaspades.py \
  -1 ${OUTDIR}/qc/dehost_R1.fastq.gz \
  -2 ${OUTDIR}/qc/dehost_R2.fastq.gz \
  -o ${OUTDIR}/assembly/metaspades \
  -t ${THREADS} \
  -m ${MEMORY} \
  --only-assembler

# ==== Step 5: 质量评估 ====
echo "=== Step 5: QUAST评估 ==="
metaquast.py \
  ${OUTDIR}/assembly/megahit/final.contigs.fa \
  ${OUTDIR}/assembly/metaspades/contigs.fasta \
  -o ${OUTDIR}/evaluation/ \
  --min-contig 500 \
  -t ${THREADS} \
  --labels "MEGAHIT,metaSPAdes"

# ==== Step 6: 选择最佳装配,reads回比 ====
echo "=== Step 6: Reads回比 ==="
BEST_ASSEMBLY="${OUTDIR}/assembly/megahit/final.contigs.fa"

bowtie2-build --threads ${THREADS} ${BEST_ASSEMBLY} ${OUTDIR}/mapping/contigs_idx

bowtie2 -x ${OUTDIR}/mapping/contigs_idx \
  -1 ${OUTDIR}/qc/dehost_R1.fastq.gz -2 ${OUTDIR}/qc/dehost_R2.fastq.gz \
  --threads ${THREADS} --no-unal \
  2> ${OUTDIR}/mapping/mapping_stats.txt \
  | samtools sort -@ 8 -o ${OUTDIR}/mapping/mapped.bam

samtools index ${OUTDIR}/mapping/mapped.bam
echo "Mapping率:"
samtools flagstat ${OUTDIR}/mapping/mapped.bam | grep "mapped ("

# ==== Step 7: 覆盖度计算 ====
echo "=== Step 7: 覆盖度计算 ==="
jgi_summarize_bam_contig_depths \
  --outputDepth ${OUTDIR}/mapping/depth.txt \
  ${OUTDIR}/mapping/mapped.bam

# ==== Step 8: 基因预测 ====
echo "=== Step 8: 基因预测 ==="
prodigal -i ${BEST_ASSEMBLY} \
  -o ${OUTDIR}/assembly/genes.gff \
  -a ${OUTDIR}/assembly/proteins.faa \
  -d ${OUTDIR}/assembly/genes.fna \
  -f gff -p meta

echo "预测基因数: $(grep -c '>' ${OUTDIR}/assembly/proteins.faa)"

# ==== Step 9: Binning ====
echo "=== Step 9: Binning ==="
# MetaBAT2
metabat2 -i ${BEST_ASSEMBLY} -a ${OUTDIR}/mapping/depth.txt \
  -o ${OUTDIR}/binning/metabat2/bin -m 1500 -t ${THREADS}

echo "MetaBAT2 bins: $(ls ${OUTDIR}/binning/metabat2/*.fa 2>/dev/null | wc -l)"

# ==== Step 10: Bin质量评估 ====
echo "=== Step 10: CheckM2评估 ==="
checkm2 predict \
  --input ${OUTDIR}/binning/metabat2/ \
  --output_directory ${OUTDIR}/checkm/ \
  --threads ${THREADS} \
  --extension fa

echo ""
echo "=== 流程完成 ==="
echo "装配结果: ${BEST_ASSEMBLY}"
echo "质量报告: ${OUTDIR}/evaluation/report.html"
echo "Bin目录: ${OUTDIR}/binning/metabat2/"
echo "CheckM结果: ${OUTDIR}/checkm/quality_report.tsv"

4. 面试常问点

Q1:MEGAHIT和metaSPAdes有什么区别?如何选择?

MEGAHIT使用succinct de Bruijn图,内存占用低(约为metaSPAdes的1/5-1/10),速度快,适合大数据量和资源有限的情况。metaSPAdes使用paired de Bruijn图,装配质量通常略高(特别是中高丰度物种的N50更好),但内存需求很高。选择建议:资源充足且数据量适中时用metaSPAdes;数据量>50GB或内存<100GB时用MEGAHIT。

Q2:什么是N50?在宏基因组装配中N50有什么特殊含义?

N50是将contigs按长度降序排列后,累积长度达到总长50%时对应的contig长度。在单基因组装配中,N50直接反映装配连续性。但在宏基因组中,N50受群落组成影响很大——高丰度物种贡献长contigs(高覆盖度有利于装配),低丰度物种只能产生短contigs。因此宏基因组的N50不如单基因组中那么有可比性,还需结合mapping率、bin质量等指标综合评价。

Q3:Co-assembly和单样本装配各有什么优缺点?

Co-assembly(联合装配):将多个样本的reads合并后一起装配。优点:增加覆盖深度,能恢复单样本中数据不足的物种;利于跨样本binning。缺点:相似物种的序列可能被错误合并成嵌合体。单样本装配:每个样本独立装配。优点:避免跨样本嵌合体;保留应变水平差异。缺点:低丰度物种可能装配不起来。策略:对于相似环境的样本适合co-assembly;差异大的样本(如不同个体)适合单样本装配。

Q4:Binning的原理是什么?为什么需要多样本覆盖度信息?

Binning利用两类信号:(1)序列组成(GC含量、四核苷酸频率)——同一物种的基因组组成相对均匀;(2)覆盖深度模式——同一物种在同一样本中的所有contigs应有相似的覆盖深度。多样本覆盖度提供额外的区分力:两个GC含量相似的物种,在不同样本中的丰度可能不同,因此它们的contigs在多样本中的覆盖模式不同,可以被区分开。

Q5:CheckM如何评估MAG质量?completeness和contamination分别代表什么?

CheckM使用一组针对特定谱系的单拷贝标记基因来评估。Completeness(完整性):如果该谱系应有100个标记基因,bin中找到了90个,则完整性为90%。Contamination(污染):如果某些标记基因出现了多个拷贝,说明bin中混入了其他物种的序列。例如检测到105个标记基因(某些重复),污染≈5%。高质量MAG标准:completeness>90%,contamination<5%。

Q6:为什么宏基因组装配比单基因组装配困难得多?

原因:(1)覆盖度不均匀——高丰度物种可能有1000×覆盖而低丰度物种只有1×,装配器难以同时处理;(2)相似物种间的基因组区域(如保守基因、16S rRNA)产生图中的分支歧义;(3)种内变异(应变多样性)使de Bruijn图复杂化;(4)数据量巨大,对计算资源要求高;(5)没有物理覆盖度信息来判断哪些contigs来自同一基因组。


5. 易错/易混淆点

  1. 忘记去除宿主序列:人类肠道样本中宿主DNA可能占30-90%。不去除宿主会浪费大量计算资源在装配人类基因组上,还可能产生人-微生物嵌合contigs。

  2. minimum contig length设置不当:太低(如200bp)会产生大量无用短contigs且浪费后续分析时间;太高(如5000bp)会丢失低丰度物种信息。一般建议:装配时用500bp,binning时用1500-2500bp。

  3. 混淆scaffolds和contigs:SPAdes输出scaffolds.fasta(用N填充gap)和contigs.fasta(无gap)。对于宏基因组binning,通常使用contigs.fasta更安全(scaffolds中的N可能导致基因预测错误)。

  4. 单样本数据使用co-assembly思路:如果只有一个样本但使用了多个lane的测序数据,应该合并为一个输入而不是当作多样本处理。反之,不相关的样本强行co-assembly可能产生嵌合体。

  5. 忽略reads mapping率:即使N50很大,如果mapping率很低(<50%),说明大量reads没有被成功装配,分析结果只代表群落的一部分。应报告mapping率。

  6. Binning时使用太短的contigs:短于1500bp的contigs缺乏足够的四核苷酸频率信息,binning准确性会很差。应设置合理的最小长度阈值。

  7. 将completeness误解为基因组覆盖率:CheckM的completeness基于标记基因的存在与否,不是基因组碱基的覆盖百分比。一个99%完整的MAG可能仍然缺少一些非标记基因区域。


6. 补充知识

长读长宏基因组装配

  • HiFi宏基因组:PacBio HiFi reads(~15kb,>99%准确率)正在改变宏基因组装配
  • hifiasm-meta:专为HiFi宏基因组设计的装配器,可直接产出近完整MAGs
  • Nanopore宏基因组:长度优势(>10kb)但错误率较高,适合混合装配
  • 混合装配策略:短reads+长reads结合,先用长reads搭建框架,短reads矫正

Bin改进和后续分析

  • Bin refinement:使用RefineM、MAGpurify去除污染contigs
  • Bin reassembly:提取bin对应的reads重新装配(如VAMB + Reassembly)
  • dRep:去除冗余MAGs(同一物种可能在多个样本中被独立binning)
  • GTDB-Tk:MAG的分类注释
  • 基因组代谢重建:DRAM、MetaPathways注释代谢通路

推荐资源

  • MEGAHIT: https://github.com/voutcn/megahit
  • metaSPAdes: https://github.com/ablab/spades
  • QUAST: https://github.com/ablab/quast
  • MetaBAT2: https://bitbucket.org/berkeleylab/metabat
  • CheckM2: https://github.com/chklovski/CheckM2
  • DAS Tool: https://github.com/cmks/DAS_Tool
  • 综述: Ayling et al. (2020) "New approaches for metagenome assembly" Briefings in Bioinformatics