1. MetaPhlAn 简介:宏基因组物种分类利器

做宏基因组分析的人,十有八九都听过 MetaPhlAn 这个名字。它全称是 Metagenomic Phylogenetic Analysis,由 Huttenhower 实验室开发,专门用标记基因来做物种分类和相对丰度定量。我个人最早接触它是在一次肠道菌群项目的初期,当时读库数据量不大,用传统全基因比对又慢又贵,MetaPhlAn 给了我一条捷径——几小时出结果,而且物种分辨率够用。

1.1 它到底解决了什么问题?

宏基因组测序拿到的是一堆来自不同微生物的 DNA 碎片。传统做法是把每条 reads 往参考基因组上比对,然后统计覆盖度。但这种方式缺点很明显:

  • 计算成本高——比对几亿条 reads 到上万基因组,时间耗不起。
  • 重复序列干扰——保守区域在物种间高度相似,比对容易张冠李戴。
  • 物种覆盖不全——很多环境微生物没有高质量参考基因组。

MetaPhlAn 换了个思路:它只挑出那些 物种特异性足够强、在基因组里单拷贝或低拷贝的标记基因,然后拿 reads 去匹配这些标记。匹配上了,就能直接定种并估算丰度。

小经验: 我做过一次模拟数据测试,把已知比例的 10 个菌种混合测序。MetaPhlAn 的定量偏差大部分在 10% 以内,少数低丰度种(<0.1%)波动大一些。这个精度对绝大多数生态研究够用了。

1.2 核心流程:从 reads 到物种谱

MetaPhlAn 的工作流并不复杂,但每一步都藏着可调的参数。我把主干画成了下面的图,方便大家建立整体印象。

MetaPhlAn 物种分类核心流程 输入:宏基因组reads FASTQ / FASTA 比对专有标记基因库 bowtie2 / 内置索引 物种相对丰度定量 归一化 & 统计 输出物种谱表 TSV / BIOM / 相对丰度矩阵 参数可调区域 --preset / -t / -s / --stat_q 🔑 关键参数影响点 1. 比对严格度(-s):决定是否允许多匹配,影响假阳性/召回率 2. 定量统计方法(--stat_q):影响低丰度种的检测稳定性 3. 建库预设(--preset):选择不同标记基因集,覆盖范围不同

图上我标出了三个“参数可调区域”,这也是咱们这门课的核心对象。很多人拿了旗舰版(--preset phlan4)就跑,但实际项目里 不同参数组合会导致物种谱的漂移,尤其是低丰度种和接近物种界线的类群。

1.3 为什么需要单独做参数敏感性分析?

你肯定听过“参数敏感性分析”这个词——换个参数跑一遍,看结果变不变。听起来简单对吧?但放到 MetaPhlAn 上,坑其实不少。

我举个例子。之前有一个海水样本项目,我们先用默认参数跑了一遍,发现 Vibrio 属丰度只有 0.2%。后来为了看稳定性,我把比对敏感度从 -s 0.5 改到 -s 0.9,结果 Vibrio 直接跳到 1.8%,还多出了好几个未被注释的低频种。究其原因,默认参数下许多属于稀有菌群的 reads 被当作“未比对”扔掉了。如果只报告单一参数的结果,这份数据结论就是误导性的。

⚠️ 曾经踩过的坑: 我以为 MetaPhlAn 输出“相对丰度”就结束了,没关注比对率。后来发现某个样本的比对率只有 2%,绝大多数 reads 被过滤掉。检查后才发现是标记基因版本与样本物种谱不匹配。从此我每次跑前必看 --read_percentage 这一行。

1.4 参数敏感性分析的核心目标

我们把目标讲清楚,后面所有的案例才会对得上。参数敏感性分析不是要把所有参数组合跑一遍(那样你算力吃不消),而是:

  1. 识别关键参数——哪些参数小幅度变化就会导致物种谱显著改变?
  2. 量化波动范围——同一个样本,不同参数下丰度的变异系数有多大?
  3. 建立最佳实践——针对特定样本类型(肠道、海洋、土壤等),推荐哪一组参数?
  4. 判断结论稳健性——你的差异分析结果(A vs B)会不会因为参数选择而逆转?

这四个目标贯穿整门课。第2章开始我们会逐一拆解,用真实数据集演示。

1.5 你需要提前准备好的环境

如果你没有现成的 MetaPhlAn 环境,建议用 conda 快速搭建。我习惯用 mamba 加速安装:

mamba create -n metaphlan -c bioconda -c conda-forge metaphlan
conda activate metaphlan
metaphlan --version

安装完成后,下载新版标记数据库(约 2.5 GB):

metaphlan --install --bowtie2db ~/databases/metaphlan_db

验证数据库是否可用:

metaphlan metagenome_sample.fastq.gz --bowtie2db ~/databases/metaphlan_db \
  --input_type fastq --output_file profile.tsv 2>&1 | head -5

如果看到类似下面这样,说明环境就绪:

Species:        555 taxons detected
Reads mapped:    12.3% (85,000 / 691,000)
-- read_percentage 12.3 --
-- index_used: /path/to/metaphlan_db/mpa_vOct23_CHOCOPhlAnSGB_2024
小建议: 数据库版本、标记基因版本都会影响结果。最好在一组分析中固定数据库版本,否则参数敏感性会混入数据库差异。我通常会把数据库 MD5 值写进项目笔记。

1.6 本章知识点速览表

知识点 一句话说明 对参数敏感性的影响
标记基因选择 每个物种挑选几段保守但特异的基因 标记集大小直接影响召回率和分辨率
bowtie2 比对 将 reads 比对到标记基因索引 比对参数(-s, --n-ceil)改变比对率
相对丰度估算 根据标记覆盖度归一化到 100% 低丰度种受统计截断阈值影响大
输出谱表 TSV 文件:物种→丰度的映射 丰度值对参数波动的敏感程度是本课分析目标