Metabolomics-specific analysis strategies and domain knowledge
Metabolites have multiple naming conventions:
Always verify metabolite identity before interpreting results.
Metabolites exist in biochemical pathways:
Example pathway:
Glucose ā (HK) ā G6P ā (G6PDH) ā 6PG
If G6P ā and 6PG unchanged ā suggests bottleneck at G6PDH enzyme
Concentration: Amount of metabolite present Flux: Rate of metabolite conversion
Key insight:
Pattern 1: Substrate Depletion
Precursor āā, Product āā
ā Interpretation: Active consumption, increased flux
Pattern 2: Bottleneck
Substrate āā, Product āā or unchanged
ā Interpretation: Enzymatic bottleneck, blocked conversion
Pattern 3: Pathway Shutdown
All pathway metabolites āā
ā Interpretation: Reduced pathway activity
Pattern 4: Salvage vs De Novo
De novo intermediates ā, Salvage products ā
ā Interpretation: Metabolic shift to energy-efficient salvage
When: You have many differentially abundant metabolites
How:
# Group metabolites by pathway
pathway_metabolites = {
"Glycolysis": ["Glucose", "G6P", "F6P", "FBP", ...],
"TCA Cycle": ["Citrate", "Isocitrate", "α-KG", ...],
"Purine Metabolism": ["AMP", "ADP", "ATP", "IMP", ...]
}
# Count hits per pathway
for pathway, metabolites in pathway_metabolites.items():
hits = [m for m in significant_metabolites if m in metabolites]
enrichment_score = len(hits) / len(metabolites)
Resources:
When: You want to infer enzymatic activity
How:
# Simple flux proxy: Product / Substrate
flux_index = data["Product"] / data["Substrate"]
# Compare across groups
t_test(flux_index[group1], flux_index[group2])
Common indices:
When: Assessing cellular energy state
Formula:
# Adenylate energy charge
AEC = (ATP + 0.5*ADP) / (ATP + ADP + AMP)
# Range: 0 (depleted) to 1 (high energy)
# Similar for GTP, CTP, UTP
Interpretation:
When: Investigating oxidative stress or metabolic state
Ratios:
NAD_ratio = NAD+ / NADH # High = oxidized state
NADP_ratio = NADP+ / NADPH # High = oxidative stress
GSH_ratio = GSH / GSSG # Low = oxidative stress
H1: Pathway Shift Hypothesis
"Condition X shifts metabolism from [pathway A] to [pathway B]
due to [mechanism], evidenced by [metabolite pattern]"
H2: Enzymatic Bottleneck Hypothesis
"Enzyme [E] activity is reduced in condition X, causing accumulation
of substrate [S] and depletion of product [P]"
H3: Cofactor Limitation Hypothesis
"Limited availability of cofactor [C] constrains pathway [P],
causing metabolite pattern [M]"
H4: Energy State Hypothesis
"Condition X induces low-energy state, triggering metabolic
reprogramming to salvage pathways"
For pathway context:
"[metabolite] metabolism pathway"
"[metabolite] biosynthesis regulation"
For mechanistic insights:
"[condition] [metabolite] mechanism"
"[enzyme] regulation [condition]"
For flux studies:
"[pathway] flux analysis"
"[metabolite] turnover rate"
ā Assuming directionality
ā Ignoring compartmentalization
ā Overinterpreting single metabolites
ā Confusing correlation with regulation
ā Forgetting isomers
Before interpreting results, verify:
Observation: ATP levels decreased 30% (p=0.01)
Step 1: Check related metabolites
# Check adenylate pool
print(data[["ATP", "ADP", "AMP"]])
Step 2: Calculate energy charge
AEC = (ATP + 0.5*ADP) / (ATP + ADP + AMP)
Step 3: Search literature
search_pubmed("[condition] ATP depletion mechanism")
Step 4: Generate hypotheses
Step 5: Test hypotheses
# H2: Check TCA cycle metabolites
tca_metabolites = ["Citrate", "Isocitrate", "α-KG", "Succinate", "Fumarate", "Malate"]
test_pathway(tca_metabolites, group_var)
Metabolism is a network, not a list.
Single metabolite changes are clues, not answers. Build mechanistic models by connecting metabolites through known biochemical pathways.