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 到特征表

不管用哪种方法,大流程是一样的。我画了一张图,帮你把关键步骤串起来。

从原始数据到特征表流程图 原始 FASTQ 文件 质控(修剪、去嵌合体) OTU 聚类 (97% / 99% 阈值) ASV 去噪 (DADA2 / Deblur) 特征表(OTU/ASV × 样本) + 代表性序列 FASTA 分类注释(SILVA/GTDB) 可视化的丰度表 OTU/ASV 选择会影响后续所有分析 建议先跑小样本测试两种方法

讲一个具体的命令。我用 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 归纳总结:合并、过滤、排序

拿到特征表和注释后,需要整理成最终用于可视化的格式。关键动作:

  1. 合并:如果你有多个批次的数据,用 qiime feature-table merge 合并特征表。
  2. 过滤:去除低丰度(比如总丰度<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
  1. 排序:按门/纲/目/科/属层级汇总。这一步可以在可视化工具里做,但也可以在 QIIME2 里先导出成 CSV。

我个人的经验:过滤时别太狠。比如把 min-frequency 设成 10,一些稀有但关键的指示物种可能就被去掉了。建议先做一次完整表可视化,看看哪些特征在低丰度区域有模式,再手工决定阈值。

4.6 可视化前的数据检验

最后一步也是容易翻车的一步:检查数据完整性。

  • 样本覆盖度:是否所有样本都保留了足够的 reads?用 feature-table summarize 的 qzv 文件看一眼。
  • 分类层级缺失:很多工具在可视化饼图或树图时,要求每个特征至少有界、门、纲、目、科、属 6 级注释。如果某一级丢失(比如“uncultured”),需要手动补成“Others”或者用 qiime taxa collapse 聚合到上一级。
  • 稀疏曲线:如果有时间,跑一个稀疏曲线看测序深度是否够。不够的话,可视化里的 alpha 多样性会不可信。