| name | bio-metabolomics-lipidomics |
| description | Specialized lipidomics analysis for lipid identification, quantification, and pathway interpretation. Covers LC-MS lipidomics with LipidSearch, MS-DIAL, and LipidMaps annotation. Use when analyzing lipid classes, chain composition, or lipid-specific pathways. |
| tool_type | mixed |
| primary_tool | lipidr |
Version Compatibility
Reference examples tested with: ggplot2 3.5+, numpy 1.26+, pandas 2.2+, scanpy 1.10+, xcms 4.0+
Before using code patterns, verify installed versions match. If versions differ:
- Python:
pip show <package> then help(module.function) to check signatures
- R:
packageVersion('<pkg>') then ?function_name to verify parameters
If code throws ImportError, AttributeError, or TypeError, introspect the installed
package and adapt the example to match the actual API rather than retrying.
Lipidomics Analysis
"Analyze my lipidomics data" → Identify and quantify lipid species by class and chain composition, then perform differential lipid analysis and pathway interpretation.
- R:
lipidr::as_lipidomics_experiment(), de_analysis()
- CLI: MS-DIAL or LipidSearch for lipid identification
R Workflow with lipidr
library(lipidr)
library(ggplot2)
lipid_data <- read_lipidomes('lipidsearch_export.csv', data_type = 'LipidSearch')
lipid_data <- as_lipidomics_experiment(
data = intensity_matrix,
sample_info = sample_metadata,
lipid_info = lipid_annotations
)
print(lipid_data)
plot_samples(lipid_data, type = 'tic')
Lipid Annotation
lipid_data <- annotate_lipids(lipid_data)
table(rowData(lipid_data)$Class)
plot_chain_distribution(lipid_data)
Normalization
lipid_data <- normalize_pqn(lipid_data)
lipid_data <- normalize_istd(lipid_data, istd_class = 'PC')
lipid_data <- log_transform(lipid_data)
plot_samples(lipid_data, type = 'boxplot')
Differential Analysis
de_results <- de_analysis(
lipid_data,
Treatment - Control,
measure = 'Area'
)
sig_lipids <- significant_lipids(de_results, p.cutoff = 0.05, logFC.cutoff = 1)
plot_results_volcano(de_results, show.labels = TRUE)
plot_results_volcano(de_results, facet = 'Class')
Enrichment Analysis
enrich_results <- lsea(de_results, rank.by = 'logFC')
plot_enrichment(enrich_results, significant.only = TRUE)
chain_enrich <- lsea(de_results, rank.by = 'logFC', type = 'chain')
Python Workflow with LipidFinder
Goal: Identify and classify lipid species from LC-MS data using PyOpenMS and LipidMaps annotation.
Approach: Load mzML data, extract features from XCMS preprocessing, annotate by m/z against LipidMaps, and parse lipid nomenclature for class and chain composition.
import pandas as pd
import numpy as np
from pyopenms import MSExperiment, MzMLFile
exp = MSExperiment()
MzMLFile().load('lipidomics.mzML', exp)
features = pd.read_csv('xcms_features.csv')
def annotate_lipidmaps(mz, adduct='[M+H]+', tolerance_ppm=10):
'''Query LipidMaps for lipid annotation'''
import requests
url = f'https://www.lipidmaps.org/rest/compound/lm_id/{mz}'
return None
def parse_lipid_name(name):
'''Extract lipid class and chain info from shorthand notation'''
import re
pattern = r'(\w+)\s*\((\d+):(\d+)(?:/(\d+):(\d+))?\)'
match = re.match(pattern, name)
if match:
lipid_class = match.group(1)
chain1_carbon = int(match.group(2))
chain1_unsat = int(match.group(3))
return {
'class': lipid_class,
'total_carbons': chain1_carbon,
'total_unsaturation': chain1_unsat
}
return None
parse_lipid_name('PC(34:1)')
MS-DIAL Lipidomics
msdial_data <- read.csv('msdial_lipidomics.csv')
lipid_cols <- c('Metabolite.name', 'Ontology', 'INCHIKEY', 'SMILES')
annotations <- msdial_data[, lipid_cols]
intensity_cols <- grep('Area', colnames(msdial_data), value = TRUE)
intensities <- msdial_data[, intensity_cols]
high_conf <- msdial_data$Annotation.tag == 'Lipid'
msdial_lipids <- msdial_data[high_conf, ]
Lipid Class Visualization
library(ggplot2)
class_summary <- lipid_data %>%
group_by(Class, Condition) %>%
summarise(mean_intensity = mean(Intensity), .groups = 'drop')
ggplot(class_summary, aes(x = Condition, y = mean_intensity, fill = Class)) +
geom_bar(stat = 'identity', position = 'fill') +
scale_fill_brewer(palette = 'Set3') +
theme_bw() +
labs(y = 'Relative Abundance', title = 'Lipid Class Composition')
ggsave('lipid_class_composition.png', width = 8, height = 6)
library(pheatmap)
class_matrix <- lipid_data %>%
group_by(Class, Sample) %>%
summarise(total = sum(Intensity), .groups = 'drop') %>%
pivot_wider(names_from = Sample, values_from = total)
pheatmap(as.matrix(class_matrix[, -1]),
labels_row = class_matrix$Class,
scale = 'row',
clustering_method = 'ward.D2')
Pathway Mapping
library(KEGGREST)
lipid_kegg <- keggFind('compound', 'lipid')
pathway_lipids <- keggGet('hsa00564')
Saturation Analysis
sat_analysis <- lipid_data %>%
mutate(
saturation_class = case_when(
total_db == 0 ~ 'Saturated',
total_db == 1 ~ 'Monounsaturated',
TRUE ~ 'Polyunsaturated'
)
) %>%
group_by(Condition, saturation_class) %>%
summarise(mean_abundance = mean(Intensity), .groups = 'drop')
ggplot(sat_analysis, aes(x = Condition, y = mean_abundance, fill = saturation_class)) +
geom_bar(stat = 'identity', position = 'dodge') +
theme_bw() +
labs(title = 'Saturation Profile by Condition')
Export Results
results_table <- data.frame(
Lipid = rownames(de_results),
Class = rowData(lipid_data)$Class,
Chain = rowData(lipid_data)$total_chain,
logFC = de_results$logFC,
pvalue = de_results$P.Value,
adj_pvalue = de_results$adj.P.Val
)
write.csv(results_table, 'lipidomics_results.csv', row.names = FALSE)
Related Skills
- xcms-preprocessing - Peak detection for lipidomics
- metabolite-annotation - General annotation methods
- statistical-analysis - Multivariate analysis
- pathway-mapping - Lipid pathway enrichment