install
source · Clone the upstream repo
git clone https://github.com/mdbabumiamssm/LLMs-Universal-Life-Science-and-Clinical-Skills-
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/mdbabumiamssm/LLMs-Universal-Life-Science-and-Clinical-Skills- "$T" && mkdir -p ~/.claude/skills && cp -r "$T/Skills/Multi_Omics/multi-omics-integration/mixomics-analysis" ~/.claude/skills/mdbabumiamssm-llms-universal-life-science-and-clinical-skills-mixomics-analysis && rm -rf "$T"
manifest:
Skills/Multi_Omics/multi-omics-integration/mixomics-analysis/SKILL.mdsource content
<!--
# COPYRIGHT NOTICE
# This file is part of the "Universal Biomedical Skills" project.
# Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
# All Rights Reserved.
#
# This code is proprietary and confidential.
# Unauthorized copying of this file, via any medium is strictly prohibited.
#
# Provenance: Authenticated by MD BABU MIA
-->
name: bio-multi-omics-mixomics-analysis description: Supervised and unsupervised multi-omics integration with mixOmics. Includes sPLS for pairwise integration and DIABLO for multi-block discriminant analysis. Use when performing supervised multi-omics integration or identifying features that discriminate between groups. tool_type: r primary_tool: mixOmics measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
mixOmics Multi-Omics Analysis
Setup and Data Preparation
library(mixOmics) # Load omics matrices (samples x features) X_rna <- as.matrix(read.csv('rnaseq.csv', row.names = 1)) X_protein <- as.matrix(read.csv('proteomics.csv', row.names = 1)) Y <- factor(read.csv('phenotype.csv')$Condition) # Ensure matching samples common <- Reduce(intersect, list(rownames(X_rna), rownames(X_protein))) X_rna <- X_rna[common, ] X_protein <- X_protein[common, ] Y <- Y[match(common, read.csv('phenotype.csv')$Sample)]
Pairwise Integration: sPLS
# Sparse Partial Least Squares for two datasets # Finds correlated features between omics # Tune number of components tune_spls <- perf(spls(X_rna, X_protein, ncomp = 5), validation = 'Mfold', folds = 5) plot(tune_spls) # Run sPLS spls_result <- spls(X_rna, X_protein, ncomp = 3, keepX = c(50, 50, 50), keepY = c(30, 30, 30)) # Visualize correlations plotIndiv(spls_result, comp = c(1, 2), group = Y, legend = TRUE) plotVar(spls_result, comp = c(1, 2), var.names = TRUE) # Correlation circle plotArrow(spls_result, group = Y) # Heatmap of selected features cim(spls_result, comp = 1)
DIABLO: Multi-Block Discriminant Analysis
# DIABLO integrates multiple blocks with supervision # Finds features discriminating between conditions # Prepare block list X_blocks <- list(RNA = X_rna, Protein = X_protein) # Design matrix (correlation between blocks) design <- matrix(0.1, ncol = 2, nrow = 2, dimnames = list(names(X_blocks), names(X_blocks))) diag(design) <- 0 # Tune parameters tune_diablo <- tune.block.splsda(X_blocks, Y, ncomp = 3, test.keepX = list(RNA = c(10, 25, 50), Protein = c(10, 25, 50)), design = design, validation = 'Mfold', folds = 5, nrepeat = 10, cpus = 4) # Optimal keepX values optimal_keepX <- tune_diablo$choice.keepX # Final model diablo <- block.splsda(X_blocks, Y, ncomp = 3, keepX = optimal_keepX, design = design) # Performance perf_diablo <- perf(diablo, validation = 'Mfold', folds = 5, nrepeat = 10) plot(perf_diablo)
DIABLO Visualization
# Sample plots plotIndiv(diablo, comp = c(1, 2), blocks = 'consensus', group = Y, legend = TRUE, title = 'DIABLO Consensus') # Per-block sample plots plotIndiv(diablo, comp = c(1, 2), blocks = 'RNA', group = Y) # Variable plots plotVar(diablo, comp = c(1, 2), blocks = c('RNA', 'Protein'), var.names = list(RNA = FALSE, Protein = FALSE)) # Circos plot showing inter-block correlations circosPlot(diablo, cutoff = 0.7, line = TRUE) # Network of correlated features network(diablo, blocks = c('RNA', 'Protein'), cutoff = 0.6) # Heatmap cimDiablo(diablo, margin = c(8, 20))
Extract Selected Features
# Get selected variables per block selected_rna <- selectVar(diablo, block = 'RNA', comp = 1)$RNA$name selected_protein <- selectVar(diablo, block = 'Protein', comp = 1)$Protein$name # Loadings loadings_rna <- plotLoadings(diablo, block = 'RNA', comp = 1, contrib = 'max') loadings_protein <- plotLoadings(diablo, block = 'Protein', comp = 1, contrib = 'max') # Export for pathway analysis write.csv(data.frame(gene = selected_rna), 'diablo_rna_features.csv', row.names = FALSE) write.csv(data.frame(protein = selected_protein), 'diablo_protein_features.csv', row.names = FALSE)
MINT: Multi-Study Integration
# MINT for integrating multiple studies # Accounts for study-specific effects study <- factor(c(rep('Study1', 50), rep('Study2', 50))) mint_result <- mint.splsda(X = X_rna, Y = Y, study = study, ncomp = 3, keepX = c(50, 50, 50)) # Visualize plotIndiv(mint_result, study = 'global', group = Y, legend = TRUE) plotIndiv(mint_result, study = 'all.partial', group = Y) # Performance perf_mint <- perf(mint_result, validation = 'Mfold', folds = 5)
Unsupervised: sPCA and sPLS-DA Single Omics
# Sparse PCA (single omics) spca_result <- spca(X_rna, ncomp = 3, keepX = c(50, 50, 50)) plotIndiv(spca_result, group = Y) plotVar(spca_result) # sPLS-DA (single omics with supervision) splsda_result <- splsda(X_rna, Y, ncomp = 3, keepX = c(50, 50, 50)) plotIndiv(splsda_result, group = Y, legend = TRUE) # Background prediction background <- background.predict(splsda_result, comp.predicted = 2, dist = 'max.dist') plotIndiv(splsda_result, group = Y, background = background)
Model Performance and Validation
# Cross-validation performance perf_result <- perf(diablo, validation = 'Mfold', folds = 5, nrepeat = 50, cpus = 4) # Error rates plot(perf_result) perf_result$error.rate # AUC auc_diablo <- auroc(diablo, roc.block = 'RNA', roc.comp = 1)
Related Skills
- mofa-integration - Unsupervised multi-omics
- data-harmonization - Preprocess before integration
- differential-expression/de-results - Single-omics analysis
- pathway-analysis/go-enrichment - Interpret selected features