跳转至

853. 多组学整合策略总结

一句话概述:多组学整合 = 把基因组、转录组、蛋白组、代谢组等不同层面的数据联合分析,发现单一组学看不到的生物学规律——像从多个摄像头的画面拼出完整的监控视频。

核心知识点速查表

整合策略方法代表工具适用场景
早期整合特征拼接后联合分析直接concatenate样本量大、特征少
中期整合多组学联合降维MOFA2, mixOmics探索共变异模式
晚期整合各组学独立分析后合并结果meta分析异质性大、平台不同
基于网络构建多层分子网络WGCNA+SNF发现调控关系
深度学习端到端多模态模型MOLI, DeepOmix预测任务

一、MOFA2:无监督多组学因子分析

# MOFA2 —— 多组学因子分析(2025-2026最常用的无监督整合工具)
# 原理:从多组学数据中提取共享和特有的变异因子

# 安装MOFA2
if (!requireNamespace("MOFA2", quietly = TRUE))  # 检查是否已安装
    BiocManager::install("MOFA2")                # 从Bioconductor安装

library(MOFA2)                                   # 加载MOFA2

# 准备多组学数据
# 假设有3种组学:RNA-seq, 蛋白组, 代谢组
# 每种组学都是 特征×样本 的矩阵
data <- list(
    "RNA" = rna_matrix,          # 基因表达矩阵 (基因×样本)
    "Protein" = protein_matrix,  # 蛋白丰度矩阵 (蛋白×样本)
    "Metabolome" = metab_matrix  # 代谢物矩阵 (代谢物×样本)
)

# 创建MOFA对象
mofa_obj <- create_mofa(data)    # 创建MOFA对象

# 设置模型参数
model_opts <- get_default_model_options(mofa_obj)  # 获取默认参数
model_opts$num_factors <- 15     # 设置提取15个因子

train_opts <- get_default_training_options(mofa_obj)  # 训练参数
train_opts$seed <- 42            # 设置随机种子(可重复性)

# 训练模型
mofa_obj <- prepare_mofa(        # 准备模型
    mofa_obj,
    model_options = model_opts,
    training_options = train_opts
)
mofa_obj <- run_mofa(mofa_obj, outfile = "mofa_model.hdf5")  # 运行

# 查看因子解释的方差
plot_variance_explained(mofa_obj)  # 每个因子在每种组学中解释多少方差
# → 共享因子:在多种组学中都解释方差
# → 特有因子:只在某一种组学中活跃

# 因子与样本分组的关联
plot_factor(mofa_obj,              # 画因子值
    factor = 1,                    # 第1个因子
    color_by = "condition")        # 按实验条件着色

# 查看因子的权重(哪些特征贡献最大)
plot_weights(mofa_obj,             # 画权重
    view = "RNA",                  # 查看RNA组学
    factor = 1,                    # 第1个因子
    nfeatures = 20)                # 显示前20个特征

二、mixOmics DIABLO:有监督多组学整合

# DIABLO —— 有监督多组学整合(知道分组信息时用)
# 原理:找到在多组学中都能区分实验组的特征组合

library(mixOmics)                  # 加载mixOmics

# 准备数据(每种组学一个矩阵,行=样本,列=特征)
X <- list(
    RNA = rna_data,                # 转录组数据
    Protein = prot_data,           # 蛋白组数据
    Metabolome = metab_data        # 代谢组数据
)
Y <- factor(sample_groups)        # 样本分组(如:健康/疾病)

# 设计矩阵(控制组学间的关联强度)
design <- matrix(0.1,              # 默认关联强度0.1
    nrow = length(X),
    ncol = length(X),
    dimnames = list(names(X), names(X)))
diag(design) <- 0                 # 对角线设为0

# 调优:选择最佳特征数量
# 先运行初步模型
sgccda_result <- block.splsda(    # sparse PLS-DA
    X = X,                        # 多组学数据
    Y = Y,                        # 分组标签
    ncomp = 5,                    # 5个成分
    design = design)              # 设计矩阵

# 交叉验证选择最优参数
perf_result <- perf(sgccda_result,  # 性能评估
    validation = "Mfold",          # M折交叉验证
    folds = 5,                     # 5折
    nrepeat = 10)                  # 重复10次

# 可视化:样本图
plotIndiv(sgccda_result,           # 画样本分布
    ind.names = FALSE,             # 不显示样本名
    legend = TRUE)                 # 显示图例

# 可视化:变量关联热图
cimDiablo(sgccda_result)          # 跨组学特征关联热图

