| name | bio-multi-omics-mofa-integration |
| description | Multi-Omics Factor Analysis (MOFA2) for unsupervised integration of multiple data modalities. Identifies shared and view-specific sources of variation. Use when integrating RNA-seq, proteomics, methylation, or other omics to discover latent factors driving biological variation across modalities. |
| tool_type | r |
| primary_tool | MOFA2 |
MOFA2 Integration
Prepare Multi-Omics Data
library(MOFA2)
library(MultiAssayExperiment)
rna <- as.matrix(read.csv('rnaseq_matrix.csv', row.names = 1))
protein <- as.matrix(read.csv('proteomics_matrix.csv', row.names = 1))
methylation <- as.matrix(read.csv('methylation_matrix.csv', row.names = 1))
common_samples <- Reduce(intersect, list(rownames(rna), rownames(protein), rownames(methylation)))
rna <- rna[common_samples, ]
protein <- protein[common_samples, ]
methylation <- methylation[common_samples, ]
data_list <- list(
RNA = t(rna),
Protein = t(protein),
Methylation = t(methylation)
)
Create and Train MOFA Model
mofa <- create_mofa(data_list)
plot_data_overview(mofa)
model_opts <- get_default_model_options(mofa)
model_opts$num_factors <- 15
train_opts <- get_default_training_options(mofa)
train_opts$convergence_mode <- 'slow'
train_opts$seed <- 42
mofa <- prepare_mofa(mofa, model_options = model_opts, training_options = train_opts)
mofa <- run_mofa(mofa, outfile = 'mofa_model.hdf5')
Analyze Factors
plot_variance_explained(mofa, max_r2 = 15)
plot_variance_explained(mofa, plot_total = TRUE)[[2]]
factors <- get_factors(mofa, as.data.frame = TRUE)
weights <- get_weights(mofa, as.data.frame = TRUE)
Visualize Results
plot_factor(mofa, factor = 1, color_by = 'Group')
plot_weights(mofa, view = 'RNA', factor = 1, nfeatures = 20)
plot_top_weights(mofa, view = 'RNA', factor = 1, nfeatures = 10)
plot_factor_cor(mofa)
Factor Interpretation
top_rna_factor1 <- get_weights(mofa, views = 'RNA', factors = 1, as.data.frame = TRUE)
top_rna_factor1 <- top_rna_factor1[order(abs(top_rna_factor1$value), decreasing = TRUE), ]
gene_list <- head(top_rna_factor1$feature, 100)
library(MOFA2)
enrichment <- run_enrichment(mofa, feature.sets = msigdb_genesets,
view = 'RNA', factors = 1:5)
plot_enrichment(enrichment, factor = 1, max.pathways =
Add Sample Metadata
metadata <- read.csv('sample_metadata.csv', row.names = 1)
samples_metadata(mofa) <- metadata[samples_names(mofa)[[1]], ]
plot_factor(mofa, factor = 1, color_by = 'Condition')
plot_factors(mofa, factors = 1:3, color_by = 'Condition')
Multi-Group MOFA
data_list_grouped <- list(
group1 = list(RNA = rna_g1, Protein = prot_g1),
group2 = list(RNA = rna_g2, Protein = prot_g2)
)
mofa_grouped <- create_mofa(data_list_grouped)
mofa_grouped <- prepare_mofa(mofa_grouped)
mofa_grouped <- run_mofa(mofa_grouped)
plot_factor(mofa_grouped, factor = 1, group_by = 'group', color_by = 'group')
MOFA+ for Single-Cell
library(Seurat)
rna_mat <- GetAssayData(seurat_obj, assay = 'RNA', layer = 'data')
adt_mat <- GetAssayData(seurat_obj, assay = 'ADT', layer = 'data')
mofa_sc <- create_mofa(list(RNA = rna_mat, ADT = adt_mat))
model_opts <- get_default_model_options(mofa_sc)
model_opts$num_factors <- 10
train_opts <- get_default_training_options(mofa_sc)
train_opts$stochastic <- TRUE
Export Results
factors_df <- get_factors(mofa, as.data.frame = TRUE)
write.csv(factors_df, 'mofa_factors.csv', row.names = FALSE)
weights_df <- get_weights(mofa, as.data.frame = TRUE)
write.csv(weights_df, 'mofa_weights.csv', row.names = FALSE)
var_exp <- get_variance_explained(mofa)
write.csv(var_exp$r2_per_factor, 'mofa_variance_explained.csv')
Related Skills
- mixomics-analysis - Supervised multi-omics integration
- data-harmonization - Preprocess data before MOFA
- pathway-analysis/go-enrichment - Interpret MOFA factors
- single-cell/multimodal-integration - Single-cell multi-omics