宏基因组装配与评估(MEGAHIT / metaSPAdes / QUAST / MetaQUAST)¶
一句话概述¶
宏基因组装配将来自复杂微生物群落的短序列reads拼接为较长的连续序列(contigs),本教程覆盖MEGAHIT和metaSPAdes装配器以及QUAST/MetaQUAST质量评估的完整实战流程。
目录¶
1. 核心知识点¶
| 序号 | 步骤 | 工具 | 目的 | 输入 | 输出 | 关键参数 |
|---|---|---|---|---|---|---|
| 1 | 质控与预处理 | FastQC/Trim Galore/BBTools | 去除低质量reads和宿主污染 | Raw FASTQ | Clean FASTQ | -q 20 --length 50 |
| 2 | 宿主序列去除 | Bowtie2/BWA | 去除宿主DNA污染 | Clean FASTQ + 宿主基因组 | 去宿主FASTQ | --un-conc-gz |
| 3 | MEGAHIT装配 | MEGAHIT | 低内存快速宏基因组装配 | Clean FASTQ | Contigs FASTA | --min-contig-len 500 |
| 4 | metaSPAdes装配 | metaSPAdes | 高质量宏基因组装配 | Clean FASTQ | Contigs/Scaffolds | --meta, 内存需求高 |
| 5 | 装配质量评估 | QUAST/MetaQUAST | 评估装配连续性和正确性 | Contigs FASTA | 质量报告 | 参考基因组(可选) |
| 6 | Reads回比 | Bowtie2/BWA-MEM | 评估装配覆盖率 | Contigs + reads | BAM/mapping率 | 比对率统计 |
| 7 | 覆盖度计算 | MetaBAT2/jgi_summarize | 计算contig覆盖深度 | BAM文件 | 深度表 | 多样本联合 |
| 8 | 基因预测 | Prodigal | 在contigs上预测基因 | Contigs FASTA | 基因GFF + 蛋白FAA | -p meta |
| 9 | Binning | MetaBAT2/CONCOCT/MaxBin2 | 将contigs聚类为基因组bin | Contigs + 深度 + 组成 | Bin FASTA文件 | 最小contig长度 |
| 10 | Bin质量评估 | 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. 易错/易混淆点¶
忘记去除宿主序列:人类肠道样本中宿主DNA可能占30-90%。不去除宿主会浪费大量计算资源在装配人类基因组上,还可能产生人-微生物嵌合contigs。
minimum contig length设置不当:太低(如200bp)会产生大量无用短contigs且浪费后续分析时间;太高(如5000bp)会丢失低丰度物种信息。一般建议:装配时用500bp,binning时用1500-2500bp。
混淆scaffolds和contigs:SPAdes输出scaffolds.fasta(用N填充gap)和contigs.fasta(无gap)。对于宏基因组binning,通常使用contigs.fasta更安全(scaffolds中的N可能导致基因预测错误)。
单样本数据使用co-assembly思路:如果只有一个样本但使用了多个lane的测序数据,应该合并为一个输入而不是当作多样本处理。反之,不相关的样本强行co-assembly可能产生嵌合体。
忽略reads mapping率:即使N50很大,如果mapping率很低(<50%),说明大量reads没有被成功装配,分析结果只代表群落的一部分。应报告mapping率。
Binning时使用太短的contigs:短于1500bp的contigs缺乏足够的四核苷酸频率信息,binning准确性会很差。应设置合理的最小长度阈值。
将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