Back to skills
extension
Category: Data & AnalyticsNo API key required

东方天意QIIME2 微生物组扩增子分析全流程

这是一个面向 16S 与 ITS 扩增子测序数据的 QIIME 2 命令行分析技能,覆盖从原始 FASTQ 文件导入、引物去除、DADA2 去噪、物种注释、系统发育建树,到稀释曲线、多样性分析、PERMANOVA/PERMDISP 统计检验和 ANCOM-BC 差异丰度分析的完整流程。 该技能特别强调 16S 与 ITS 分析路径的区别、QIIME 2 版本兼容性、关键参数的实证选择,以及利用 .qza/.qzv 内置的 provenance 生成可复现脚本和文献引用。适合希望使用 CLI、重视分析可复现性,或已经在 QIIME 2 生态中开展微生物组研究的用户。 天意云简介: 天意云(dftianyi.com)是专注 AI 云、科研云、生信云领域,集专业、高效、安全于一体的全能科研平台,依托 AI 底座为科研工作赋能,陪伴科研人员科研探索之路。 平台为国家级科技型企业、广东省创新型企业,获得政府引导基金投资;现已服务 10W + 客户,与 500 + 高校及单位达成合作,完成 5000 + 项目交付,汇聚 100 + 生态成员。 业务产品覆盖 AI 工具、科研绘图、生信服务器、科学计算服务器、生信流程定制、数据库网站开发、软件开发,同时提供 PubMed 批量下载、科研云盘等多款科研实用工具。

personAuthor: u_05cff146hubenterprise

QIIME 2 扩增子全流程分析(16S / ITS)

适用场景

当用户提出"用 QIIME 2 跑我的扩增子数据""做 16S 多样性分析""ITS 真菌菌群分析"时, 完成从原始 FASTQ 到统计结论的完整流程:导入 → 去噪 → 物种注释 → 建树 → 稀释曲线 → 多样性与统计检验 → 差异丰度 → 溯源与导出。

QIIME 2 相对 R(DADA2/phyloseq)流程的核心优势是每个 .qza 产物内嵌完整 provenance,可在分析结束后反向生成可执行脚本。请把溯源当作流程的一部分主动使用, 而不是可选项——见下方「数据溯源与复现」章节。

版本兼容性与命名变更(重要)

QIIME 2 每季度发布一次(2026.1 / 2026.4 / 2026.7 / 2026.10…),发行版名称与环境 文件名近两年发生过实质变更,不要照抄旧教程:

| 变更 | 生效版本 | 说明 | |---|---|---| | 框架 Q2F 更名为 rachis | 2026.1 起过渡 | Python 包层面的重命名 | | amplicon 发行版更名为 qiime2 | 2026.4 起 | 旧名 amplicon 仅适用于历史版本 | | 环境文件前缀 qiime2-rachis- | 2026.4 起 | 仅适用于 >=2026.4 及开发版 | | macOS 不再构建 moshpit/pathogenome | 2026.1 之后 | 这两个发行版请用 HPC 或 Docker | | q2-dada2 n_reads_learn 参数弃用 | 2026.10 计划移除 | 见 2026.7 公告 |

执行前必做:不要硬编码版本号或 .yml URL。先运行以下命令确认真实环境, 再据此调整命令与参数:

qiime info                      # 确认发行版、版本号、已安装插件
qiime <插件名> --help           # 确认该插件的可用 action
qiime <插件> <action> --help    # 确认参数名(--p-* 参数改名较频繁)

安装命令请从官方 quickstart 获取当前版本对应的写法,按平台 (Linux/WSL、macOS Intel、macOS Apple Silicon)选择: https://library.qiime2.org/quickstart/amplicon

若命令报 Error: no such optionPlugin error,先用 --help 核对实际参数名并 调整,不要反复重试同一条命令。

