跳转至

181_微生物组功能通路差异

一句话概述

微生物组功能通路差异分析通过HUMAnN3/PICRUSt2等工具将物种组成转化为功能(MetaCyc/KEGG通路)丰度,然后利用统计方法(ALDEx2、MaAsLin2、LEfSe等)检测不同处理或分组间功能通路的显著差异。

核心知识点表格

知识点说明
功能预测方法宏基因组直接注释 vs 16S扩增子功能预测
HUMAnN3宏基因组功能分析标准工具,产生通路丰度
PICRUSt2基于16S数据预测功能(间接方法)
MetaCyc通路HUMAnN3默认使用的代谢通路数据库
KEGG通路另一常用通路数据库
差异分析工具ALDEx2、MaAsLin2、LEfSe、ANCOM-BC
多重检验校正BH/FDR校正是必须的
可视化热图、条形图、网络图

步骤详解

第一步:获取功能通路丰度

白话解释:功能通路分析有两条路线。如果有宏基因组数据,用HUMAnN3直接分析最准确。如果只有16S数据,可以用PICRUSt2预测,但准确度较低。

技术细节:HUMAnN3通过将reads比对到已知物种的编码基因(通过MetaPhlAn4进行物种分析)和未知序列的蛋白质数据库(UniRef90),然后将基因映射到MetaCyc代谢通路上计算通路丰度。

# 方案1:HUMAnN3(宏基因组数据)
# 安装
conda install -c bioconda humann

# 下载数据库
humann_databases --download chocophlan full /path/to/databases
humann_databases --download uniref uniref90_diamond /path/to/databases

# 运行HUMAnN3
humann --input sample.fastq.gz \
       --output humann_output \
       --threads 16 \
       --nucleotide-database /path/to/databases/chocophlan \
       --protein-database /path/to/databases/uniref

# 输出文件
# sample_genefamilies.tsv     # 基因家族丰度
# sample_pathabundance.tsv    # 通路丰度
# sample_pathcoverage.tsv     # 通路覆盖度

# 合并多个样本
humann_join_tables -i humann_output/ -o all_pathabundance.tsv --file_name pathabundance

# 标准化(推荐CPM)
humann_renorm_table -i all_pathabundance.tsv -o all_pathabundance_cpm.tsv -u cpm

# 分离物种特异和社区整体通路
humann_split_stratified_table -i all_pathabundance_cpm.tsv -o stratified/
# stratified/all_pathabundance_cpm_stratified.tsv   # 按物种分
# stratified/all_pathabundance_cpm_unstratified.tsv # 总体通路
# 方案2:PICRUSt2(16S数据)
# 安装
conda install -c bioconda -c conda-forge picrust2

# 从BIOM文件运行
picrust2_pipeline.py \
    -s study_seqs.fna \
    -i study_seqs.biom \
    -o picrust2_output \
    -p 16 \
    --stratified \
    --per_sequence_contrib

# 输出
# picrust2_output/pathways_out/path_abun_unstrat.tsv  # MetaCyc通路丰度
# picrust2_output/KO_metagenome_out/pred_metagenome_unstrat.tsv  # KO丰度
# picrust2_output/EC_metagenome_out/pred_metagenome_unstrat.tsv  # EC丰度

第二步:使用MaAsLin2进行差异分析

白话解释:MaAsLin2是哈佛团队开发的微生物组多变量关联分析工具,支持多种统计模型和协变量校正,是功能通路差异分析的推荐方法。

技术细节:MaAsLin2使用一般线性模型/混合效应模型,支持多种变换(LOG, AST, NONE)和归一化方法(TSS, CLR, CSS, NONE)。默认使用TSS归一化+LOG变换+线性模型。

library(Maaslin2)

# 读取通路丰度数据(样本为行,通路为列)
pathway_data <- read.table(
  "stratified/all_pathabundance_cpm_unstratified.tsv",
  header = TRUE, sep = "\t", row.names = 1,
  check.names = FALSE, comment.char = ""
)
pathway_data <- t(pathway_data)  # 转置为样本×通路

