MOFA 简介
很多人都问我:“多组学数据堆在一起,我该用什么方法去整合?”我记得几年前第一次面对转录组+蛋白质组+代谢组的联合数据时,差点被维度淹死。后来我接触到 MOFA,才觉得这条路打通了。
说白了,MOFA 就是一款能帮你从多组学数据里“揪出”共享和特有结构的因子分析工具。你想想看,每个组学都有自己的噪音和异质性,但生物机制往往是跨组学协同的。MOFA 就负责把那些共同变化的信号拆解成几个可解释的因子。
什么是 MOFA?
MOFA 全称 Multi-Omics Factor Analysis,我习惯把它理解成“多组学版的 PCA”。但它比 PCA 聪明的地方在于:它能处理不同组学之间的数据缺失、尺度差异和噪音结构。我不止一次在项目里遇到这样的场景——转录组有 20000 个基因,蛋白质组只测了 5000 个蛋白,而且两个数据集的样本还不完全重叠。传统 PCA 一跑就报错,MOFA 却可以优雅地收敛。
核心公式(简化理解)
对一个数据矩阵 X (样本 × 特征),MOFA 建模为:
对一个数据矩阵 X (样本 × 特征),MOFA 建模为:
X = Z · W + ε
其中 Z 是共享因子得分(样本 × 因子数),W 是因子载荷(因子数 × 特征数),ε 是噪音。不同组学共享同一套 Z,但各自有自己的 W 和 ε。MOFA 的应用场景
说实话,MOFA 最让我惊艳的不是它的数学,而是它在“真实世界”数据中的韧性。我总结了几类我亲手踩过的场景:
- 肿瘤多组学整合:同时输入突变、拷贝数、甲基化、转录组和蛋白质组,找出驱动因子。我曾在肺癌项目里用 MOFA 发现了一个与免疫微环境高度相关的共享因子。
- 发育/分化时序分析:不同时间点的 RNA-seq 和 ATAC-seq 联合,提取时序模式。
- 微生物-宿主互作:宏基因组与代谢组配对,拆解微生物群对代谢物的影响。
- 跨平台批次校正:当同一个组学用不同平台测量时,MOFA 可以建模平台相关的因子。
| 场景 | 传统方法痛点 | MOFA 的优势 |
|---|---|---|
| 多组学缺失样本 | 需要完整配对数据 | 支持部分缺失,自动处理 |
| 组学尺度差异大 | 标准化后仍难统一 | 自动建模各自噪音 |
| 想要分离共享 vs 特有信号 | 通常只给出一个全局降维 | 显式拆分成因子载荷 |
| 结果可解释性 | 主成分意义模糊 | 因子与生物通路直接关联 |
MOFA 的核心流程
我把 MOFA 的经典工作流画成了一张图,你跟着这个顺序理解基本就通了。
MOFA 的优势总结
我个人觉得 MOFA 在三个点上非常实用:
- 天然处理缺失数据 —— 我之前接手过一个项目,蛋白质组只测了 30% 的样本,其他组学都是全测。MOFA 利用因子结构自动补全缺失,不需要你插值或删样本。
- 因子可解释性很强 —— 每个因子对应一组基因/蛋白/代谢物的共表达模块,直接做通路富集就能看出生物学意义。嗯,这里要注意:因子数需要基于方差解释率曲线和交叉验证选择,不要贪多。
- 支持分层/分组结构 —— 如果你有多个条件(比如正常 vs 肿瘤),MOFA 可以建模条件特异因子。这个特性我在临床队列里用过,效果比全局因子更灵敏。
一个我踩过的坑
我曾经在整合单细胞转录组和批量蛋白质组时,没有对组学数据做合适的方差稳定变换。结果 MOFA 的第一个因子几乎全是蛋白质组的信号——因为原始值量级差异太大。后来我先对每个组学做对数标准化和方差缩放,因子才真正反映了生物协同变化。
我曾经在整合单细胞转录组和批量蛋白质组时,没有对组学数据做合适的方差稳定变换。结果 MOFA 的第一个因子几乎全是蛋白质组的信号——因为原始值量级差异太大。后来我先对每个组学做对数标准化和方差缩放,因子才真正反映了生物协同变化。
实用建议
在运行 MOFA 之前,建议先做一步“组学内部降维”:对高维组学(如转录组)用 PCA 压缩到前 500~1000 个主成分,再输入给 MOFA。这样既能保留主要变异,又能大幅减少计算时间。我一般写个简单的预处理脚本:
在运行 MOFA 之前,建议先做一步“组学内部降维”:对高维组学(如转录组)用 PCA 压缩到前 500~1000 个主成分,再输入给 MOFA。这样既能保留主要变异,又能大幅减少计算时间。我一般写个简单的预处理脚本:
import pandas as pd
from sklearn.decomposition import PCA
rna = pd.read_csv('rna.csv', index_col=0)
pca = PCA(n_components=500)
rna_pca = pca.fit_transform(rna.T) # 样本 × PC
# 再将 rna_pca 与其他组学合并,喂给 MOFA
注意事项
MOFA 对因子数的选择比较敏感。我习惯用训练集-验证集拆分来做:先设 15 个因子,用 5 折交叉验证看验证集似然值,选择衰减趋缓的点。不要只看训练集拟合,容易过拟合。
MOFA 对因子数的选择比较敏感。我习惯用训练集-验证集拆分来做:先设 15 个因子,用 5 折交叉验证看验证集似然值,选择衰减趋缓的点。不要只看训练集拟合,容易过拟合。
说到底,MOFA 不是魔法,但它给了你一个结构化的视角去看多组学数据。当你面对一大堆不同格式、不同尺度的表格时,MOFA 就像一把瑞士军刀——能切、能拧、能撬,关键还不会弄丢你手里的材料。我个人用下来,最痛快的一点是:它的结果可以直接放进论文里的热图和网络图,评审一眼就能看懂。