宏基因组学与分类工具简介
说到宏基因组学,说白了就是直接从环境样本中提取所有微生物的DNA,然后一股脑儿拿去测序。我刚开始接触这个领域时,觉得跟传统基因组学差不多——不就是多了一些物种嘛。结果第一次跑完数据发现,光一个肠道样本就有几百种微生物混在一起,reads东拼西凑,分类器给你吐出一堆“unclassified”……那感觉就像在菜市场里数清楚究竟有多少个摊位。
从测序到物种分类:两步走
宏基因组分析一般分两大步:质控和分类注释。质控我们后面会细聊,今天先聚焦分类工具。目前主流工具分成两派:
- 基于k-mer的快速匹配法——典型代表就是Kraken2
- 基于标记基因的序列分箱法——典型代表是MetaPhlAn
这两派思路完全不同。我个人习惯把第一派叫作“暴力比对”,几乎把参考基因组所有短片段都编入索引,然后拿测序reads逐个匹配。第二派则聪明一些,只挑那些物种特异的标记基因来比对,相当于只认身份证,不看全身照。
Kraken2:暴力但高效
Kraken2的核心是构建一个k-mer字典——把NCBI RefSeq里所有微生物基因组切成31bp左右的短串,存起来。来了一个测序read,就查这个字典,看它能匹配到哪个物种的k-mer最多。
优点:速度快,内存友好(用改进的哈希表),对未知物种敏感度较高。
缺点:假阳性偏多,如果参考数据库里有近缘物种就很容易张冠李戴。
我记得之前给一个口腔样本跑Kraken2,用它默认的PlusPF数据库,结果报出30%的“Streptococcus mitis”。后来一查,实际里面大量是Streptococcus oralis,两个基因组太像了,k-mer重叠太高。
MetaPhlAn:精准但依赖标记基因
MetaPhlAn走的是另一条路。它预先从每个微生物基因组里挑出几百个唯一标记基因(通常是clade-specific marker genes),相当于每个物种的“指纹”。比对时只关注这些区域,匹配成功才认定存在。
避坑指南:MetaPhlAn需要定期更新数据库。我曾经因为用了2020年的旧版MetaPhlAn3,结果分析一个新发表的婴儿肠道样本时,漏掉了好几种“新”发现的Clostridiales物种。因为它们的标记基因根本没收录进去。
直观对比:一张表格看明白
| 维度 | Kraken2 | MetaPhlAn |
|---|---|---|
| 核心算法 | k-mer精确匹配 | 标记基因比对 |
| 参考数据库 | 全基因组k-mer索引 | clade-specific marker genes |
| 速度 | 极快(~100万reads/分钟) | 较快(~20万reads/分钟) |
| 假阳性率 | 中等 | 较低(标记基因特异性高) |
| 对新型物种 | 有一定捕获能力(但会乱标) | 基本只能识别已知物种 |
| 结果单位 | read counts / 相对丰度 | 相对丰度(基于标记基因覆盖度) |
工作流程:我通常怎么做
拿到原始双端测序数据(fastq),第一步永远是质控(后面会有详细一章)。质控后,我会同时跑Kraken2和MetaPhlAn,因为两个工具互相补充。下面是简化的命令行示例:
# Kraken2 分类
kraken2 --db $DB_DIR --threads 8 \
--paired sample_R1.fastq sample_R2.fastq \
--output kraken2.out --report kraken2.report
# MetaPhlAn 分类
metaphlan sample_merged.fastq --bowtie2db $DB_DIR \
--input_type fastq --nproc 8 \
-o metaphlan_profile.tsv
跑完之后,Kraken2给你一个每个read的分类ID列表和汇总报告;MetaPhlAn直接给出物种级相对丰度表。两个结果放到一起对比,你会发现有些低丰度物种在Kraken2里可能被放大,而在MetaPhlAn里直接没检测到。
核心逻辑图:两种工具的分合
下面这张SVG图展示了从原始数据到分类结果的完整流程,并标出Kraken2和MetaPhlAn在每个环节的差异。
关于数据库,我必须说两句
无论是Kraken2的PlusPF(~50GB)还是MetaPhlAn的mpa_vOct23_CHOCOPhlAnSGB_202307,数据库大小直接影响分析内存和精度。我曾吃过一个亏:用服务器256GB内存跑Kraken2 PlusPF,结果数据库加载到内存时直接OOM,后来才发现需要改成mmap模式。所以,建议大家先看自己机器配置,拿小数据试跑一遍再上全量样本。
注意:Kraken2的索引文件不能放在网络存储上,否则随机IO会拖慢到不可用。MetaPhlAn的Bowtie2索引也同理。我一般放本地NVMe SSD。
选哪个?我的实战口诀
- 追求速度 + 发现新物种可能性 → 先跑Kraken2,粗略看全貌。
- 追求精度 + 只想确认已知物种 → 跑MetaPhlAn,假阳性少。
- 最佳实践 → 两个都跑,取交集,再检查差异部分。