| name | bio-workflows-metabolomics-pipeline |
| description | End-to-end metabolomics workflow from raw MS data to pathway analysis. Orchestrates XCMS preprocessing, annotation, normalization, statistical analysis, and pathway mapping. Use when processing LC-MS metabolomics data. |
| tool_type | r |
| primary_tool | XCMS |
| workflow | true |
| depends_on | ["metabolomics/xcms-preprocessing","metabolomics/metabolite-annotation","metabolomics/normalization-qc","metabolomics/statistical-analysis","metabolomics/pathway-mapping","metabolomics/lipidomics","metabolomics/targeted-analysis","metabolomics/msdial-preprocessing"] |
Metabolomics Pipeline
Pipeline Overview
Raw MS Data (mzML/mzXML) ──> Peak Detection ──> Feature Matrix
│
▼
┌─────────────────────────────────────────────┐
│ metabolomics-pipeline │
├─────────────────────────────────────────────┤
│ 1. Peak Detection (XCMS) │
│ 2. Retention Time Alignment │
│ 3. Feature Grouping & Gap Filling │
│ 4. QC & Normalization │
│ 5. Statistical Analysis │
│ 6. Metabolite Annotation │
│ 7. Pathway Mapping │
└─────────────────────────────────────────────┘
│
▼
Differential Metabolites + Enriched Pathways
Complete R Workflow
library(xcms)
library(MSnbase)
library(MetaboAnalystR)
library(ggplot2)
mzml_files <- list.files('data/', pattern = '\\.mzML$', full.names = TRUE)
sample_data <- read.csv('sample_metadata.csv')
raw_data <- readMSData(mzml_files, mode = 'onDisk')
pData(raw_data) <- sample_data
cat('Loaded', length(mzml_files), 'samples\n')
cwp <- CentWaveParam(
peakwidth = c(5, 30),
ppm = 25
snthresh
prefilter
mzdiff
noise
xdata findChromPeaksraw_data param cwp
cat nrowchromPeaksxdata
xdata adjustRtimexdata param ObiwarpParambinSize
cat
pdp PeakDensityParam
sampleGroups pDataxdatacondition
minFraction
bw
binSize
xdata groupChromPeaksxdata param pdp
cat nrowfeatureDefinitionsxdata
xdata fillChromPeaksxdata param ChromPeakAreaParam
feature_matrix featureValuesxdata value method
feature_info featureDefinitionsxdata
feature_matrixfeature_matrix
log_matrix log2feature_matrix
valid_features rowSumslog_matrix ncollog_matrix
filtered_matrix log_matrixvalid_features
cat nrowfiltered_matrix
sample_medians applyfiltered_matrix median na.rm
global_median mediansample_medians
normalized sweepfiltered_matrix sample_medians global_median
pca prcomptnormalized scale.
pca_df data.framePC1 pcax PC2 pcax
Sample rownamespcax
Condition pDataxdatacondition
ggplotpca_df aesPC1 PC2 color Condition
geom_pointsize
theme_bw
labstitle
ggsave width height
librarylimma
design model.matrix condition data pDataxdata
colnamesdesign levelsfactorpDataxdatacondition
imputed normalized
imputedimputed imputed na.rm
fit lmFitimputed design
contrast makeContrastsTreatment Control levels design
fit2 contrasts.fitfit contrast
fit2 eBayesfit2
results topTablefit2 number adjust.method
resultsfeature_id rownamesresults
resultssignificant resultslogFC resultsadj.P.Val
cat resultssignificant
resultsmz feature_inforesultsfeature_id
resultsrt feature_inforesultsfeature_id
libraryKEGGREST
annotate_mz mz ppm
mz_range mz ppm mz ppm
ggplotresults aesx logFC y log10adj.P.Val color significant
geom_pointalpha
geom_hlineyintercept log10 linetype
geom_vlinexintercept linetype
scale_color_manualvalues
theme_bw
labstitle x y
ggsave width height
write.csvresults row.names
write.csvnormalized
cat
MetaboAnalystR Pathway Analysis
library(MetaboAnalystR)
mSet <- InitDataObjects('conc', 'pathora', FALSE)
sig_features <- results[results$significant, ]
compound_list <- sig_features$hmdb_id
mSet <- Setup.MapData(mSet, compound_list)
mSet <- CrossReferencing(mSet, 'hmdb')
mSet <- CreateMappingResultTable(mSet)
mSet <- SetKEGG.PathLib(mSet, 'hsa')
mSet <- SetMetabolomeFilter(mSet, FALSE)
mSet <- CalculateOraScore(mSet, 'rbc', 'hyperg')
pathway_results <- mSet$analSetora.mat
headpathway_results
mSet PlotPathSummarymSet
Alternative: MS-DIAL Preprocessing
msdial_export <- read.csv('msdial_alignment.csv')
feature_matrix <- as.matrix(msdial_export[, grep('Area', colnames(msdial_export))])
rownames(feature_matrix) <- msdial_export$`Alignment.ID`
QC Checkpoints
| Stage | Check | Action if Failed |
|---|
| Peak detection | >1000 features | Adjust parameters |
| Alignment | RT deviation <30s | Check QC samples |
| Grouping | >60% features grouped | Adjust bw/minFraction |
| Missing values | <30% per sample | Check injection |
| QC RSD | <30% for QC features | Check instrument |
| PCA | Groups separate | Check batch effects |
Workflow Variants
Lipidomics
cwp_lipid <- CentWaveParam(
peakwidth = c(10, 60),
ppm = 15,
snthresh = 5
)
Targeted Analysis
targets <- data.frame(
name = c('Glucose', 'Lactate', 'Citrate'),
mz = c(179.0561, 89.0244, 191.0197),
rt = c(120, 90, 180)
)
extractTargets <- function(xdata, targets, mz_ppm = 10, rt_tol = 30) {
lapply(1:nrow(targets), function(i) {
chromPeaks(xdata, mz targetsmzi ppm mz_ppm
rt targetsrti rt_tol targetsrti rt_tol
Related Skills
- metabolomics/xcms-preprocessing - XCMS parameters
- metabolomics/metabolite-annotation - Compound identification
- metabolomics/normalization-qc - QC and normalization methods
- metabolomics/statistical-analysis - Statistical testing
- metabolomics/pathway-mapping - KEGG/MetaboAnalyst
- metabolomics/lipidomics - Lipid-specific analysis
- metabolomics/targeted-analysis - Absolute quantification
- metabolomics/msdial-preprocessing - MS-DIAL export processing
- multi-omics-integration/mofa-integration - Integrate with other omics