MetaboAnalystR 教程:如何在6步内完成代谢组学差异分析与通路富集
【免费下载链接】MetaboAnalystRR package for MetaboAnalyst项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR
它解决什么问题
MetaboAnalystR 是一个做代谢组学数据分析的 R 包(v4.3.0),与 MetaboAnalyst 在线平台同步开发,内置约 50 万个代谢物集合和 150 万条 MS2 谱图。它面向用 LC-MS 或 NMR 做代谢组学、想在本地 R 里跑完「数据清洗 → 差异分析 → 通路解释」全流程的研究者:结果可复现,参数随时改。
安装与第一次运行
📌 Linux 先装系统依赖(libcairo2-dev、libxml2、libssl-dev),Windows 先装 Rtools,再执行一条安装命令:
git clone https://gitcode.com/gh_mirrors/me/MetaboAnalystR cd MetaboAnalystR && R CMD INSTALL .装好后先跑最小闭环:初始化分析对象 → 读入 CSV → 健全性检查:
library(MetaboAnalystR) mSet <- InitDataObjects("conc", "stat", FALSE) mSet <- Read.TextData(mSet, "your_data.csv", "rowu", "disc") mSet <- SanityCheckData(mSet)两个参数注意:"rowu"表示样本在行、特征在列,第一列是分组标签;数据是转置布局就改成"colu"。运行后控制台会打印样本数、特征数和分组数,核对无误就可以往下走。初始化与读数的具体实现可以看 R/general_data_utils.R。
任务视角拆解:分析时它帮你做什么
预处理:清洗缺失值与标准化
做什么:LC-MS 数据常有零值和低丰度噪声,不处理会干扰后续统计。Normalization支持行归一化、对数转换、标准化三个槽位,用"NULL"跳过不需要的项。
怎么用:
mSet <- ReplaceMin(mSet) mSet <- PreparePrenormData(mSet) mSet <- Normalization(mSet, "NULL", "LogNorm", "MeanCenter", ref=NULL, ratio=FALSE)ReplaceMin把零值/缺失替换为该特征最小正值的一半,LogNorm做 log10 转换,MeanCenter做均值中心化。
结果长什么样:归一化矩阵存于mSet$dataSet$norm,形状与原始数据一致(官方示例为 77 样本 × 63 代谢物);用了哪些方法记录在mSet$dataSet$trans.method等字段,写方法学部分可以直接引用。实现在 R/general_norm_utils.R。
差异分析:从 t 检验到火山图
做什么:对两个分组的每个代谢物计算差异倍数(fold change)和统计显著性,输出火山图,一眼看清哪些代谢物「上调/下调且显著」。
怎么用:FC.Anal算差异倍数(阈值 2.0),Ttests.Anal做检验(默认走 limma 的 moderated t,对多变量数据更稳),Volcano.Anal按阈值划显著集,最后出图:
mSet <- FC.Anal(mSet, 2.0, 0) mSet <- Ttests.Anal(mSet, nonpar=FALSE, threshp=0.05, paired=FALSE) mSet <- Volcano.Anal(mSet, FALSE, 2.0) mSet <- PlotVolcano(mSet, "volcano.png", TRUE, "light", format="png", dpi=300)结果长什么样:一张 300 dpi 的volcano.png,可直接进论文;显著代谢物表在mSet$analSet$volcano$sig.mat,用GetSigTable可导出成表。官方测试用例中 63 个代谢物有 57 个显著,因为示例两组差别确实大。检验代码见 R/stats_univariates.R。
通路富集:从代谢物名单到功能解释
做什么:一长串显著代谢物名字肉眼看不出生物学含义。它把名单映射到内置 KEGG/SMPDB 知识库上,用超几何分布(ORA)或 GSEA 算哪些通路被过度代表。
怎么用:数据已带代谢物名称标注时:
mSet <- PerformIntegPathwayAnalysis(mSet, topo="dc", enrich="hyper") mSet <- PlotEnrichDotPlot(mSet, "ora", "path_dot.png", format="png", dpi=300)如果只有 LC-MS 峰表(质量 + 保留时间),改用 MS Peaks to Paths(mummichog)模块,直接从峰做通路富集,不需要先拿到名字。
结果长什么样:按 p 值排序的通路列表 + 一张点图(富集比例 vs p 值,前 25 条通路)。注意:这个函数要求先设好物种和 ID 类型,报 "data is not annotated yet" 就是漏了 ID 映射这一步。实现在 R/enrich_integ.R。
端到端小案例:6 步从 CSV 到可发表图
用官方示例 human_cachexia.csv(77 样本、63 代谢物、两组),完整走一遍:
# 1. 初始化:浓度数据 + 统计分析模块 mSet <- InitDataObjects("conc", "stat", FALSE) # 2. 读 CSV:样本在行、特征在列,第一列离散分组 mSet <- Read.TextData(mSet, "human_cachexia.csv", "rowu", "disc") # 3. 健全性检查:样本量够不够、分几组 mSet <- SanityCheckData(mSet) # 4. 零值/缺失替换为该特征最小正值的一半 mSet <- ReplaceMin(mSet) # 5. 归一化:log10 + 均值中心化 mSet <- PreparePrenormData(mSet) mSet <- Normalization(mSet, "NULL", "LogNorm", "MeanCenter", ref=NULL, ratio=FALSE) # 6. 差异倍数 + t 检验 + 火山图 mSet <- FC.Anal(mSet, 2.0, 0) mSet <- Ttests.Anal(mSet, nonpar=FALSE, threshp=0.05, paired=FALSE) mSet <- Volcano.Anal(mSet, FALSE, 2.0) mSet <- PlotVolcano(mSet, "volcano.png", TRUE, "light", format="png", dpi=300)流程是:读入 → 检查 → 插补 → 归一化 → 差异 → 出图。每步都返回同一个mSet,结果累积在mSet$dataSet和mSet$analSet的不同字段里,不需要来回传临时变量。想核对结果是否与官方一致,可以跑一下 tests/testthat/ 里的 testthat 用例,里面断言了每步的矩阵维度和数值。
常见坑与处理办法
⚠️ 按出现频率排序,每条一行:
- Linux 编译失败 → 先装 libcairo2-dev、libxml2、libssl-dev,再 R CMD INSTALL,代码本身没问题
- Windows 编译失败 → 装 Rtools 即可
Read.TextData后分组没识别出来 → 检查 format 参数:"rowu"是样本在行且首列为标签,转置布局用"colu"- 归一化后出现全零行 → 顺序反了,先
ReplaceMin再Normalization - 通路分析报 "data is not annotated yet" → 没设物种和 ID 类型,先做 ID 映射;只有峰表就改走 mummichog
- t 检验报找不到 limma → 默认检验方法依赖 limma,
BiocManager::install("limma")装上 - 火山图着色与 FC 不一致 →
Volcano.Anal的 fcthresh 要和FC.Anal的第一个参数保持同一个值
进阶方向(点到为止)
- 生物标志物:单代谢物 ROC 曲线与特征排序(
Perform.UnivROC、CalculateFeatureRanking) - 分类建模:随机森林、SVM(anal 类型设为 biomarker,实现在 R/stats_classification.R)
- 原始谱图处理:4.0 新增的 LC-MS1 峰检测、MS2 谱反卷积与化合物注释(支持 DDA 和 DIA)
- 时间序列与多因素设计:时间序列分析、双因素 ANOVA、ASCA
- 统计功效分析:实验前估算样本量(Power 模块)
引用信息在 R 里跑citation("MetaboAnalystR")就能拿到。
下一步建议:把你手头一份 CSV 按上面 6 步完整跑一遍——哪怕只是复现火山图,也比看十页文档更能摸清mSet里每个字段是什么。
【免费下载链接】MetaboAnalystRR package for MetaboAnalyst项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考