Getting Started with MOFSR

Introduction

MOFSR (Multi-Omics Fusion for Subtype Recognition) is a comprehensive R package for integrative analysis of multi-omics data. The package provides:

  • 15 multi-omics clustering algorithms with internal implementations
  • 17 classification methods for subtype prediction
  • Comprehensive visualization tools
  • Parallel computing support for large-scale analyses

Installation

# From R-Universe (Recommended)
install.packages("MOFSR", repos = "https://zaoqu-liu.r-universe.dev")

# From GitHub
remotes::install_github("Zaoqu-Liu/MOFSR")

Quick Start

Generate Simulated Multi-Omics Data

library(MOFSR)
set.seed(42)

# Simulate three-omics data with 3 subtypes
n_samples <- 60
n_features <- c(500, 200, 100)  # mRNA, miRNA, methylation

# Generate cluster labels
true_clusters <- rep(1:3, each = 20)

# Generate data with cluster structure
generate_omics <- function(n, p, clusters) {
  n_clusters <- length(unique(clusters))
  centers <- matrix(rnorm(n_clusters * p, sd = 2), n_clusters, p)
  data <- t(sapply(clusters, function(k) {
    centers[k, ] + rnorm(p, sd = 1)
  }))
  colnames(data) <- paste0("Feature_", seq_len(p))
  rownames(data) <- paste0("Sample_", seq_len(n))
  return(t(data))  # Return features x samples
}

data_list <- list(
  mRNA = generate_omics(n_samples, n_features[1], true_clusters),
  miRNA = generate_omics(n_samples, n_features[2], true_clusters),
  methylation = generate_omics(n_samples, n_features[3], true_clusters)
)

cat("Data dimensions:\n")
sapply(data_list, dim)

Run SNF Clustering

# Run Similarity Network Fusion
result_snf <- run_snf(data_list, n_clusters = 3)

# View results
head(result_snf)

# Calculate Adjusted Rand Index
ari <- .adjusted_rand_index(result_snf$Cluster, true_clusters)
cat("\nAdjusted Rand Index (SNF):", round(ari, 4))

UMAP Visualization

# Compute UMAP coordinates
umap_coords <- compute_umap(data_list, n_epochs = 100, seed = 42)

# Plot with cluster colors
plot_umap(umap_coords, result_snf, title = "SNF Clustering Results")

Compare Multiple Algorithms

# Run multiple algorithms
algorithms <- c("SNF", "RGCCA", "CPCA")

results <- lapply(algorithms, function(alg) {
  run_integration(data_list, algorithm = alg, n_clusters = 3)
})
names(results) <- algorithms

# Compare clustering agreement
ari_matrix <- compare_clusterings(results)
print(round(ari_matrix, 3))
plot_algorithm_comparison(results, title = "Algorithm Agreement (ARI)")

Consensus Clustering

# Run consensus clustering on mRNA data
cc_result <- consensus_cluster(data_list$mRNA, maxK = 5, reps = 50, seed = 42)

# Plot consensus heatmap for K=3
plot_consensus_heatmap(cc_result[[3]]$consensusMatrix, 
                       title = "Consensus Matrix (K=3)")
# Calculate PAC for optimal K selection
pac_values <- calc_pac(cc_result)
print(pac_values)

# Plot quality metrics
plot_cluster_quality(pac_values, title = "Cluster Quality (PAC)")

Data Preprocessing

# Normalize data
data_norm <- normalize_omics(data_list, method = "zscore")

# Filter low-variance features
data_filtered <- filter_low_variance(data_list, min_var = 0.01)

# Quality control summary
qc <- qc_summary(data_list)
print(qc)

Session Info

sessionInfo()