核心概念

  • Artifact(.qza):数据 + 元数据 + 完整 provenance 的压缩包。所有中间产物都是 .qza。
  • Visualization(.qzv):交互式可视化,用 qiime tools view 本地打开,或上传至 https://view.qiime2.org(该站点仅在浏览器本地解析,不上传到服务器)。
  • Metadata(.tsv):样本分组信息,几乎每个统计步骤都要用。
  • 半随机性:DADA2、稀释抽样等步骤含随机过程,如需严格复现请固定 --p-random-seed(若该 action 支持)。

流程总览

FASTQ ──导入──> demux.qza ──去噪──> table.qza + rep-seqs.qza
                                        │
                    ┌───────────────────┼───────────────────┐
                    ↓                   ↓                   ↓
              taxonomy.qza        rooted-tree.qza      稀释曲线(选深度)
                    │                   │                   │
                    └───────────────────┴───────────────────┘
                                        ↓
                            core-metrics-phylogenetic
                                        ↓
                      alpha/beta 显著性检验 + ANCOM-BC 差异丰度
                                        ↓
                              provenance 溯源 + 导出

步骤 0:准备输入文件

manifest.tsv(制表符分隔,路径必须为绝对路径):

sample-id	forward-absolute-filepath	reverse-absolute-filepath
sample1	/abs/path/sample1_R1.fastq.gz	/abs/path/sample1_R2.fastq.gz
sample2	/abs/path/sample2_R1.fastq.gz	/abs/path/sample2_R2.fastq.gz

metadata.tsv(首列必须是 sample-id;可选第二行为类型声明行):

sample-id	Group	Timepoint	Age
#q2:types	categorical	categorical	numeric
sample1	Treatment	Day0	34
sample2	Control	Day0	41

导入前先校验元数据,避免后续统计步骤才报错:

qiime tools inspect-metadata metadata.tsv
qiime metadata tabulate --m-input-file metadata.tsv --o-visualization metadata.qzv

元数据列类型陷阱:形如 123 的分组编号会被识别为 numeric, 导致 beta-group-significance 报错。用 #q2:types 行显式声明为 categorical

步骤 1:导入数据

# 双端,manifest 方式(最通用)
qiime tools import \
    --type 'SampleData[PairedEndSequencesWithQuality]' \
    --input-path manifest.tsv \
    --output-path demux.qza \
    --input-format PairedEndFastqManifestPhred33V2

# 单端
qiime tools import \
    --type 'SampleData[SequencesWithQuality]' \
    --input-path manifest_se.tsv \
    --output-path demux.qza \
    --input-format SingleEndFastqManifestPhred33V2

# Casava 1.8 目录格式(文件名形如 L2S357_15_L001_R1_001.fastq.gz)
qiime tools import \
    --type 'SampleData[PairedEndSequencesWithQuality]' \
    --input-path casava_dir/ \
    --output-path demux.qza \
    --input-format CasavaOneEightSingleLanePerSampleDirFmt

# 质量总览 —— 用它决定截断位置,必看
qiime demux summarize --i-data demux.qza --o-visualization demux.qzv

步骤 2:去除引物(16S 与 ITS 都建议做)

若测序数据仍含引物序列,必须先去除,否则会被误当作生物学变异保留:

qiime cutadapt trim-paired \
    --i-demultiplexed-sequences demux.qza \
    --p-front-f CCTACGGGNGGCWGCAG \
    --p-front-r GACTACHVGGGTATCTAATCC \
    --p-discard-untrimmed \
    --o-trimmed-sequences demux-trimmed.qza

上例为 16S V3-V4(341F/805R)。请按用户实际引物替换,不要照抄。

步骤 3A:DADA2 去噪(16S 主流路径)

截断长度是全流程最关键的人工决策。打开 demux.qzv 的交互式质量图,选择质量 中位数开始明显下降前的位置。硬性约束:

trunc_len_f + trunc_len_r - overlap >= 扩增子长度 + 12 正反读长截断后必须保留 至少 12 bp 重叠,否则合并率会骤降至接近 0。

