第一章:什么是宏基因组物种分类?Kraken2 和 MetaPhlAn 概述

大家好,我是老李,干微生物组生物信息有七八年了。今天咱们来聊聊宏基因组物种分类。

说白了,就是给你一堆从环境样本里直接测出来的 DNA 片段,让你回答一个问题:这里面有哪些微生物? 比例是多少?

我刚开始入行时,觉得这和拼图差不多。但实际干起来,情况复杂得多。

1.1 宏基因组物种分类到底在解决什么?

传统的微生物研究,得先培养。你想想看,肠道里的细菌,大部分在实验室根本养不活。宏基因组测序绕过了这一步——直接把样本里所有微生物的 DNA 抽出来,打成小片段,上机测序。结果就是一堆几百万条、长度 100-300 bp 的短 reads。

你需要一个分类器,把这些 reads 分配到某个物种,或者至少分到属、科级别。这就是宏基因组物种分类。

我遇到过很多新人,一上来就问:“哪个工具最准?” 其实没有万能答案。不同场景,选型标准差很多。

核心目标: 将测序 reads 映射到参考数据库中的某个分类单元(种/属/科/门),并估算其相对丰度。

1.2 两种主流思路:基于 k-mer 匹配 vs 基于标记基因

目前社区里最火的两个工具,Kraken2 和 MetaPhlAn,走的路线完全不同。

  • Kraken2:基于 k-mer 精确匹配。它把参考基因组的每条序列切成长度为 k 的短串(k-mer),建一个哈希表。你的一条 query read 进来,也切成 k-mer,去哈希表里找。最后用 LCA(最低公共祖先)算法确定分类。
  • MetaPhlAn:基于标记基因(marker genes)。它只挑选那些在物种内高度保守、在物种间有足够差异的基因——比如特定的核糖体蛋白、看家基因。比对的不是全基因组,而是这个精简的标记基因集合。

这两种思路,决定了它们在速度、精度、内存消耗上的巨大差异。我自己的项目里,做过好几次对比,后面慢慢给你细说。

1.3 Kraken2 的核心设计

Kraken2 最让我印象深刻的是它的 k-mer 精确匹配 + LCA 定类 机制。整个流程分两步:建库和分类。

  • 建库:从 RefSeq、GenBank 等下载参考基因组,提取所有 k-mer(默认 k=35),存入一个在内存中的哈希表。每个 k-mer 映射到它来源的分类 ID。
  • 分类:读入每条 read,切分成多个 k-mer,去哈希表查询每个 k-mer 对应的分类。对查到的分类 ID 做 LCA,得到该 read 的分类。如果 read 中足够多的 k-mer 映射到同一个分类,就认为该 read 属于这个分类。

我在项目中遇到过一个问题:当两个亲缘关系很近的物种共享大量 k-mer 时,Kraken2 会趋向于把 read 分到更高的分类层级(比如属),而不是种。这点很重要,后面对比表格里会提到。

1.4 MetaPhlAn 的核心设计

MetaPhlAn 走的是另一条路。它不需要全基因组索引,只依赖一个专家精选的标记基因目录。

  1. 标记基因数据库:从所有已知微生物基因组中,挑出约 8000 个物种特异性的标记基因。每个物种有大约 500–1000 个标记基因。
  2. 比对:用 Bowtie2(MetaPhlAn 4 也用 BWA)把 reads 比对到这个标记基因库。
  3. 丰度估算:根据比对到每个物种标记基因上的 reads 数量,结合标记基因的拷贝数和基因组大小,计算相对丰度。

说白了,MetaPhlAn 只盯着那些“一锤定音”的基因。它对自己数据库覆盖不到的物种基本无能为力。但好处是——数据库小,跑得快,内存省。

1.5 核心差异一览

对比维度 Kraken2 MetaPhlAn
比对原理 k-mer 精确匹配 + LCA 标记基因比对 (Bowtie2/BWA)
数据库范围 全基因组(RefSeq等) 精选标记基因集
数据库大小 大(标准库约 50 GB+) 小(约 1–2 GB)
运行速度 快(k-mer 哈希直接查) 中(需要比对)
内存需求 高(50 GB–100 GB+) 低(4 GB–8 GB 足够)
物种分辨率 依赖数据库,对近缘种易归到属 标记基因设计可区分近缘种
新物种/未测序物种 部分可发现(通过共享 k-mer) 基本无法检测
相对丰度准确性 需额外用 Bracken 校正 内置丰度估算模型
我的经验: 如果你只看已知物种,且希望快速拿到丰度谱,直接上 MetaPhlAn 很省心。但如果样本含有大量未知微生物,或者你想做发现类研究,Kraken2 覆盖面更广。

1.6 一张图理清两种思路

下面这张 SVG 图,帮你把两个工具的核心流程和差异可视化一下。

Kraken2 vs MetaPhlAn 核心流程对比 测序 Reads Kraken2 流程 全基因组 k-mer 数据库(~50G) k-mer 精确匹配 + LCA 通过哈希表快速查询 输出:每个 read 的分类 丰度需用 Bracken 校正 MetaPhlAn 流程 标记基因数据库(~1G) Bowtie2/BWA 比对 只比对到标记基因 内置丰度估算模型 直接输出物种相对丰度表 物种分类与丰度 Kraken2 覆盖面广,内存高 MetaPhlAn 轻量,标记基因专一并准

1.7 什么时候该用哪个?

我通常根据这几个问题来判断:

  • 样本中有没有大量未知物种? 比如海洋、土壤样本。有——Kraken2 更靠谱。没有(比如人类肠道样本)——MetaPhlAn 又快又准。
  • 机器内存多大? 只有 16G 内存的老服务器,别想跑 Kraken2 标准库。MetaPhlAn 轻松跑。
  • 你需要种水平的分类吗? Kraken2 对近缘种经常“偷懒”归到属。MetaPhlAn 的标记基因在种级分辨率上更好。不过两者差距没有想象中大,需要具体数据集验证。
  • 只是做常规 QC 还是发论文? 快速看个物种组成,MetaPhlAn 够了。严谨的差异分析,我建议两个都跑,取交集或互补。
注意: 别以为默认参数就能直接用到自己的数据。Kraken2 的 k-mer 长度、置信度阈值,MetaPhlAn 的比对参数、数据库版本,都会影响最终结果。我每次都会在自己的测试集上调一下参数再批量跑。

1.8 本章小结

好了,我们简单总结一下:

  • 宏基因组物种分类,就是把测序 reads 分配到微生物的树枝上。
  • Kraken2 走全基因组 k-mer 精确匹配,覆盖面大,但内存消耗高,种级分辨率依赖数据库。
  • MetaPhlAn 走标记基因比对,轻量快速,主要针对已知物种,丰度估算更直接。
  • 选型的关键在于你的样本类型、计算资源和分析目标。