# 元数据
metadata <- data.frame(
  Sample = rownames(pathway_data),
  Group = c(rep("Control", 10), rep("Treatment", 10)),
  Age = rnorm(20, 50, 10),
  Sex = sample(c("M", "F"), 20, replace = TRUE),
  row.names = rownames(pathway_data)
)

# 运行MaAsLin2
results <- Maaslin2(
  input_data = as.data.frame(pathway_data),
  input_metadata = metadata,
  output = "maaslin2_output",
  fixed_effects = c("Group", "Age", "Sex"),
  reference = c("Group,Control"),
  normalization = "TSS",
  transform = "LOG",
  analysis_method = "LM",
  max_significance = 0.05,
  min_abundance = 0.0001,
  min_prevalence = 0.1,
  cores = 4
)

# 查看显著通路
sig_pathways <- results$results[results$results$qval < 0.05, ]
sig_pathways <- sig_pathways[order(sig_pathways$qval), ]
print(sig_pathways[, c("feature", "metadata", "coef", "pval", "qval")])

第三步:使用ALDEx2进行差异分析

白话解释:ALDEx2基于组成性数据分析原理,使用CLR变换和统计检验,特别适合处理微生物组这种"相对丰度"数据。

library(ALDEx2)

# 准备数据(需要count或整数数据)
# 如果是CPM数据,需要转回近似counts
pathway_counts <- round(pathway_data * 1000)  # 近似转换

# 分组
groups <- metadata$Group

# 运行ALDEx2
aldex_result <- aldex(
  pathway_counts,
  conditions = groups,
  mc.samples = 128,      # Monte Carlo采样次数
  test = "t",             # 使用Welch's t检验
  effect = TRUE,          # 计算effect size
  denom = "all"           # 使用全部特征作为参考
)

# 查看显著结果
sig <- aldex_result[aldex_result$we.eBH < 0.05, ]
sig <- sig[order(sig$effect, decreasing = TRUE), ]

# 效应量图
aldex.plot(aldex_result, type = "MA", test = "welch")
aldex.plot(aldex_result, type = "MW", test = "welch")

第四步:可视化差异通路

library(ggplot2)
library(dplyr)
library(pheatmap)

# 1. 条形图(Top差异通路)
top_pathways <- sig_pathways %>%
  head(20) %>%
  mutate(direction = ifelse(coef > 0, "Enriched in Treatment", "Enriched in Control"))