qiime dada2 denoise-paired \
    --i-demultiplexed-seqs demux-trimmed.qza \
    --p-trunc-len-f 240 \
    --p-trunc-len-r 200 \
    --p-trim-left-f 0 \
    --p-trim-left-r 0 \
    --p-max-ee-f 2 \
    --p-max-ee-r 2 \
    --p-pooling-method independent \
    --p-chimera-method consensus \
    --p-n-threads 0 \
    --o-table table.qza \
    --o-representative-sequences rep-seqs.qza \
    --o-denoising-stats denoising-stats.qza

# 必看:检查每一步的留存率
qiime metadata tabulate \
    --m-input-file denoising-stats.qza \
    --o-visualization denoising-stats.qzv

去噪统计的诊断标准——出问题时先看这里,不要直接往下跑:

| 现象 | 原因 | 处理 | |---|---|---| | mergeddenoised 骤降(<50%) | 重叠不足 | 增大 trunc-len,或改用单端 | | filteredinput 骤降 | 质量差或截断过松 | 缩短 trunc-len 或放宽 max-ee | | non-chimeric 骤降(<60%) | 引物未去除 | 回到步骤 2 | | 各样本留存率差异极大 | 批次/建库问题 | 检查是否需剔除低质量样本 |

步骤 3B:ITS 真菌路径(与 16S 的关键差异)

ITS 区域长度高度可变(可从 <200 bp 到 >500 bp),因此:

  1. 不能按固定位置截断 —— 必须设 --p-trunc-len-* 0,否则会系统性丢弃长 ITS 变体,造成物种组成偏倚。
  2. 先用 ITSxpress 提取 ITS 区,去除两侧保守的 18S/5.8S/28S 侧翼。
  3. 分类器必须用 UNITE,不能用 SILVA/Greengenes。
# 1) 提取 ITS2 区域(--p-taxa F 表示真菌;ITS1 请改 --p-region ITS1)
qiime itsxpress trim-pair-output-unmerged \
    --i-per-sample-sequences demux.qza \
    --p-region ITS2 \
    --p-taxa F \
    --p-threads 4 \
    --o-trimmed itsxpress-trimmed.qza

# 2) 去噪 —— 注意 trunc-len 必须为 0
qiime dada2 denoise-paired \
    --i-demultiplexed-seqs itsxpress-trimmed.qza \
    --p-trunc-len-f 0 \
    --p-trunc-len-r 0 \
    --p-max-ee-f 2 \
    --p-max-ee-r 2 \
    --p-n-threads 0 \
    --o-table table.qza \
    --o-representative-sequences rep-seqs.qza \
    --o-denoising-stats denoising-stats.qza

ITS 的另一个差异:ITS 序列无法可靠地做多序列比对,因此不要构建系统发育树, 也不要使用 UniFrac 等系统发育距离。改用 qiime diversity core-metrics (非 phylogenetic 版本),指标限于 Bray-Curtis、Jaccard、Shannon、Observed features。

步骤 3C:Deblur 替代路径(仅 16S)

qiime quality-filter q-score \
    --i-demux demux.qza \
    --o-filtered-sequences demux-filtered.qza \
    --o-filter-stats filter-stats.qza

qiime deblur denoise-16S \
    --i-demultiplexed-seqs demux-filtered.qza \
    --p-trim-length 250 \
    --p-sample-stats \
    --o-representative-sequences rep-seqs.qza \
    --o-table table.qza \
    --o-stats deblur-stats.qza

Deblur 仅对 16S 有专用参考(denoise-16S),且需先合并双端。默认优先用 DADA2。

步骤 4:物种注释

分类器必须与扩增子区域匹配。全长分类器用于 V4 数据会降低属水平准确度, 建议对特定引物区做 extract-reads 后重训练。

# 从官方 Data Resources 下载当前版本的预训练分类器(勿硬编码版本):
#   https://library.qiime2.org/data-resources
#   16S -> SILVA 或 Greengenes2;ITS -> UNITE

qiime feature-classifier classify-sklearn \
    --i-classifier silva-nb-classifier.qza \
    --i-reads rep-seqs.qza \
    --p-n-jobs -1 \
    --o-classification taxonomy.qza

