跳转至

多组学整合MOFA+详解

一句话概述:MOFA+(Multi-Omics Factor Analysis)是无监督的多组学数据整合方法,通过发现跨组学共享的隐藏因子(潜在因子)来揭示样本异质性的主要来源,适用于bulk和单细胞多模态数据。

核心知识点速查表

概念说明
MOFA+多组学因子分析(白话:找到不同组学数据之间的共同规律)
潜在因子(Factor)隐藏的变异来源(白话:幕后推手,驱动多种数据同时变化)
View每种组学数据称为一个视角(view),如RNA-seq、甲基化等
Group样本分组(如不同时间点、批次、疾病状态)
方差解释每个因子解释各view中多少方差
MEFISTOMOFA的扩展,加入时间/空间信息

一、MOFA+安装与数据准备

# === 安装 ===
BiocManager::install("MOFA2")
library(MOFA2)

# === 准备多组学数据 ===
# 每种组学数据一个矩阵: 特征(行) × 样本(列)
# 样本名必须在所有组学中一致

# 示例:基因表达 + DNA甲基化 + 蛋白质组
data_list <- list(
  "RNA" = rna_matrix,          # 基因表达矩阵 (5000 genes × 100 samples)
  "Methylation" = meth_matrix, # 甲基化矩阵 (10000 CpGs × 100 samples)
  "Protein" = prot_matrix      # 蛋白质组矩阵 (500 proteins × 100 samples)
)

# 创建MOFA对象
mofa_obj <- create_mofa(data_list)                # 从列表创建

# 查看数据概览
plot_data_overview(mofa_obj)                       # ★数据概览图

二、训练MOFA模型

# === 设置参数 ===
# 数据选项
data_opts <- get_default_data_options(mofa_obj)

# 模型选项
model_opts <- get_default_model_options(mofa_obj)
model_opts$num_factors <- 15                       # 因子数量(先设大点)

# 训练选项
train_opts <- get_default_training_options(mofa_obj)
train_opts$convergence_mode <- "slow"              # 慢但更准确
train_opts$seed <- 42                               # 随机种子

# === 准备并训练 ===
mofa_obj <- prepare_mofa(
  mofa_obj,
  data_options = data_opts,
  model_options = model_opts,
  training_options = train_opts
)

# 训练模型(需要Python的mofapy2包)
mofa_obj <- run_mofa(mofa_obj, outfile="mofa_model.hdf5")

三、下游分析与可视化

# === 方差解释分析 ===
# 每个因子解释各view中多少方差
plot_variance_explained(mofa_obj, max_r2=15)       # ★方差解释热图
plot_variance_explained(mofa_obj, plot_total=TRUE)  # 总方差解释柱状图

# 解读:
# Factor1在RNA和Protein中方差解释高 → 基因表达和蛋白质协同变化
# Factor2仅在Methylation中高 → 甲基化特异的变异

# === 因子值分析 ===
# 查看样本在各因子上的分布
plot_factor(mofa_obj, factor=1, color_by="group")   # 按分组着色
plot_factors(mofa_obj, factors=1:3, color_by="group") # 多因子散点图

# === 权重分析(哪些特征驱动因子) ===
plot_weights(mofa_obj, view="RNA", factor=1, nfeatures=20)  # 前20个基因权重
plot_top_weights(mofa_obj, view="RNA", factor=1, nfeatures=10)  # top10权重

# === 因子与临床变量的关联 ===
correlate_factors_with_covariates(mofa_obj,
  covariates = metadata[, c("age", "stage", "survival")],
  plot = "log_pval"                                   # 显示p值
)
# === 基因集富集分析 ===
# 对因子权重做富集分析,理解因子的生物学意义
library(msigdbr)
msigdb <- msigdbr(species="Homo sapiens", category="H")  # Hallmark基因集
gene_sets <- split(msigdb$gene_symbol, msigdb$gs_name)

# GSEA
enrichment <- run_enrichment(
  mofa_obj,
  view = "RNA",                  # 对RNA view做富集
  feature.sets = gene_sets,      # 基因集
  statistical.test = "parametric"
)

plot_enrichment(enrichment, factor=1, max.pathways=15)   # 可视化

四、面试高频考点

Q1: MOFA+和PCA有什么关系?

  • MOFA+可以看作PCA到多组学的推广
  • PCA:单一数据矩阵 → 主成分
  • MOFA+:多个数据矩阵 → 共享/特有因子
  • MOFA+是概率模型,能处理缺失值和不同数据类型

Q2: 多组学整合方法有哪些?

方法类型适用场景
MOFA+无监督因子分析发现异质性来源
DIABLO(mixOmics)有监督整合分类预测
iCluster+联合聚类亚型发现
SNF相似性网络融合亚型发现
MCIA多重共惯量分析探索性分析

Q3: MOFA+因子的生物学解读?

  • 看方差解释:因子在哪些view中活跃
  • 看top权重:哪些基因/CpG/蛋白驱动该因子
  • 做富集分析:因子对应什么生物过程
  • 看与临床变量的关联:因子是否与预后/分型相关

速查表

# === MOFA+速查 ===
library(MOFA2)

# 创建
mofa <- create_mofa(list(RNA=mat1, Meth=mat2, Prot=mat3))

# 训练
mofa <- prepare_mofa(mofa); mofa <- run_mofa(mofa)

# 分析
plot_variance_explained(mofa)          # 方差解释
plot_factor(mofa, factor=1)            # 因子散点图
plot_weights(mofa, view="RNA", factor=1)  # 特征权重
correlate_factors_with_covariates(mofa, covariates=meta)  # 临床关联