ggplot(top_pathways, aes(x = reorder(feature, coef), y = coef, fill = direction)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  theme_minimal() +
  labs(x = "Pathway", y = "Coefficient", title = "Differential Pathways") +
  scale_fill_manual(values = c("blue", "red"))

# 2. 热图
sig_pathway_names <- head(sig_pathways$feature, 30)
heatmap_data <- pathway_data[, sig_pathway_names]

# 标准化用于热图
heatmap_scaled <- scale(heatmap_data)

annotation_row <- data.frame(
  Group = metadata$Group,
  row.names = rownames(metadata)
)

pheatmap(t(heatmap_scaled),
         annotation_col = annotation_row,
         clustering_distance_rows = "correlation",
         clustering_distance_cols = "correlation",
         show_colnames = FALSE,
         fontsize_row = 8,
         main = "Differential Pathways Heatmap")

# 3. 火山图
library(EnhancedVolcano)
volcano_data <- results$results[results$results$metadata == "Group", ]
EnhancedVolcano(volcano_data,
                lab = volcano_data$feature,
                x = 'coef',
                y = 'qval',
                pCutoff = 0.05,
                FCcutoff = 0.5,
                title = 'Pathway Differential Analysis')

第五步:通路层次分析

# 将MetaCyc通路按上层分类汇总
# HUMAnN3提供通路重新分组功能

# 命令行:将通路映射到更高层次
# humann_regroup_table -i pathabundance.tsv -g uniref90_go -o go_grouped.tsv
# humann_regroup_table -i genefamilies.tsv -g uniref90_ko -o ko_grouped.tsv

# R中手动分类
# MetaCyc通路有层次结构,可以按超级通路分组
pathway_hierarchy <- data.frame(
  pathway = c("PWY-5100", "PWY-6471", "GLYCOLYSIS"),
  superclass = c("Amino Acid Biosynthesis", "Nucleotide Biosynthesis", "Energy Metabolism")
)

# 按超级分类汇总差异通路
superclass_summary <- sig_pathways %>%
  left_join(pathway_hierarchy, by = c("feature" = "pathway")) %>%
  group_by(superclass) %>%
  summarise(n_pathways = n(), mean_effect = mean(abs(coef)))

实战命令速查

# HUMAnN3完整流程
for sample in *.fastq.gz; do
    humann --input $sample --output humann_out/ --threads 8
done
humann_join_tables -i humann_out/ -o joined_pathways.tsv --file_name pathabundance
humann_renorm_table -i joined_pathways.tsv -o pathways_cpm.tsv -u cpm
humann_split_stratified_table -i pathways_cpm.tsv -o split/

# PICRUSt2快速流程
picrust2_pipeline.py -s seqs.fna -i table.biom -o picrust2_out -p 16

# KEGG通路映射
humann_regroup_table -i genefamilies.tsv -g uniref90_ko -o ko.tsv

面试常问点

Q1: 宏基因组直接功能分析和PICRUSt2预测的区别是什么? A: 宏基因组直接功能分析(如HUMAnN3)基于实际测序reads与基因数据库的比对,反映真实的功能基因。PICRUSt2基于16S扩增子数据,通过物种组成和参考基因组推断功能潜力。宏基因组方法准确但测序成本高,PICRUSt2便宜但是预测值,且只对数据库中有参考基因组的物种有效。

Q2: 为什么微生物组功能分析需要特殊的统计方法? A: 微生物组数据是组成性数据(相对丰度总和为1),传统统计方法会产生虚假关联。专用工具如ALDEx2使用CLR变换处理组成性,MaAsLin2支持适当的归一化和模型选择。此外,通路数据高度稀疏和零膨胀,需要适当的处理。

Q3: MaAsLin2和ALDEx2如何选择? A: MaAsLin2更灵活,支持混合效应模型、多个协变量校正,适合复杂实验设计。ALDEx2基于更严格的组成性数据理论,假检出率低但可能保守。建议两者都运行,取交集作为高置信结果。

Q4: 如何处理通路丰度数据中的大量零值? A: 可以过滤低流行度通路(如要求至少在20%样本中出现),对零值加伪计数,或使用零膨胀模型。MaAsLin2的min_prevalence参数可以过滤稀有通路。

Q5: 物种贡献(stratified)分析有什么价值? A: 同一通路可能由不同物种贡献。分层分析可以揭示哪些物种驱动了通路的差异变化,这对理解功能冗余和关键物种鉴定非常重要。

易错点

  1. 不标准化直接比较:不同样本测序深度不同,必须先标准化(CPM或TSS)
  2. PICRUSt2用于差异太大的群落:PICRUSt2的NSTI值应<2,否则预测不可靠
  3. 忽略多重检验校正:同时检验数百个通路,不做FDR校正会产生大量假阳性
  4. 混淆通路丰度和覆盖度:HUMAnN3同时输出abundance和coverage,含义不同
  5. 未过滤UNMAPPED和UNINTEGRATED:HUMAnN3输出中包含未比对的部分,分析前应移除

补充知识

通路数据库对比

数据库通路数特点工具
MetaCyc~3000代谢通路详细HUMAnN3
KEGG~500覆盖面广PICRUSt2/HUMAnN3
GO>40000基因本体论HUMAnN3 regroup
COG/eggNOG~5000直系同源基因簇eggNOG-mapper

推荐差异分析策略

  1. 使用至少两种方法(如MaAsLin2 + ALDEx2)
  2. 取显著结果的交集
  3. 报告effect size(不仅仅是p值)
  4. 对Top通路进行分层分析(哪些物种贡献)
  5. 结合代谢网络图进行通路关联解读