qiime metadata tabulate \
    --m-input-file taxonomy.qza \
    --o-visualization taxonomy.qzv

# 物种组成堆叠柱状图
qiime taxa barplot \
    --i-table table.qza \
    --i-taxonomy taxonomy.qza \
    --m-metadata-file metadata.tsv \
    --o-visualization taxa-barplot.qzv

针对自己引物区训练分类器(显著提升准确度):

qiime feature-classifier extract-reads \
    --i-sequences silva-seqs.qza \
    --p-f-primer GTGCCAGCMGCCGCGGTAA \
    --p-r-primer GGACTACHVGGGTWTCTAAT \
    --p-trunc-len 0 \
    --o-reads ref-seqs-v4.qza

qiime feature-classifier fit-classifier-naive-bayes \
    --i-reference-reads ref-seqs-v4.qza \
    --i-reference-taxonomy silva-tax.qza \
    --o-classifier classifier-v4.qza

注意:sklearn 分类器与训练时的 scikit-learn 版本强绑定。跨 QIIME 2 版本 使用会报版本不匹配错误,必须下载对应版本的分类器或重新训练。

步骤 5:过滤(按需)

# 移除线粒体与叶绿体污染(植物/宿主样本常见)
qiime taxa filter-table \
    --i-table table.qza \
    --i-taxonomy taxonomy.qza \
    --p-exclude mitochondria,chloroplast \
    --o-filtered-table table-filtered.qza

# 移除极低频特征(例如总频次 < 10 的 ASV)
qiime feature-table filter-features \
    --i-table table-filtered.qza \
    --p-min-frequency 10 \
    --o-filtered-table table-final.qza

# 查看每样本测序深度 —— 用于下一步选采样深度
qiime feature-table summarize \
    --i-table table-final.qza \
    --m-sample-metadata-file metadata.tsv \
    --o-visualization table-final.qzv

步骤 6:系统发育树(仅 16S;ITS 跳过)

qiime phylogeny align-to-tree-mafft-fasttree \
    --i-sequences rep-seqs.qza \
    --p-n-threads auto \
    --o-alignment aligned-rep-seqs.qza \
    --o-masked-alignment masked-aligned-rep-seqs.qza \
    --o-tree unrooted-tree.qza \
    --o-rooted-tree rooted-tree.qza

步骤 7:稀释曲线 —— 选择采样深度(不可跳过)

--p-sampling-depth 是一个权衡:depth 越高每样本信息越充分,但低于该深度的 样本会被直接丢弃。必须先看曲线再定值,不要沿用 10000 这类默认数字。

qiime diversity alpha-rarefaction \
    --i-table table-final.qza \
    --i-phylogeny rooted-tree.qza \
    --p-max-depth 20000 \
    --p-steps 20 \
    --m-metadata-file metadata.tsv \
    --o-visualization alpha-rarefaction.qzv

判读方法:

  1. 上半部分曲线在何处趋于平台(说明该深度已捕获大部分多样性)。
  2. 下半部分显示各分组在每个深度还剩多少样本
  3. 取「曲线已平台」且「保留样本数可接受」的最小深度。
  4. 结合 table-final.qzv 的每样本深度表,明确告知用户哪些样本会被丢弃

步骤 8:多样性分析与统计检验

# 16S(含系统发育指标:Faith PD、UniFrac)
qiime diversity core-metrics-phylogenetic \
    --i-phylogeny rooted-tree.qza \
    --i-table table-final.qza \
    --p-sampling-depth 10000 \
    --m-metadata-file metadata.tsv \
    --output-dir core-metrics-results

# ITS 或无树时(仅非系统发育指标)
qiime diversity core-metrics \
    --i-table table-final.qza \
    --p-sampling-depth 10000 \
    --m-metadata-file metadata.tsv \
    --output-dir core-metrics-results

Alpha 多样性组间检验(Kruskal-Wallis)

