This source did not publish a separate summary. Review SKILL.md before using the skill.
SKILL.md
Metabolomics Analysis
Comprehensive analysis of metabolomics data from metabolite identification through quantification, statistical analysis, pathway interpretation, and integration with other omics layers.
When to Use This Skill
Triggers:
User has metabolomics data (LC-MS, GC-MS, NMR)
Questions about metabolite abundance or concentrations
Differential metabolite analysis requests
Metabolic pathway analysis
Multi-omics integration with metabolomics
Metabolic biomarker discovery
Flux balance analysis or metabolic modeling
Metabolite-enzyme correlation
Example Questions This Skill Solves:
"Analyze this LC-MS metabolomics data for differential metabolites"
"Which metabolic pathways are dysregulated between conditions?"
"Identify metabolite biomarkers for disease classification"
"Correlate metabolite levels with enzyme expression"
"Perform pathway enrichment for differential metabolites"
"Integrate metabolomics with transcriptomics data"
"Characterize the metabolic phenotype of this cell line"
"Identify metabolites associated with drug response"
Core Capabilities
Capability
Description
Data Import
LC-MS, GC-MS, NMR, targeted/untargeted platforms
Metabolite Identification
Match to HMDB, KEGG, PubChem, spectral libraries
Quality Control
Peak quality, blank subtraction, internal standard normalization
Normalization
Probabilistic quotient, total ion current, internal standards
Statistical Analysis
Univariate and multivariate (PCA, PLS-DA, OPLS-DA)
Differential Analysis
Identify significant metabolite changes
Pathway Enrichment
KEGG, Reactome, BioCyc metabolic pathway analysis
Metabolite-Enzyme Integration
Correlate with expression data
Flux Analysis
Metabolic flux balance analysis (FBA)
Biomarker Discovery
Multi-metabolite signatures
Workflow Overview
Input: Metabolomics Data (Peak Table or Spectra)
|
v
Phase 1: Data Import & Metabolite Identification
|-- Load peak table or process raw spectra
|-- Match features to metabolite databases (HMDB, KEGG)
|-- Annotate with chemical IDs, formulas, pathways
|-- Confidence scoring for IDs
|
v
Phase 2: Quality Control & Filtering
|-- Assess peak quality (CV, blank ratios)
|-- Remove background peaks
|-- Filter low-quality metabolites
|-- Internal standard check
|
v
Phase 3: Normalization
|-- Sample-wise normalization (TIC, PQN, internal standards)
|-- Batch effect correction
|-- Log-transform or scaling
|
v
Phase 4: Exploratory Analysis
|-- PCA for sample clustering
|-- Quality assessment plots
|-- Outlier detection
|-- Sample correlation
|
v
Phase 5: Differential Analysis
|-- Statistical testing (t-test, ANOVA, Wilcoxon)
|-- Fold change calculation
|-- Multiple testing correction
|-- Volcano plots, heatmaps
|
v
Phase 6: Pathway Analysis
|-- Metabolite set enrichment (MSEA)
|-- Pathway topology analysis
|-- KEGG/Reactome pathway mapping
|-- Identify dysregulated pathways
|
v
Phase 7: Multi-Omics Integration
|-- Correlate with enzyme expression (RNA/protein)
|-- Metabolite-gene associations
|-- Pathway-level integration
|-- Metabolic flux inference
|
v
Phase 8: Generate Report
|-- Summary statistics
|-- Differential metabolites
|-- Pathway diagrams
|-- Multi-omics integration plots
|-- Biomarker panel
Phase Details
Phase 1: Data Import & Metabolite Identification
Objective: Load data and identify metabolites from features.
def load_metabolomics_data(file_path, file_type='peak_table'):
"""
Load metabolomics data.
file_type options:
- 'peak_table': CSV/TSV with metabolites as columns
- 'mzml': Raw LC-MS data (requires processing)
- 'nmr': NMR spectra
"""
import pandas as pd
if file_type == 'peak_table':
# Load peak table
data = pd.read_csv(file_path, index_col=0)
# Rows = samples, Columns = metabolites
return data
elif file_type == 'mzml':
# Process raw MS data (requires pymzml or similar)
# Peak detection, alignment, quantification
pass
Metabolite identification:
def identify_metabolites(feature_data, mass_list, rt_list=None):
"""
Match features to metabolite databases.
Uses accurate mass and retention time (if available).
Queries: HMDB, KEGG Compound, PubChem
"""
from tooluniverse import ToolUniverse
tu = ToolUniverse()
identified_metabolites = []
for i, mass in enumerate(mass_list):
# Query HMDB by mass (±5 ppm tolerance)
hmdb_result = tu.run_one_function({
"name": "hmdb_search_by_mass",
"arguments": {
"mass": mass,
"mass_tolerance": 0.005 # 5 ppm
}
})
if hmdb_result and 'data' in hmdb_result:
matches = hmdb_result['data']
# Rank by confidence
# (exact mass match, pathway context, etc.)
identified_metabolites.append({
'feature_id': i,
'metabolite_name': matches[0]['name'],
'hmdb_id': matches[0]['accession'],
'formula': matches[0]['chemical_formula'],
'confidence': calculate_confidence(matches[0])
})
return identified_metabolites
Confidence scoring:
Level 1: Confirmed with authentic standard (MS + RT match)
Level 2: Probable structure (accurate mass + MS/MS)
Level 3: Tentative match (accurate mass only)
Level 4: Unknown metabolite
Phase 2: Quality Control & Filtering
Objective: Remove low-quality features and background noise.
Quality control metrics:
def metabolomics_qc(data, sample_metadata):
"""
Quality control for metabolomics data.
QC metrics:
- Coefficient of variation (CV) in QC samples
- Blank ratios (signal in samples vs blanks)
- Missing values per metabolite
- Total ion current per sample
"""
# 1. CV in QC samples (should be < 30%)
qc_samples = sample_metadata['sample_type'] == 'QC'
qc_data = data[qc_samples]
cv_per_metabolite = qc_data.std() / qc_data.mean()
high_cv = cv_per_metabolite > 0.3
print(f"Metabolites with CV > 30%: {high_cv.sum()}")
# 2. Blank subtraction
blank_samples = sample_metadata['sample_type'] == 'Blank'
blank_data = data[blank_samples]
# Calculate blank ratios
blank_means = blank_data.mean()
sample_means = data[~blank_samples & ~qc_samples].mean()
blank_ratio = sample_means / blank_means
# Filter: keep metabolites with sample/blank > 3
keep_metabolites = blank_ratio > 3
# 3. Missing values (remove if >50% missing)
missing_per_metabolite = (data == 0).sum() / data.shape[0]
keep_metabolites &= (missing_per_metabolite < 0.5)
# Filter data
filtered_data = data.loc[:, keep_metabolites]
return filtered_data
Phase 3: Normalization
Objective: Account for technical variation and enable fair comparison.
Normalization methods:
1. Total Ion Current (TIC):
def normalize_tic(data):
"""
Normalize by total ion current.
Assumes total metabolite abundance is similar across samples.
"""
tic = data.sum(axis=1)
median_tic = tic.median()
norm_factors = median_tic / tic
normalized = data.multiply(norm_factors, axis=0)
return normalized
2. Probabilistic Quotient Normalization (PQN):
def normalize_pqn(data, reference_sample=None):
"""
Probabilistic quotient normalization.
More robust than TIC to large metabolite changes.
"""
import numpy as np
# Use median sample as reference
if reference_sample is None:
reference = data.median(axis=0)
else:
reference = data.loc[reference_sample]
# Calculate quotients
quotients = data.div(reference, axis=1)
# Median quotient per sample
norm_factors = quotients.median(axis=1)
# Normalize
normalized = data.div(norm_factors, axis=0)
return normalized
3. Internal Standard Normalization:
def normalize_internal_standard(data, is_metabolite):
"""
Normalize by spiked-in internal standard.
Most accurate if added before sample processing.
"""
is_abundance = data[is_metabolite]
norm_factors = is_abundance.median() / is_abundance
normalized = data.multiply(norm_factors, axis=0)
# Remove internal standard from data
normalized = normalized.drop(columns=[is_metabolite])
return normalized