4、物种注释与分类单元(OTU/ASV)归纳总结
这一章咱们聊聊 OTU 和 ASV。这两个概念是宏基因组可视化的地基。你想想看,我们拿到一堆测序 reads,第一步就是把它变成可以统计的“特征单元”。怎么变?靠聚类或去噪。说白了,OTU 是老的玩法,ASV 是新的主流。
我自己做项目的时候,早期用 OTU 比较多,后来发现 ASV 在分辨率和可重复性上确实强不少。但这不代表 OTU 没用——有些老数据集、或者某个特定数据库,还是得用 OTU。咱们得两手准备。
4.1 先搞清楚:OTU 和 ASV 到底是什么?
- OTU(Operational Taxonomic Unit):操作分类单元。把相似度 ≥97% 的序列归到一个桶里,每个桶就是一个 OTU。这个 97% 阈值,我当年做的时候就被导师要求改成 99%,后来发现不同的研究差异挺大。
- ASV(Amplicon Sequence Variant):扩增子序列变异。不设阈值,直接对每个 unique 序列进行纠错后保留。分辨率高到单碱基差异。
举个例子:你手上有 10 条序列,其中 9 条一模一样,1 条差了一个碱基。用 OTU(97%),它们很可能会被归到同一个 OTU;用 ASV,它们会变成两个独立的 ASV。哪个更准?看你的研究目的。
我个人习惯:做功能预测或追踪菌株传播时优先用 ASV;做群落 β 多样性粗筛或者想跟历史数据对比时,OTU 更稳。
4.2 OTU 聚类 vs ASV 去噪
| 对比维度 | OTU(如 UPARSE、VSEARCH) | ASV(如 DADA2、Deblur) |
|---|---|---|
| 核心算法 | 通过聚类合并相似序列 | 通过错误模型去噪,保留单碱基差异 |
| 分辨率 | 低(一个 OTU 可能包含多个近缘种) | 高(可区分单碱基差异) |
| 可重复性 | 受聚类阈值和参考数据库影响大 | 相对稳定,不同管道结果接近 |
| 计算资源 | 内存需求中等,速度快 | 内存需求较高,尤其大样本 |
| 输出类型 | OTU 表 + 代表性序列 | ASV 表 + 代表性序列 |
| 常用工具 | QIIME1/2(vsearch)、USEARCH | QIIME2(dada2, deblur) |
我记得有一次帮学生处理一批土壤样本,用 DADA2 跑出来 2300 个 ASV,换成 97% OTU 只有 1200 个 OTU。后来比对发现,丢失的那 1100 个里有一半是低丰度的新物种。所以,选方法前要想清楚:你想要灵敏度还是稳定性?
4.3 实战流程:从 FASTQ 到特征表
不管用哪种方法,大流程是一样的。我画了一张图,帮你把关键步骤串起来。
讲一个具体的命令。我用 QIIME2 做 ASV 的流程是这样的:
# 导入数据
qiime tools import \
--type 'SampleData[PairedEndSequencesWithQuality]' \
--input-path manifest.txt \
--output-path paired-end.qza \
--input-format PairedEndFastqManifestPhred33
# 使用 DADA2 去噪
qiime dada2 denoise-paired \
--i-demultiplexed-seqs paired-end.qza \
--p-trunc-len-f 240 \
--p-trunc-len-r 210 \
--o-representative-sequences rep-seqs.qza \
--o-table table.qza \
--o-denoising-stats stats.qza
# 输出摘要
qiime feature-table summarize \
--i-table table.qza \
--o-visualization table.qzv
小贴士:参数 --p-trunc-len 要根据你的测序质量和目标片段长度来调。我一般先看质量报告,再决定切多少。切太狠会丢信息,切太少会引入错误。
4.4 注释与分类赋税:怎么给特征取名?
有了特征表,下一步是告诉每个 OTU/ASV 它是什么菌。这要靠参考数据库。常用的有:
- SILVA(16S/18S):覆盖面最广,但更新较慢。我主力用它。
- Greengenes:老牌,但已经停更多年了。除非你要跟2013年以前的数据对比,否则别用了。
- GTDB(基因组分类数据库):基于全基因组,分辨率高,但只适用于细菌和古菌。
- UNITE:专门针对真菌 ITS 区域。
注释代码也很简单(以 SILVA 为例):
qiime feature-classifier classify-sklearn \
--i-classifier silva-138-99-nb-classifier.qza \
--i-reads rep-seqs.qza \
--o-classification taxonomy.qza
qiime metadata tabulate \
--m-input-file taxonomy.qza \
--o-visualization taxonomy.qzv
避坑指南:我曾经遇到过数据库版本不一致导致注释率极低的问题。比如你用的 SILVA 138.1 的 classifier,但参考序列是从 SILVA 132 建的,匹配度会差很多。每次换数据库版本,记得重建 classifier。
4.5 归纳总结:合并、过滤、排序
拿到特征表和注释后,需要整理成最终用于可视化的格式。关键动作:
- 合并:如果你有多个批次的数据,用
qiime feature-table merge合并特征表。 - 过滤:去除低丰度(比如总丰度<10)、未注释(“Unassigned”)的特征。我常用的命令:
# 过滤掉未注释的
qiime taxa filter-table \
--i-table table.qza \
--i-taxonomy taxonomy.qza \
--p-exclude 'Unassigned' \
--o-filtered-table filtered-table.qza
# 过滤掉在所有样本中总计数小于5的稀有特征
qiime feature-table filter-features \
--i-table filtered-table.qza \
--p-min-frequency 5 \
--o-filtered-table final-table.qza
- 排序:按门/纲/目/科/属层级汇总。这一步可以在可视化工具里做,但也可以在 QIIME2 里先导出成 CSV。
我个人的经验:过滤时别太狠。比如把 min-frequency 设成 10,一些稀有但关键的指示物种可能就被去掉了。建议先做一次完整表可视化,看看哪些特征在低丰度区域有模式,再手工决定阈值。
4.6 可视化前的数据检验
最后一步也是容易翻车的一步:检查数据完整性。
- 样本覆盖度:是否所有样本都保留了足够的 reads?用
feature-table summarize的 qzv 文件看一眼。 - 分类层级缺失:很多工具在可视化饼图或树图时,要求每个特征至少有界、门、纲、目、科、属 6 级注释。如果某一级丢失(比如“uncultured”),需要手动补成“Others”或者用
qiime taxa collapse聚合到上一级。 - 稀疏曲线:如果有时间,跑一个稀疏曲线看测序深度是否够。不够的话,可视化里的 alpha 多样性会不可信。