The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
easyLSEA proporciona un pipeline completo para el Análisis de Enriquecimiento de Conjuntos de Lípidos (LSEA, por sus siglas en inglés) en R. A partir de una tabla de abundancias lipídicas diferenciales, el paquete anota los lípidos en grupos biológicos, evalúa si dichos grupos están sistemáticamente desplazados entre condiciones, y genera visualizaciones listas para publicación: bubble plots, gráficos de distribución y análisis de cadenas de ácidos grasos.
El paquete implementa dos motores de enriquecimiento complementarios:
Ejecutar ambos motores y comparar sus resultados (análisis de convergencia) ofrece una imagen más completa de la remodelación lipídica que cualquier método por separado.
Instalar la versión estable desde CRAN:
O la versión de desarrollo desde GitHub:
Para activar el motor fgsea, instalar la dependencia opcional de Bioconductor:
easyLSEA espera un data.frame con al menos
las siguientes columnas:
| Columna | Descripción |
|---|---|
LipidName |
Identificador del lípido en notación abreviada estándar
(e.g. PC 36:4, TG 54:3) |
logFC |
Cambio en log2 (caso vs referencia) |
P.Value |
p-valor crudo (sin ajustar) — usado para el ranking pi-valor de fgsea |
Columnas adicionales que se usan cuando están presentes:
| Columna | Uso |
|---|---|
adj.P.Val |
Conteo de lípidos significativamente alterados |
Confidence_rank |
Filtrado por confianza de anotación |
Shorthand |
Nombre alternativo del lípido |
Los nombres de columna son configurables mediante los argumentos
lipid_col, fc_col y pval_col.
El pipeline completo se ejecuta con una sola llamada a
easyLSEA():
library(easyLSEA)
resultado <- easyLSEA(
data = mis_datos_lipidicos,
lipid_col = "LipidName",
fc_col = "logFC",
pval_col = "P.Value",
case_lbl = "NASH",
ref_lbl = "Control",
engine = "both", # ejecutar KS y fgsea
min_rank = "E" # incluir todos los ranks excepto P y NA (por defecto)
)Esto devuelve un objeto de clase easyLSEA_result con
cinco slots descritos en la sección siguiente.
resultado$metaLista con metadatos del análisis: fecha, etiquetas de comparación, motor utilizado, número de lípidos y la llamada original a la función.
resultado$lseaContiene las estadísticas de enriquecimiento. Los sub-elementos principales son:
# Resultados KS — una fila por conjunto lipídico por nivel de agrupación
head(resultado$lsea$ks)
# Resultados fgsea
head(resultado$lsea$fgsea)
# Tabla combinada con columna de Convergencia
head(resultado$lsea$combined)Columnas principales en los resultados KS:
| Columna | Descripción |
|---|---|
Group |
Nombre del conjunto lipídico (e.g. PC,
Glycerolipids) |
Level |
Nivel de agrupación (LipidClass,
LipidCategory_LMAPS,
LipidCategory_functional) |
N_group |
Número de lípidos en el conjunto |
DirectionalScore |
Diferencia de medias estandarizada (análogo al d de Cohen). Positivo = aumentado en el caso. |
KS_pval |
p-valor KS bilateral |
FDR_LSEA |
FDR ajustado por BH |
DS_perm_pval |
p-valor de permutación para el DirectionalScore |
ContributingLipids_KS |
Lípidos en el lado enriquecido del punto de máxima divergencia CDF |
Columnas principales en los resultados fgsea:
| Columna | Descripción |
|---|---|
NES |
Puntuación de Enriquecimiento Normalizada. Positivo = enriquecido hacia el tope de la lista (aumentado en el caso). |
FDR_fgsea |
FDR ajustado por BH de fgsea |
N_leading |
Tamaño del leading edge |
LeadingEdge |
Lípidos en el leading edge |
rank_metric |
Métrica de ranking utilizada (pi_value,
logFC o t_stat) |
La columna Convergence en la tabla
combinada clasifica cada conjunto como:
| Valor | Significado |
|---|---|
KS+fgsea [strongest] |
Significativo por ambos motores — máxima confianza |
KS only [distributed effect] |
Desplazamiento moderado distribuido en muchos lípidos |
fgsea only [extreme-driven] |
Pocos lípidos fuertemente regulados impulsan la señal |
Neither |
No significativo por ningún motor |
resultado$chainsResultados del análisis de cadenas de ácidos grasos, disponible
cuando run_chains = TRUE:
# Long format — una fila por cadena acilo por lípido
head(resultado$chains$parsed)
# Resumen del estado de parseo — una fila por lípido
head(resultado$chains$summary)
# Wide format — una fila por lípido con posiciones sn y totales
head(resultado$chains$wide)La tabla wide es la más conveniente para reportes. Cada
fila es un lípido, con columnas sn1, sn2,
sn3, sn4 con las cadenas individuales
(e.g. "18:1"), y total_carbons /
total_unsat con los totales sumados. La columna
chain_type indica cómo interpretar las posiciones sn:
chain_type |
sn1 |
sn2 |
sn3 |
sn4 |
|---|---|---|---|---|
sn2 (PC, PE, PS…) |
cadena sn-1 | cadena sn-2 | NA | NA |
nacyl (Cer, SM…) |
base esfingoidea | cadena N-acilo | NA | NA |
long_format (TG) |
cadena 1 | cadena 2 | cadena 3 | NA |
long_format (CL) |
cadena 1 | cadena 2 | cadena 3 | cadena 4 |
single (CAR, LPC) |
la cadena | NA | NA | NA |
resultado$plotsLista de objetos ggplot2, disponible cuando
plots = TRUE:
Convención de nombres para los bubble plots de LSEA:
| Nombre | Descripción |
|---|---|
bubble_ks_01_Class |
Bubble plot KS — nivel de clase lipídica |
bubble_ks_sig_01_Class |
Bubble plot KS — solo conjuntos significativos |
bubble_fgsea_01_Class |
Bubble plot fgsea — nivel de clase lipídica |
bubble_fgsea_sig_01_Class |
Bubble plot fgsea — solo conjuntos significativos |
dist_01_Class |
Distribución (boxplot) — nivel de clase lipídica |
Niveles: 01_Class (clase lipídica),
02_LMAPS (categoría LIPID MAPS), 03_Functional
(categoría funcional).
Los gráficos individuales se pueden mostrar directamente:
# Bubble plot KS — todas las clases lipídicas
resultado$plots$lsea$bubble_ks_01_Class
# Bubble plot fgsea — solo conjuntos significativos
resultado$plots$lsea$bubble_fgsea_sig_01_Class
# Gráfico de distribución — nivel de clase lipídica
resultado$plots$lsea$dist_01_ClassPara personalizar las etiquetas del bubble plot:
# Regenerar plots mostrando solo FDR y n
plots <- plot_lsea(
resultado$lsea,
case_lbl = "NASH",
ref_lbl = "Control",
bubble_label = c("FDR", "n")
)export_lsea() guarda todos los resultados en una carpeta
con marca de tiempo. Indica el directorio de salida explícitamente
mediante dir (aquí un directorio temporal; para un análisis
real usa una carpeta de tu elección):
Esto genera la siguiente estructura:
easyLSEA_NASH_vs_Control_2024-01-15_1430/
tables/
lsea_results_ks.csv
lsea_results_fgsea.csv
lsea_combined.csv
chain_results.csv
plots/
lsea/
01_Class/
bubble_ks_01_Class.pdf
bubble_ks_sig_01_Class.pdf
bubble_fgsea_01_Class.pdf
bubble_fgsea_sig_01_Class.pdf
dist_01_Class.pdf
02_LMAPS/ ...
03_Functional/ ...
chains/
tile/ ...
trend/ ...
results.xlsx
# Paso 1: anotar
anotado <- annotate_lipids(mis_datos_lipidicos, lipid_col = "LipidName")
# Paso 2: ejecutar el enriquecimiento
lsea_res <- run_lsea(
data = anotado,
fc_col = "logFC",
engine = "both",
case_lbl = "NASH",
ref_lbl = "Control"
)
# Paso 3: generar plots manualmente
plots <- plot_lsea(
lsea_res,
case_lbl = "NASH",
ref_lbl = "Control",
fdr_thresh = 0.05,
bubble_label = c("FDR", "DS", "NES", "n")
)
# Paso 4: gráfico de distribución para un nivel específico
p_dist <- plot_distribution(
data = anotado,
lsea_result = lsea_res,
group_col = "LipidClass",
case_lbl = "NASH",
ref_lbl = "Control"
)# Por defecto: pi-valor = signo(logFC) × −log10(P.Value)
# Combina magnitud del efecto y significancia estadística
# Alternativa: solo logFC
resultado_fc <- easyLSEA(
data = mis_datos_lipidicos,
engine = "fgsea",
fgsea_rank = "logFC"
)
# Alternativa: estadístico t de LIMMA (requiere columna 't')
resultado_t <- easyLSEA(
data = mis_datos_lipidicos,
engine = "fgsea",
fgsea_rank = "t_stat"
)Cuando las anotaciones lipídicas incluyen un rank de confianza (A
> B > C > D > E > P), el parámetro min_rank
controla qué lípidos entran al análisis de cadenas:
# Por defecto: incluye todos excepto P y NA
resultado_todos <- easyLSEA(data = mis_datos_lipidicos, min_rank = "E")
# Estricto: solo anotaciones de alta confianza (A y B)
resultado_estricto <- easyLSEA(data = mis_datos_lipidicos, min_rank = "B")
# O directamente en parse_lipid_chains
cadenas_estrictas <- parse_lipid_chains(anotado, min_rank = "B")
table(cadenas_estrictas$summary$status)Los lípidos excluidos por min_rank aparecen en
resultado$chains$summary con status
excluded_rank_below_X (donde X es el umbral elegido),
facilitando auditar qué lípidos fueron filtrados.
Ambos motores evalúan la misma hipótesis nula (ausencia de enriquecimiento sistemático) pero son sensibles a patrones de señal distintos:
DirectionalScore ≈ 0 sugiere una
diferencia en varianza o forma de la distribución, no un desplazamiento
neto — interpretar con precaución.Los resultados convergentes (significativos por ambos motores) proporcionan la evidencia más sólida de remodelación coordinada de una clase lipídica.
El DirectionalScore es una diferencia de medias
estandarizada (análogo al d de Cohen):
DS = (media_logFC_conjunto − media_logFC_fondo) / DS_combinada
Cuantifica la dirección y magnitud del desplazamiento, independientemente del p-valor KS. Un conjunto puede tener un p-valor KS significativo con un DirectionalScore cercano a cero — este patrón sugiere regulación heterogénea dentro del conjunto.
Por defecto, fgsea ordena los lípidos por:
pi-valor = signo(logFC) × −log10(P.Value)
Esta métrica combina la dirección del cambio con la confianza estadística, dando mayor peso a los lípidos que están regulados de forma tanto intensa como significativa. Se prefiere al logFC solo cuando los p-valores están disponibles.
sessionInfo()
#> R version 4.5.1 (2025-06-13)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Tahoe 26.2
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
#>
#> locale:
#> [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#>
#> time zone: America/New_York
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> loaded via a namespace (and not attached):
#> [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 xfun_0.57
#> [5] cachem_1.1.0 knitr_1.51 htmltools_0.5.9 rmarkdown_2.31
#> [9] lifecycle_1.0.5 cli_3.6.6 sass_0.4.10 jquerylib_0.1.4
#> [13] compiler_4.5.1 rstudioapi_0.18.0 tools_4.5.1 evaluate_1.0.5
#> [17] bslib_0.11.0 yaml_2.3.12 otel_0.2.0 jsonlite_2.0.0
#> [21] rlang_1.2.0These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.