# 可视化:网络图(跨组学特征关联)
network(sgccda_result,             # 画网络
    cutoff = 0.7)                  # 相关性阈值0.7

三、2026年推荐整合策略

# 2026年多组学整合最佳实践

# 策略选择决策树:
# Q1: 有没有样本分组信息?
#   → 有分组 → 有监督方法(DIABLO, sPLS-DA)
#   → 无分组 → 无监督方法(MOFA2, JIVE)
#
# Q2: 数据规模多大?
#   → 小样本(<50) → 正则化方法(mixOmics)
#   → 大样本(>200) → 深度学习(MOLI, DeepOmix)
#
# Q3: 目标是什么?
#   → 探索性分析 → MOFA2(因子分析)
#   → 分类预测 → DIABLO(判别分析)
#   → 网络推断 → WGCNA + SNF

# 实际项目中的组合策略(2026推荐)
# 1. 先用MOFA2做无监督探索(发现数据结构)
# 2. 再用DIABLO做有监督分析(找区分特征)
# 3. 用WGCNA构建共表达网络(理解调控关系)

# SNF(相似性网络融合)示例
# 适合整合异质性大的多组学数据
from snf import snf                    # 导入SNF
import numpy as np                     # 数值计算

# 计算每种组学的样本相似性矩阵
affinities = snf.make_affinity(        # 构建亲和矩阵
    [rna_data, protein_data, metab_data],  # 3种组学
    metric='euclidean',                # 欧氏距离
    K=20,                              # 近邻数
    mu=0.5)                            # 缩放因子

# 融合多个网络
fused = snf.snf(affinities,           # 网络融合
    K=20)                              # 近邻数

# 在融合网络上做聚类
from sklearn.cluster import SpectralClustering  # 谱聚类
clusters = SpectralClustering(         # 谱聚类
    n_clusters=3,                      # 3个簇
    affinity='precomputed'             # 预计算的亲和矩阵
).fit_predict(fused)

四、通路层面整合

# GSEA + 多组学:在通路层面整合不同组学结果
# 思路:每种组学各自做通路分析,再看哪些通路在多组学中一致富集

library(clusterProfiler)              # 通路分析工具
library(org.Hs.eg.db)                 # 人类基因注释

# 对RNA-seq结果做GSEA
rna_gsea <- gseGO(                    # GO通路富集
    geneList = rna_ranked_genes,      # 排序的基因列表
    OrgDb = org.Hs.eg.db,            # 注释数据库
    ont = "BP",                       # 生物过程
    pvalueCutoff = 0.05)              # P值阈值

# 对蛋白组结果做GSEA
prot_gsea <- gseGO(
    geneList = prot_ranked_genes,     # 蛋白组排序列表
    OrgDb = org.Hs.eg.db,
    ont = "BP",
    pvalueCutoff = 0.05)

# 比较两种组学的通路结果
# 找到在RNA和蛋白组中都显著的通路
common_pathways <- intersect(         # 取交集
    rna_gsea@result$ID,               # RNA富集通路
    prot_gsea@result$ID)              # 蛋白组富集通路

# 一致富集的通路更可信(多组学交叉验证)

常见报错与解决

报错信息原因解决方法
Samples do not match多组学样本ID不一致统一样本命名,检查交集
Too few samples样本量太小减少因子数/成分数
Convergence not reachedMOFA训练未收敛增加迭代次数或减少因子数
Singular matrix特征间共线性太强先做方差过滤去除低方差特征
Memory error数据矩阵太大先做特征预筛选,减少特征维度

速查表

# 多组学整合工具选择
无监督探索:   MOFA2 (因子分析)
有监督分类:   DIABLO/mixOmics (sPLS-DA)
网络融合:     SNF (相似性网络融合)
共表达网络:   WGCNA (加权共表达网络)
通路整合:     ActivePathways, GSEA比较
深度学习:     MOLI, DeepOmix, MOGONET
可视化:       OmicNavigator, Cytoscape

# 整合策略决策
有分组 + 小样本 → mixOmics DIABLO
无分组 + 探索性 → MOFA2
异质数据 + 网络 → SNF
大样本 + 预测  → 深度学习方法

# MOFA2 关键概念
Factor: 潜在因子(类似PCA的主成分)
View:   不同组学数据(RNA/蛋白/代谢)
Group:  样本分组(可选)
Weight: 每个特征对因子的贡献

# 2026年推荐组合
MOFA2(探索) + DIABLO(分类) + 通路分析(解释)