| name | bio-workflows-multi-omics-pipeline |
| description | End-to-end multi-omics integration workflow. Orchestrates data harmonization, MOFA/mixOmics integration, factor interpretation, and downstream analysis across transcriptomics, proteomics, metabolomics, and other modalities. Use when integrating multiple omics datasets. |
| tool_type | r |
| primary_tool | MOFA2 |
| workflow | true |
| depends_on | ["multi-omics-integration/data-harmonization","multi-omics-integration/mofa-integration","multi-omics-integration/mixomics-analysis","multi-omics-integration/similarity-network"] |
Multi-omics Integration Pipeline
Pipeline Overview
RNA-seq Data ─────┐
│
Proteomics Data ──┼──> Data Harmonization ──> Integration ──> Factors/Components
│ │
Metabolomics ─────┘ ▼
┌─────────────────────────────────────────────────────┐
│ multi-omics-pipeline │
├─────────────────────────────────────────────────────┤
│ 1. Data Preprocessing per Modality │
│ 2. Sample Harmonization (matching samples) │
│ 3. Feature Selection/Filtering │
│ 4. Integration (MOFA2 / mixOmics / SNF) │
│ 5. Factor/Component Interpretation │
│ 6. Downstream Analysis │
└─────────────────────────────────────────────────────┘
│
▼
Integrated Factors + Biomarker Signatures
Complete MOFA2 Workflow
library(MOFA2)
library(MOFAdata)
library(ggplot2)
library(tidyverse)
rna <- read.csv('rnaseq_normalized.csv', row.names = 1)
cat('RNA:', nrow(rna), 'samples,', ncol(rna), 'genes\n')
protein <- read.csv('proteomics_normalized.csv', row.names = 1)
cat('Protein:', nrow(protein), 'samples,', ncol(protein), 'proteins\n')
metab <- read.csv( row.names
cat nrowmetab ncolmetab
common_samples Reduceintersect rownamesrna rownamesprotein rownamesmetab
cat common_samples
rna rnacommon_samples
protein proteincommon_samples
metab metabcommon_samples
select_variable data n
vars applydata var na.rm
top_features sortvars decreasing n ncoldata
data top_features
rna_var select_variablerna n
protein_var select_variableprotein n
metab_var select_variablemetab n
data_list
RNA tas.matrixrna_var
Protein tas.matrixprotein_var
Metabolome tas.matrixmetab_var
mofa create_mofadata_list
sample_metadata read.csv
rownamessample_metadata sample_metadatasample_id
samples_metadatamofa sample_metadatacommon_samples
data_opts get_default_data_optionsmofa
data_optsscale_views
model_opts get_default_model_optionsmofa
model_optsnum_factors 15
train_opts get_default_training_optionsmofa
train_optsmaxiter 1000
train_optsconvergence_mode
train_optsseed 42
mofa prepare_mofamofa data_options data_opts
model_options model_opts
training_options train_opts
cat
mofa run_mofamofa outfile use_basilisk
plot_variance_explainedmofa max_r2
ggsave width height
factor_values get_factorsmofa
plot_factor_cormofa color_by
ggsave width height
plot_factormofa factors color_by dot_size
ggsave width height
f
cat f
weights get_weightsmofa factors f as.data.frame
view uniqueweightsview
view_weights weightsweightsview view
view_weights view_weightsorderview_weightsvalue decreasing
cat view pasteheadview_weightsfeature collapse
plot_top_weightsmofa view factors nfeatures
ggsave width height
libraryclusterProfiler
libraryorg.Hs.eg.db
rna_weights get_weightsmofa views factors
top_genes sortrna_weights decreasing
ego enrichGOgene top_genes
OrgDb org.Hs.eg.db
keyType
ont
pvalueCutoff
dotplotego showCategory
ggsave width height
librarysurvival
librarysurvminer
surv_data data.frame
sample rownamesfactor_values
factor1 factor_values
time sample_metadatarownamesfactor_values
status sample_metadatarownamesfactor_values
surv_datafactor1_group ifelsesurv_datafactor1 mediansurv_datafactor1
fit survfitSurvtime status factor1_group data surv_data
ggsurvplotfit data surv_data pval risk.table
ggsave width height
write.csvfactor_values
all_weights get_weightsmofa as.data.frame
write.csvall_weights row.names
cat
mixOmics DIABLO Workflow
library(mixOmics)
X <- list(
RNA = as.matrix(rna_var),
Protein = as.matrix(protein_var),
Metabolome = as.matrix(metab_var)
)
Y <- factor(sample_metadata[common_samples, 'condition'])
design <- matrix(0.1, ncol = length(X), nrow = length(X),
dimnames = list(names(X), names(X))
diagdesign
perf.diablo perfblock.splsdaX Y ncomp design design
validation folds nrepeat
ncomp perf.diablochoice.ncompWeightedVote
cat ncomp
test.keepX
RNA
Protein
Metabolome
tune.diablo tune.block.splsdaX Y ncomp ncomp test.keepX test.keepX
design design validation folds
optimal.keepX tune.diablochoice.keepX
diablo.model block.splsdaX Y ncomp ncomp
keepX optimal.keepX design design
plotIndivdiablo.model ind.names legend title
plotVardiablo.model var.names style legend
circosPlotdiablo.model cutoff line
color.blocks
cimDiablodiablo.model color.blocks
margins
perf.final perfdiablo.model validation folds nrepeat
cat perf.finalWeightedVote.error.rate
auc.diablo aurocdiablo.model roc.block roc.comp
Similarity Network Fusion (SNF)
library(SNFtool)
dist_rna <- dist2(as.matrix(rna_var), as.matrix(rna_var))
dist_protein <- dist2(as.matrix(protein_var), as.matrix(protein_var))
dist_metab <- dist2(as.matrix(metab_var), as.matrix(metab_var))
K <- 20
alpha <- 0.5
aff_rna <- affinityMatrix(dist_rna, K = K, sigma = alpha)
aff_protein <- affinityMatrix(dist_protein, K = K, sigma = alpha)
aff_metab <- affinityMatrix(dist_metab, K = K, sigma alpha
W SNFaff_rna aff_protein aff_metab K K t
clusters spectralClusteringW K
cat tableclusters
displayClustersWithHeatmapW clusters
QC Checkpoints
| Stage | Check | Action if Failed |
|---|
| Sample matching | >80% samples shared | Check sample IDs |
| Missing values | <20% per modality | Impute or remove |
| Feature variance | Features vary | Filter low variance |
| Model convergence | ELBO plateau | Increase iterations |
| Factor variance | >5% per factor | Keep fewer factors |
Workflow Variants
With Missing Samples
data_long <- rbind(
data.frame(sample = rownames(rna), view = 'RNA',
feature = colnames(rna), value = unlist(rna)),
data.frame(sample = rownames(protein), view = 'Protein',
feature = colnames(protein), value = unlist(protein))
)
mofa <- create_mofa_from_df(data_long)
Single-cell Multi-omics
library(MOFA2)
mofa <- create_mofa_from_Seurat(seurat_obj, groups = 'cell_type',
assays = c('RNA', 'ATAC'))
Related Skills
- multi-omics-integration/mofa-integration - MOFA2 details
- multi-omics-integration/mixomics-analysis - mixOmics methods
- multi-omics-integration/similarity-network - SNF method
- multi-omics-integration/data-harmonization - Preprocessing
- pathway-analysis/go-enrichment - Factor interpretation
- differential-expression/batch-correction - Batch effects