for METRIC in shannon observed_features faith_pd evenness; do
    [ -f core-metrics-results/${METRIC}_vector.qza ] || continue
    qiime diversity alpha-group-significance \
        --i-alpha-diversity core-metrics-results/${METRIC}_vector.qza \
        --m-metadata-file metadata.tsv \
        --o-visualization ${METRIC}-significance.qzv
done

# 与连续变量的相关性(Spearman)
qiime diversity alpha-correlation \
    --i-alpha-diversity core-metrics-results/shannon_vector.qza \
    --m-metadata-file metadata.tsv \
    --p-method spearman \
    --o-visualization shannon-correlation.qzv

Beta 多样性组间检验(PERMANOVA)

qiime diversity beta-group-significance \
    --i-distance-matrix core-metrics-results/weighted_unifrac_distance_matrix.qza \
    --m-metadata-file metadata.tsv \
    --m-metadata-column Group \
    --p-method permanova \
    --p-pairwise \
    --p-permutations 999 \
    --o-visualization weighted-unifrac-permanova.qzv

PERMANOVA 显著必须配套检验组内离散度——否则无法区分「组间中心不同」与 「组内变异度不同」,这是扩增子分析中最常见的解读错误:

qiime diversity beta-group-significance \
    --i-distance-matrix core-metrics-results/weighted_unifrac_distance_matrix.qza \
    --m-metadata-file metadata.tsv \
    --m-metadata-column Group \
    --p-method permdisp \
    --o-visualization weighted-unifrac-permdisp.qzv

判读:PERMANOVA 显著 + PERMDISP 不显著 → 可解释为组间群落组成差异; 两者均显著 → 差异可能部分来自离散度不同,需在结论中明确说明。

多因素与重复测量

# 控制协变量的 PERMANOVA(adonis 公式语法)
qiime diversity adonis \
    --i-distance-matrix core-metrics-results/weighted_unifrac_distance_matrix.qza \
    --m-metadata-file metadata.tsv \
    --p-formula "Group+Age+Timepoint" \
    --p-permutations 999 \
    --o-visualization adonis.qzv

# 纵向数据:线性混合效应模型
qiime longitudinal linear-mixed-effects \
    --m-metadata-file metadata.tsv \
    --m-metadata-file core-metrics-results/shannon_vector.qza \
    --p-metric shannon_entropy \
    --p-group-columns Group \
    --p-state-column Timepoint \
    --p-individual-id-column SubjectID \
    --o-visualization lme-shannon.qzv

adonis 公式中项的顺序影响结果(序贯平方和),把要控制的协变量放在前面。

主坐标分析可视化

qiime emperor plot \
    --i-pcoa core-metrics-results/weighted_unifrac_pcoa_results.qza \
    --m-metadata-file metadata.tsv \
    --o-visualization weighted-unifrac-emperor.qzv

步骤 9:差异丰度(ANCOM-BC)

旧的 qiime composition ancomadd-pseudocount 已弃用,使用 ANCOM-BC (自带偏倚校正与零值处理,无需手工加伪计数):

qiime taxa collapse \
    --i-table table-final.qza \
    --i-taxonomy taxonomy.qza \
    --p-level 6 \
    --o-collapsed-table table-l6.qza

qiime composition ancombc \
    --i-table table-l6.qza \
    --m-metadata-file metadata.tsv \
    --p-formula Group \
    --o-differentials ancombc-l6.qza

qiime composition da-barplot \
    --i-data ancombc-l6.qza \
    --p-significance-threshold 0.05 \
    --o-visualization ancombc-l6.qzv

--p-level:2=门 3=纲 4=目 5=科 6=属 7=种。属水平(6)最常用; ASV 水平(不 collapse)零值过多,统计效力低。

差异丰度输入不要用稀释后的表,直接用过滤后的原始计数表 —— ANCOM-BC 内部 自行处理测序深度差异。

数据溯源与复现(QIIME 2 的核心价值)

每个 .qza/.qzv 都内嵌了生成它的完整命令链、参数、软件版本与引用。 分析结束后应主动产出溯源材料,这是 QIIME 2 相对 R 流程的最大优势。

