多组学整合MOFA+详解
一句话概述:MOFA+(Multi-Omics Factor Analysis)是无监督的多组学数据整合方法,通过发现跨组学共享的隐藏因子(潜在因子)来揭示样本异质性的主要来源,适用于bulk和单细胞多模态数据。
核心知识点速查表
| 概念 | 说明 |
|---|
| MOFA+ | 多组学因子分析(白话:找到不同组学数据之间的共同规律) |
| 潜在因子(Factor) | 隐藏的变异来源(白话:幕后推手,驱动多种数据同时变化) |
| View | 每种组学数据称为一个视角(view),如RNA-seq、甲基化等 |
| Group | 样本分组(如不同时间点、批次、疾病状态) |
| 方差解释 | 每个因子解释各view中多少方差 |
| MEFISTO | MOFA的扩展,加入时间/空间信息 |
一、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) # 临床关联