08 与转录组联合分析
08 与转录组联合分析
蛋白丰度和 mRNA 丰度的相关性其实没有想象中高(典型相关系数 0.3-0.6)。这种不一致本身就是信息:同时有转录组和蛋白组数据时,比较两者能识别"翻译/降解层面被调控"的基因,是单一数据无法看到的故事。
为什么相关性不高
| 原因 | 说明 |
|---|---|
| mRNA 半衰期短,蛋白稳定 | 同一时刻"流量"和"存量"测的是不同东西 |
| 翻译效率不同 | 5'UTR、CDS 长度、密码子偏好 |
| 蛋白降解动态 | 泛素化标记、自噬清除 |
| 检测灵敏度差 | 高丰度蛋白容易测,低丰度的 mRNA 反而灵敏 |
所以相关性低不是"数据有问题",是真实的生物学层级。
数据对齐:两份矩阵的统一坐标
转录组的基因 ID 通常是 ENSEMBL,蛋白组多用 UniProt。先映射到 gene symbol 作为公共坐标:
library(biomaRt)
library(dplyr)
mart <- useMart("ensembl", dataset = "hsapiens_gene_ensembl")
# RNA: ENSG -> SYMBOL
rna_map <- getBM(c("ensembl_gene_id", "hgnc_symbol"),
filters = "ensembl_gene_id",
values = rownames(rna_mat),
mart = mart)
# Protein: UniProt -> SYMBOL
prot_map <- getBM(c("uniprotswissprot", "hgnc_symbol"),
filters = "uniprotswissprot",
values = rownames(prot_mat),
mart = mart)
# 同时存在的基因
common <- intersect(rna_map$hgnc_symbol, prot_map$hgnc_symbol)
common <- common[common != ""]
相关性图:每个基因一对点
最直观的图:把每个基因的 mRNA logFC 和 protein logFC 画散点。同向变化的落在 y=x 附近,异向的偏离对角线。
library(ggplot2)
joint <- data.frame(
gene = common,
rna_logFC = rna_de[common, "logFC"],
prot_logFC = prot_de[common, "logFC"],
rna_padj = rna_de[common, "padj"],
prot_padj = prot_de[common, "padj"]
)
joint$category <- with(joint, case_when(
rna_padj < 0.05 & prot_padj < 0.05 & sign(rna_logFC) == sign(prot_logFC) ~ "一致变化",
rna_padj < 0.05 & prot_padj < 0.05 & sign(rna_logFC) != sign(prot_logFC) ~ "反向变化",
rna_padj < 0.05 & prot_padj >= 0.05 ~ "仅 RNA",
rna_padj >= 0.05 & prot_padj < 0.05 ~ "仅蛋白",
TRUE ~ "无显著"
))
ggplot(joint, aes(rna_logFC, prot_logFC, color = category)) +
geom_point(alpha = 0.6, size = 1) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "grey60") +
geom_hline(yintercept = 0, linetype = "dotted", color = "grey60") +
geom_vline(xintercept = 0, linetype = "dotted", color = "grey60") +
scale_color_manual(values = c("一致变化" = "#10b981",
"反向变化" = "#f59e0b",
"仅 RNA" = "#2563eb",
"仅蛋白" = "#dc2626",
"无显著" = "grey80")) +
labs(x = "mRNA log2FC", y = "Protein log2FC") +
theme_classic()
四种类别各代表不同的生物学:
- 一致变化:转录控制为主
- 反向变化:翻译/降解强烈反向调控(少见但重要)
- 仅 RNA:转录起来了但还没翻译,或蛋白半衰期长来不及响应
- 仅蛋白:稳态层面翻译效率或降解被调控
翻译效率(TE)估计
如果有同样本的核糖体 profiling 数据(Ribo-seq)就能直接算 TE = ribosome footprints / mRNA。没有的话,蛋白丰度 / mRNA 丰度可以作为"稳态翻译效率"的近似:
te <- prot_logFC - rna_logFC # 注意:log 空间下相减 = 比值
joint$te <- te
ggplot(joint, aes(reorder(gene, te), te)) +
geom_col(aes(fill = te > 0)) +
coord_flip() +
labs(x = "", y = "Protein/RNA ratio change (log2)")
TE 显著上升的基因往往是被 mTOR、eIF 等翻译因子调控的核心节点。
多组学整合方法(跨多种数据类型)
如果再加上代谢组、磷酸化等数据,简单散点不够用。常见整合方法:
| 方法 | 适用 | R 包 |
|---|---|---|
| MOFA+ | 找跨组学共同变化的因子 | MOFA2 |
| DIABLO | 监督学习,做分类 | mixOmics |
| MultiAssayExperiment | 数据结构容器 | MultiAssayExperiment |
MOFA 是无监督的,给一个隐变量空间,每个 factor 在各组学的 loading 表示"这个因子在 RNA / 蛋白 / 代谢组里分别由哪些 feature 支配"。
library(MOFA2)
mofa <- create_mofa(list(RNA = rna_mat, Protein = prot_mat))
mofa <- prepare_mofa(mofa,
data_options = list(scale_views = TRUE),
model_options = list(num_factors = 10),
training_options = list(seed = 42)
)
mofa <- run_mofa(mofa, save_data = FALSE)
plot_variance_explained(mofa)
plot_factor(mofa, factors = 1:3)
报告里要交代
- 数据来自同样本还是不同样本(影响相关性解读)
- ID 映射的版本(biomaRt / ENSEMBL release 号)
- 一致变化/仅蛋白/仅 RNA 各有多少
- 翻译效率改变的 top 基因
常见坑
坑 1:看到 RNA-protein 不一致就说"翻译调控"
相关性低的原因很多:时间延迟(mRNA 先变,蛋白 12-48 小时后才跟上)、蛋白半衰期长、检测灵敏度差异。不能看到散点图偏离对角线就下"翻译后调控"的结论。需要排除时间因素(同一时间点的样本)和技术因素(蛋白检测灵敏度)后才能讨论生物学机制。
坑 2:ID 映射版本不一致导致假"不一致"
RNA-seq 用 Ensembl release 105 的 gene symbol,蛋白组用 UniProt 2024 版映射。两个版本对同一个蛋白的 symbol 可能不同(比如历史上改过名的基因)。这会让本来一致的变化因为 ID 对不上而被误判为"仅 RNA"或"仅蛋白"。
坑 3:只看单基因 logFC 散点忽略了统计不确定性
RNA logFC = 2(padj = 0.001)和 protein logFC = 0.5(padj = 0.3),画在散点图上看起来"不一致",但蛋白的 logFC 置信区间可能包含 2。不显著不代表真的没变化,可能只是检测力不够。建议用颜色区分"双层显著""单层显著""都不显著"。
坑 4:翻译效率(TE)的近似估计被当作精确值
protein logFC - RNA logFC 作为 TE 变化的近似,假设蛋白降解速率不变且两层定量误差独立。但蛋白降解是动态的,这个近似在稳态改变剧烈时(如应激响应)会失效。只有 Ribo-seq 数据才能真正量化翻译效率。
下一步
接着深入:
- 多组学整合实践教程 — 系统化的多组学整合方法
- 多组学整合 05 MOFA2 — 用 MOFA 同时建模 RNA 和蛋白层
横向延伸:
- 蛋白质组 05 缺失值策略 — 蛋白层缺失值对联合分析的影响
- 蛋白质组 03 功能富集 — 对"仅蛋白"差异蛋白做通路富集
参考资源
- Liu 等的综述:"On the dependency of cellular protein levels on mRNA abundance"(Cell 2016)
- MOFA2 文档:biofam.github.io/MOFA2
- mixOmics 教程:DIABLO 与多块整合