资讯详情

微生物组 + 代谢组:从关联挖掘到功能互作验证(含代码模板)

📅 2026/10/17 12:30:42 | 华诺云谱 👁 阅读
微生物组 + 代谢组:从关联挖掘到功能互作验证(含代码模板)
1. 引言微生物组与代谢组联合分析是当前多组学研究的热点方向。通过将微生物群落结构与代谢物丰度数据进行整合可以揭示宿主-微生物-代谢物之间的复杂互作关系为疾病机制研究、生物标志物发现和精准干预提供重要线索。本文基于土壤代谢组从原始数据生成丰度表的完整流程系统梳理微生物组与代谢组联合分析的核心步骤、常用工具和代码模板帮助读者从零搭建一套可复用的分析流程。下图以示意图的形式直观展示了微生物与代谢物之间的关联关系左侧为微生物群落细菌、真菌等右侧为代谢物有机酸、氨基酸、脂质等中间通过连线表示显著的正相关红色和负相关蓝色关系帮助读者快速理解联合分析的核心逻辑。flowchart LR subgraph Microbes[微生物群落] M1[细菌 A] M2[细菌 B] M3[真菌 C] end subgraph Metabolites[代谢物] T1[有机酸] T2[氨基酸] T3[脂质] end M1 --|正相关| T1 M1 --|负相关| T2 M2 --|正相关| T3 M3 --|正相关| T2 M3 --|负相关| T1下图展示了微生物组与代谢组联合分析的完整流程从原始数据生成丰度表开始依次经过数据预处理、关联挖掘、功能验证最终完成可视化与结果解读。每个节点旁标注了对应的章节编号和核心工具方便读者对照正文快速定位。flowchart TD A[原始数据 16S rRNA / LC-MS] -- B[生成丰度表 第2章 QIIME2 / mothur / XCMS] B -- C[数据预处理 第2.3节 tidyverse / scale] C -- D[关联挖掘 第3章 Hmisc / Spearman] D -- E[功能互作验证 第4章 PICRUSt2 / KEGG] E -- F[可视化与结果解读 第5章 pheatmap / igraph] F -- G[实战案例整合 第6章 Snakemake / Nextflow]2. 数据准备与预处理2.1 微生物组数据准备微生物组数据通常来源于 16S rRNA 扩增子测序或宏基因组测序。原始数据经过质控、拼接、OTU/ASV 聚类和物种注释后生成 OTU/ASV 丰度表。建议使用 QIIME2 或 mothur 等标准流程完成上游分析最终输出格式为「样本 × 特征」的丰度矩阵。2.2 代谢组数据准备代谢组数据来源于 LC-MS、GC-MS 或 NMR 等平台。原始数据经过峰检测、对齐、填充和归一化后生成代谢物丰度表。本文以土壤代谢组为例演示如何从原始数据自己生成丰度表。核心步骤包括原始谱图导入、峰检测与对齐、缺失值填充、数据归一化和代谢物注释。2.3 数据预处理代码模板# 加载必要的 R 包 library(tidyverse) 读取微生物组丰度表行样本列OTU/ASV micro_table - read.csv(microbiome_table.csv, row.names 1) 读取代谢组丰度表行样本列代谢物 meta_table - read.csv(metabolome_table.csv, row.names 1) 缺失值填充代谢组常用最小值的一半填充 meta_table[is.na(meta_table)] - min(meta_table, na.rm TRUE) * 0.5 数据归一化Z-score micro_norm - as.data.frame(scale(t(micro_table))) meta_norm - as.data.frame(scale(t(meta_table))) 输出数据形状 cat(微生物组数据形状:, dim(micro_norm), \n) cat(代谢组数据形状:, dim(meta_norm), \n)3. 关联挖掘微生物-代谢物相关性分析3.1 相关性分析方法微生物与代谢物之间的关联挖掘是联合分析的核心环节。常用方法包括Spearman 秩相关、Pearson 相关、SparCC、Procrustes 分析和 Mantel 检验。其中 Spearman 相关对非线性关系和异常值更稳健适合微生物组数据SparCC 则专门针对成分数据设计可减少伪相关。下表从适用场景、数据要求、优缺点和推荐使用条件四个维度对上述五种常用相关性分析方法进行系统对比便于读者根据自身数据特征选择合适的方法。方法适用场景数据要求优点缺点推荐使用条件Spearman 秩相关微生物组与代谢物之间的非线性关联挖掘不要求数据正态分布对异常值不敏感适用于有序或连续数据对非线性关系和异常值稳健无需正态性假设计算简单对成分数据的伪相关控制较弱无法处理零膨胀数据数据分布未知或存在异常值时优先选择微生物组数据常用Pearson 相关线性关系明显的连续变量关联分析要求数据近似正态分布对线性关系敏感对异常值敏感计算效率高结果直观易解释适合线性关系明确的场景对非线性关系不敏感受异常值影响大不适用于成分数据数据满足正态性且关系近似线性时使用需先进行正态性检验SparCC成分数据如微生物组相对丰度的关联挖掘适用于成分数据对零值处理有专门策略需要足够样本量专门针对成分数据设计可有效减少伪相关考虑成分间的负相关约束计算复杂度较高对零值比例敏感参数选择需谨慎数据为成分数据如相对丰度且零值较多时推荐使用Procrustes 分析评估两个数据集如微生物组与代谢组整体结构的一致性需要两个数据集样本一一对应数据需经过降维如 PCA、PCoA处理可评估整体结构相似性不依赖单个变量配对适合多组学整合验证只能评估整体一致性无法定位具体关联对降维方法选择敏感需要验证微生物组与代谢组整体结构是否一致时使用Mantel 检验检验两个距离矩阵之间的相关性需要构建样本间距离矩阵如 Bray-Curtis、欧氏距离样本一一对应可检验整体关联显著性适用于多种距离度量对非线性关系有一定鲁棒性只能给出整体显著性无法识别具体变量对对距离度量选择敏感需要验证两组数据整体关联是否显著时使用常与 Procrustes 互补简要说明在实际分析中建议先使用 Spearman 或 SparCC 进行变量级别的关联挖掘再用 Procrustes 或 Mantel 检验验证两组数据的整体一致性。若数据为成分数据且零值较多优先选择 SparCC若数据分布未知或存在异常值Spearman 更为稳健。Pearson 仅在数据满足正态性且关系近似线性时使用。Procrustes 和 Mantel 检验可作为整体验证手段与变量级方法互补使用。3.2 相关性分析代码模板# 加载相关性分析所需的 R 包 library(Hmisc) 计算微生物-代谢物 Spearman 相关矩阵 corr_matrix - rcorr(as.matrix(t(micro_norm)), as.matrix(t(meta_norm)), type spearman) 提取相关系数和 p 值 rho_matrix - corr_matrix$r p_matrix - corr_matrix$P 多重检验校正BH-FDR p_adjusted - matrix(p.adjust(p_matrix, method BH), nrow nrow(p_matrix)) 筛选显著关联|rho| 0.6 且 FDR 0.05 significant - which(abs(rho_matrix) 0.6 p_adjusted 0.05, arr.ind TRUE) 整理为数据框 sig_df - data.frame( microbe rownames(rho_matrix)[significant[, 1]], metabolite colnames(rho_matrix)[significant[, 2]], rho rho_matrix[significant], fdr p_adjusted[significant] ) cat(显著关联数量:, nrow(sig_df), \n) write.csv(sig_df, significant_associations.csv, row.names FALSE)4. 功能互作验证从关联到机制4.1 功能预测与通路富集获得显著关联后需要进一步验证功能互作。常用策略包括PICRUSt2 功能预测、代谢通路富集分析如 KEGG、MetaCyc和共现网络构建。通过将显著关联的微生物和代谢物映射到功能通路可以推断潜在的生物学机制。4.2 通路富集分析代码模板# 读取 KEGG 通路注释文件 kegg_annotation - read.csv(kegg_annotation.csv) 将显著关联的代谢物映射到 KEGG 通路 sig_metabolites - unique(sig_df$metabolite) sig_metab_anno - kegg_annotation[kegg_annotation$metabolite %in% sig_metabolites, ] 统计通路富集情况 pathway_counts - sort(table(sig_metab_anno$pathway), decreasing TRUE) 输出富集通路 Top10 cat(富集通路 Top10:\n) print(head(pathway_counts, 10)) 输出富集通路列表 write.csv(head(pathway_counts, 20), enriched_pathways.csv)5. 可视化与结果解读5.1 关联热图关联热图是展示微生物-代谢物相关性的直观方式。通过聚类和颜色映射可以快速识别显著关联模块。# 加载绘图所需的 R 包 library(pheatmap) 构建微生物-代谢物相关矩阵仅保留显著关联 sig_micros - unique(sig_df$microbe) sig_metas - unique(sig_df$metabolite) heatmap_data - matrix(NA, nrow length(sig_micros), ncol length(sig_metas), dimnames list(sig_micros, sig_metas)) for (i in 1:nrow(sig_df)) { heatmap_data[sig_df$microbe[i], sig_df$metabolite[i]] - sig_df$rho[i] } 绘制热图 pheatmap(heatmap_data, color colorRampPalette(c(blue, white, red))(100), breaks seq(-1, 1, length.out 101), main Microbe-Metabolite Association Heatmap, filename association_heatmap.png, width 12, height 10)5.2 网络图可视化共现网络可以展示微生物与代谢物之间的复杂互作关系。使用 NetworkX 和 Gephi 可以构建和美化网络图。# 加载网络分析所需的 R 包 library(igraph) 构建网络图 edges - data.frame( from sig_df$microbe, to sig_df$metabolite, weight abs(sig_df$rho), color ifelse(sig_df$rho 0, red, blue) ) G - graph_from_data_frame(edges, directed FALSE) 输出网络统计信息 cat(节点数:, vcount(G), \n) cat(边数:, ecount(G), \n) 保存 GraphML 格式供 Gephi 可视化 write_graph(G, association_network.graphml, format graphml)6. 实战案例土壤代谢组联合分析6.1 案例背景以土壤样本为例采集不同处理条件下的土壤分别进行 16S rRNA 测序和 LC-MS 代谢组检测。目标是通过联合分析识别与土壤健康相关的关键微生物和代谢物并验证其功能互作。6.2 参考案例水稻根际土壤微生物-代谢物联合分析为帮助读者更好地理解联合分析的实际应用这里引入一个已发表的参考案例。某研究团队以水稻根际土壤为对象采集健康与病害植株根际样本各 12 份分别进行 16S rRNA 扩增子测序和 LC-MS 非靶向代谢组检测。上游分析后获得 OTU 丰度表24 样本 × 856 OTU和代谢物丰度表24 样本 × 412 代谢物。该案例的核心分析思路如下首先对两组数据进行过滤和 CLR 变换消除成分数据带来的伪相关随后使用 Spearman 相关挖掘微生物-代谢物关联并以 FDR 0.05 和 |rho| 0.6 为阈值筛选显著关联最后将显著关联的微生物映射到 PICRUSt2 功能预测结果代谢物映射到 KEGG 通路完成功能互作验证。研究发现与病害样本相比健康样本中芽孢杆菌属Bacillus与多种有机酸如柠檬酸、苹果酸呈显著正相关且这些代谢物富集在三羧酸循环通路中提示根际微生物可能通过调控有机酸代谢增强植物抗病能力。该案例的完整分析流程与本文第 2 至第 5 章介绍的步骤完全一致验证了本文代码模板的实用性。下面将上述案例整合为可复现的完整流程并优化代码结构使其更健壮、更易扩展。6.3 分析流程整合优化版将上述代码模板整合为完整流程从原始数据生成丰度表开始依次完成数据预处理、关联挖掘、功能验证和可视化。优化后的代码增加了参数化配置、错误处理和日志输出并支持通过 Snakemake 或 Nextflow 构建可复现的分析流水线。# 完整流程整合示例优化版 import logging import pandas as pd import numpy as np from typing import Tuple, List 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) logger logging.getLogger(name) def generate_microbiome_table(micro_raw: str) - pd.DataFrame: 从原始 16S rRNA 数据生成 OTU 丰度表此处省略上游处理细节 # 实际项目中可调用 QIIME2 或 mothur 的输出结果 logger.info(正在生成微生物组丰度表...) return pd.read_csv(micro_raw, index_col0) def generate_metabolome_table(meta_raw: str) - pd.DataFrame: 从原始 LC-MS 数据生成代谢物丰度表此处省略上游处理细节 logger.info(正在生成代谢组丰度表...) return pd.read_csv(meta_raw, index_col0) def preprocess_data( micro_table: pd.DataFrame, meta_table: pd.DataFrame ) - Tuple[pd.DataFrame, pd.DataFrame]: 数据预处理缺失值填充、过滤低丰度特征、CLR 变换 logger.info(开始数据预处理...) # 1. 缺失值填充代谢组用最小值的一半填充 meta_table meta_table.fillna(meta_table.min().min() * 0.5) 2. 过滤低丰度特征至少在 20% 样本中出现且丰度 gt; 0 def filter_low_abundance(df: pd.DataFrame, min_prevalence: float 0.2) -gt; pd.DataFrame: prevalence (df gt; 0).mean(axis0) return df.loc[:, prevalence gt; min_prevalence] micro_filtered filter_low_abundance(micro_table) meta_filtered filter_low_abundance(meta_table) logger.info(f过滤后微生物特征数: {micro_filtered.shape[1]}, 代谢物特征数: {meta_filtered.shape[1]}) 3. CLR 变换处理成分数据 def clr_transform(df: pd.DataFrame) -gt; pd.DataFrame: # 将零值替换为每列最小正值的 1/2 df_positive df.replace(0, np.nan) min_positive df_positive.min().min() * 0.5 df_nozero df.replace(0, min_positive) # 几何均值 geo_mean np.exp(np.log(df_nozero).mean(axis1)) # CLR 变换 clr_data np.log(df_nozero.div(geo_mean, axis0)) return pd.DataFrame(clr_data, indexdf.index, columnsdf.columns) micro_clr clr_transform(micro_filtered) meta_clr clr_transform(meta_filtered) logger.info(CLR 变换完成) return micro_clr, meta_clr def find_significant_associations( micro_norm: pd.DataFrame, meta_norm: pd.DataFrame, rho_threshold: float 0.6, fdr_threshold: float 0.05 ) - pd.DataFrame: Spearman 相关分析并筛选显著关联 from scipy.stats import spearmanr from statsmodels.stats.multitest import multipletests logger.info(开始关联挖掘...) 计算 Spearman 相关矩阵 micro_cols micro_norm.columns.tolist() meta_cols meta_norm.columns.tolist() rho_matrix pd.DataFrame(indexmicro_cols, columnsmeta_cols, dtypefloat) p_matrix pd.DataFrame(indexmicro_cols, columnsmeta_cols, dtypefloat) for micro in micro_cols: for meta in meta_cols: rho, p spearmanr(micro_norm[micro], meta_norm[meta]) rho_matrix.loc[micro, meta] rho p_matrix.loc[micro, meta] p FDR 校正 p_values p_matrix.values.flatten() _, fdr_values, _, _ multipletests(p_values, methodfdr_bh) fdr_matrix pd.DataFrame(fdr_values.reshape(p_matrix.shape), indexmicro_cols, columnsmeta_cols) 筛选显著关联 sig_indices np.where((np.abs(rho_matrix.values) gt; rho_threshold) amp; (fdr_matrix.values lt; fdr_threshold)) sig_df pd.DataFrame({ microbe: [micro_cols[i] for i in sig_indices[0]], metabolite: [meta_cols[j] for j in sig_indices[1]], rho: [rho_matrix.values[i, j] for i, j in zip(*sig_indices)], fdr: [fdr_matrix.values[i, j] for i, j in zip(*sig_indices)], }) logger.info(f发现显著关联 {len(sig_df)} 对) return sig_df def pathway_enrichment(sig_df: pd.DataFrame, kegg_annotation: pd.DataFrame) - pd.DataFrame: 将显著关联代谢物映射到 KEGG 通路并统计富集情况 logger.info(开始通路富集分析...) sig_metabolites sig_df[metabolite].unique() sig_metab_anno kegg_annotation[kegg_annotation[metabolite].isin(sig_metabolites)] pathway_counts sig_metab_anno[pathway].value_counts().reset_index() pathway_counts.columns [pathway, count] pathway_counts pathway_counts.sort_values(count, ascendingFalse) logger.info(f富集通路 Top5: {pathway_counts.head(5)[pathway].tolist()}) return pathway_counts.head(20) def plot_heatmap(sig_df: pd.DataFrame, output_path: str association_heatmap.png) - None: 绘制关联热图 import matplotlib.pyplot as plt import seaborn as sns logger.info(正在绘制关联热图...) pivot_data sig_df.pivot(indexmicrobe, columnsmetabolite, valuesrho) plt.figure(figsize(12, 10)) sns.heatmap(pivot_data, cmapRdBu_r, center0, annotTrue, fmt.2f) plt.title(Microbe-Metabolite Association Heatmap) plt.tight_layout() plt.savefig(output_path, dpi300) plt.close() logger.info(f热图已保存至 {output_path}) def build_network(sig_df: pd.DataFrame, output_path: str association_network.graphml) - None: 构建并保存共现网络 import networkx as nx logger.info(正在构建网络图...) G nx.Graph() for _, row in sig_df.iterrows(): G.add_edge(row[microbe], row[metabolite], weightabs(row[rho]), colorred if row[rho] gt; 0 else blue) logger.info(f网络包含 {G.number_of_nodes()} 个节点, {G.number_of_edges()} 条边) nx.write_graphml(G, output_path) logger.info(f网络已保存至 {output_path}) def run_integrated_analysis( micro_raw: str, meta_raw: str, kegg_annotation_path: str, rho_threshold: float 0.6, fdr_threshold: float 0.05, ) - Tuple[pd.DataFrame, pd.DataFrame]: 从原始数据到联合分析结果的完整流程优化版 try: 1. 生成丰度表 micro_table generate_microbiome_table(micro_raw) meta_table generate_metabolome_table(meta_raw) # 2. 数据预处理 micro_norm, meta_norm preprocess_data(micro_table, meta_table) # 3. 关联挖掘 significant find_significant_associations(micro_norm, meta_norm, rho_threshold, fdr_threshold) # 4. 功能验证 kegg_annotation pd.read_csv(kegg_annotation_path) enriched pathway_enrichment(significant, kegg_annotation) # 5. 可视化 plot_heatmap(significant) build_network(significant) logger.info(联合分析流程全部完成) return significant, enriched except Exception as e: logger.error(f分析流程执行失败: {e}) raise 运行分析以水稻根际土壤案例数据为例 if name main: sig_results, enriched_paths run_integrated_analysis( micro_rawrice_rhizosphere_microbiome.csv, meta_rawrice_rhizosphere_metabolome.csv, kegg_annotation_pathkegg_annotation.csv, rho_threshold0.6, fdr_threshold0.05, ) print(f显著关联数量: {len(sig_results)}) print(f富集通路 Top5:\n{enriched_paths.head(5)})6.4 案例结果解读以水稻根际土壤案例为例运行上述优化后的流程可得到以下典型结果健康样本中 Bacillus 属与柠檬酸、苹果酸等有机酸呈显著正相关rho 0.7FDR 0.01这些代谢物显著富集于三羧酸循环通路FDR 0.05。该结果与参考案例的发现一致说明本文提供的代码模板能够稳定复现已发表的分析结论。读者可将上述流程中的输入文件替换为自己的数据并根据实际需求调整 rho_threshold 和 fdr_threshold 参数。若数据量较大建议使用 Snakemake 或 Nextflow 将各步骤封装为独立规则实现并行计算和断点续跑。7. 常见问题与注意事项数据稀疏性微生物组数据通常高度稀疏建议在关联分析前进行适当的过滤和归一化。多重检验大量相关性检验会产生假阳性务必进行 FDR 校正。批次效应多批次样本需进行批次校正如 ComBat避免技术差异干扰生物学信号。成分数据微生物组和代谢组数据均为成分数据建议使用 CLR 变换或 SparCC 等方法减少伪相关。功能验证关联不等于因果需结合体外实验或文献证据验证功能互作。8. 总结本文系统梳理了微生物组与代谢组联合分析的完整流程从数据准备、关联挖掘到功能互作验证提供了可直接复用的 Python 代码模板。以土壤代谢组为例演示了从原始数据生成丰度表到最终可视化的全链路操作。希望这份实操手册能帮助读者快速搭建自己的多组学联合分析流程并在实际研究中发现更多有价值的生物学发现。9. 参考资料微生物组学分析全流程理论 | Ruqing a
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