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: 同一通路可能由不同物种贡献。分层分析可以揭示哪些物种驱动了通路的差异变化,这对理解功能冗余和关键物种鉴定非常重要。
易错点¶
- 不标准化直接比较:不同样本测序深度不同,必须先标准化(CPM或TSS)
- PICRUSt2用于差异太大的群落:PICRUSt2的NSTI值应<2,否则预测不可靠
- 忽略多重检验校正:同时检验数百个通路,不做FDR校正会产生大量假阳性
- 混淆通路丰度和覆盖度:HUMAnN3同时输出abundance和coverage,含义不同
- 未过滤UNMAPPED和UNINTEGRATED:HUMAnN3输出中包含未比对的部分,分析前应移除
补充知识¶
通路数据库对比¶
| 数据库 | 通路数 | 特点 | 工具 |
|---|---|---|---|
| MetaCyc | ~3000 | 代谢通路详细 | HUMAnN3 |
| KEGG | ~500 | 覆盖面广 | PICRUSt2/HUMAnN3 |
| GO | >40000 | 基因本体论 | HUMAnN3 regroup |
| COG/eggNOG | ~5000 | 直系同源基因簇 | eggNOG-mapper |
推荐差异分析策略¶
- 使用至少两种方法(如MaAsLin2 + ALDEx2)
- 取显著结果的交集
- 报告effect size(不仅仅是p值)
- 对Top通路进行分层分析(哪些物种贡献)
- 结合代谢网络图进行通路关联解读