# 快速查看类型、UUID、数据格式
qiime tools peek core-metrics-results/weighted_unifrac_distance_matrix.qza

# 校验完整性(MD5)—— 文件被改动过会在此报出
qiime tools validate table-final.qza

# 【最重要】从任一结果反推出可执行的 bash 脚本
qiime tools replay-provenance \
    --in-fp ancombc-l6.qzv \
    --out-fp reproduce-analysis.sh

# 生成 Python API 版本
qiime tools replay-provenance \
    --in-fp ancombc-l6.qzv \
    --p-usage-driver python3 \
    --out-fp reproduce-analysis.py

# 自动汇总本次分析所有方法的文献引用(写论文方法学部分直接可用)
qiime tools replay-citations \
    --in-fp ancombc-l6.qzv \
    --out-fp citations.bib

# 一键打包完整复现材料(脚本 + 引用 + 环境清单),投稿补充材料用
qiime tools replay-supplement \
    --in-fp . \
    --p-recurse \
    --o-out-fp reproducibility-supplement.zip

给用户交付结果时,默认同时产出 replay-provenance 脚本与 replay-citations, 并说明:.qza 文件本身即是完整的方法学记录,无需另行维护流程文档。

溯源工具由 provenance-lib 提供,自 QIIME 2 2023.5 起已包含在发行版中,无需单独安装。

导出到 R / Python

qiime tools export --input-path table-final.qza --output-path exported/
biom convert -i exported/feature-table.biom -o feature-table.tsv --to-tsv

qiime tools export --input-path taxonomy.qza --output-path exported/
qiime tools export --input-path rooted-tree.qza --output-path exported/

导出到 phyloseq 时注意:需将 taxonomy.tsv 表头改为 #OTUID taxonomy confidence 后才能用 biom add-metadata 合并。

导出即脱离 provenance 追踪 —— 导出后的下游分析请自行记录代码版本。

常见错误速查

| 报错/现象 | 原因 | 处理 | |---|---|---| | Plugin error from dada2 无细节 | 需看完整日志 | 加 --verbose,读 /tmp/qiime2-q2cli-err-*.log | | 合并率极低 | 重叠不足 | 增大 trunc-len,或改单端分析 | | All features were filtered | 采样深度高于所有样本 | 看 table.qzv 重选 depth | | not a categorical column | 分组列被识别为数值 | 元数据加 #q2:types 行 | | 分类器报版本不匹配 | scikit-learn 版本绑定 | 下载对应版本分类器或重训练 | | ITS 物种组成异常偏倚 | 误用了固定截断 | trunc-len 设 0,见步骤 3B | | --p-* 参数不存在 | 跨版本参数改名 | qiime <插件> <action> --help 核对 |

执行守则

  1. qiime info,确认版本与插件,再据实际版本调整命令,不要照抄本文档的版本假设。
  2. 两个决策点必须让用户看图后再定:截断长度(看 demux.qzv)、采样深度(看 alpha-rarefaction.qzv)。不要擅自使用默认值就往下跑。
  3. 每一步产出 .qzv 并提示用户查看,尤其 denoising-stats.qzv —— 去噪失败继续往下跑毫无意义。
  4. 区分 16S 与 ITS 路径:ITS 不截断、不建树、用 UNITE、不用 UniFrac。
  5. PERMANOVA 显著时必须补 PERMDISP,并在结论中如实说明。
  6. 收尾必做溯源replay-provenance + replay-citations
  7. 长时间步骤(DADA2、建树、classify-sklearn)建议后台运行并明确告知预期耗时。

相关 skill

  • bio-microbiome-amplicon-processing — DADA2 的 R 语言实现
  • bio-microbiome-diversity-analysis — phyloseq 多样性分析
  • bio-microbiome-differential-abundance — ALDEx2 / ANCOM-BC 的 R 实现
  • bio-microbiome-taxonomy-assignment — 更多分类数据库选项
  • bio-microbiome-functional-prediction — PICRUSt2 功能预测