| 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 |
Lipidomics Analysis
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
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,
: chain1_unsat
}
parse_lipid_name()
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 height
librarypheatmap
class_matrix lipid_data
group_byClass Sample
summarisetotal Intensity .groups
pivot_widernames_from Sample values_from total
pheatmapas.matrixclass_matrix
labels_row class_matrixClass
scale
clustering_method
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
labstitle
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