蛋白组与转录组联合分析¶
一句话说明¶
蛋白组与转录组联合分析就是"把基因的RNA表达量和蛋白表达量放在一起比较"——mRNA告诉你基因"被读了多少遍",蛋白告诉你"实际做了多少产品"。两者经常不一致,正是这种不一致揭示了翻译调控等重要机制。
核心知识点¶
要点1:mRNA-蛋白相关性¶
- 整体相关性低:mRNA和蛋白的相关系数通常只有r=0.4-0.6(Pearson)
- 不一致的原因:
- 翻译效率差异:不同mRNA的翻译速率不同
- 蛋白半衰期差异:有些蛋白很稳定(几天),有些很快降解(几小时)
- 翻译后调控:miRNA抑制翻译、蛋白降解通路(泛素-蛋白酶体)
- 技术偏差:两种组学的检测灵敏度和动态范围不同
- 面试要点:这个不一致本身就是生物学信息,不是错误
要点2:联合分析策略¶
- 四象限分析:
- 第一象限(RNA↑蛋白↑):一致性上调,经典转录调控
- 第二象限(RNA↑蛋白↓):翻译抑制或蛋白降解增强
- 第三象限(RNA↓蛋白↓):一致性下调
- 第四象限(RNA↓蛋白↑):蛋白稳定性增强或翻译效率提高
- 差异基因/蛋白交集:Venn图展示两个层面共同变化的基因
- 通路层面整合:分别做富集分析,比较两个层面的通路变化
- 翻译效率推断:蛋白/mRNA比值反映翻译效率
要点3:数据匹配与标准化¶
- 基因ID映射:RNA-seq用基因名/Ensembl ID,蛋白组用UniProt ID,需要统一映射
- 对应关系:一个基因可能对应多个蛋白(剪接异构体),需要确定匹配规则
- 标准化考量:RNA-seq用TPM/FPKM,蛋白组用iBAQ/LFQ,两者不能直接比绝对值
- 取交集:只分析两个组学都检测到的基因(通常3000-6000个)
要点4:常用分析工具¶
- DESeq2/edgeR:RNA-seq差异表达
- MaxQuant/DIA-NN:蛋白组定量
- mixOmics:R包,提供多组学整合方法(PLS、DIABLO)
- MOFA+:多组学因子分析,发现跨组学的变异因子
- 绘图工具:四象限散点图、相关性热图、Sankey图
实战代码¶
# === 转录组-蛋白组联合分析 ===
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr, spearmanr
# 1. 读取两组学数据
rna = pd.read_csv("rnaseq_log2fc.csv", index_col=0) # RNA-seq差异结果
protein = pd.read_csv("proteomics_log2fc.csv", index_col=0) # 蛋白组差异结果
# 2. 基因ID映射和取交集
# 假设两者都用基因名(Gene Symbol)作为index
common_genes = rna.index.intersection(protein.index) # 取交集
print(f"RNA检测基因: {len(rna)}, 蛋白检测: {len(protein)}, 交集: {len(common_genes)}")
rna_common = rna.loc[common_genes, "log2FC"]
protein_common = protein.loc[common_genes, "log2FC"]
# 3. 计算整体相关性
r_pearson, p_pearson = pearsonr(rna_common, protein_common)
r_spearman, p_spearman = spearmanr(rna_common, protein_common)
print(f"Pearson r = {r_pearson:.3f} (p={p_pearson:.2e})")
print(f"Spearman rho = {r_spearman:.3f} (p={p_spearman:.2e})")
# 4. 四象限散点图
fig, ax = plt.subplots(figsize=(10, 10))
# 定义四象限颜色
colors = []
for rna_fc, prot_fc in zip(rna_common, protein_common):
if rna_fc > 0 and prot_fc > 0:
colors.append("red") # RNA↑ 蛋白↑
elif rna_fc > 0 and prot_fc < 0:
colors.append("blue") # RNA↑ 蛋白↓ (翻译抑制)
elif rna_fc < 0 and prot_fc < 0:
colors.append("green") # RNA↓ 蛋白↓
else:
colors.append("orange") # RNA↓ 蛋白↑ (蛋白稳定)
ax.scatter(rna_common, protein_common, c=colors, alpha=0.5, s=15)
ax.axhline(0, color="gray", linestyle="--", linewidth=0.5)
ax.axvline(0, color="gray", linestyle="--", linewidth=0.5)
ax.set_xlabel("RNA log2FC", fontsize=12)
ax.set_ylabel("Protein log2FC", fontsize=12)
ax.set_title(f"Transcriptome vs Proteome (r={r_pearson:.3f})", fontsize=14)
# 标注四象限基因数
q1 = sum(1 for c in colors if c == "red")
q2 = sum(1 for c in colors if c == "blue")
q3 = sum(1 for c in colors if c == "green")
q4 = sum(1 for c in colors if c == "orange")
ax.text(0.8, 0.95, f"Q1(↑↑): {q1}", transform=ax.transAxes, color="red")
ax.text(0.8, 0.90, f"Q2(↑↓): {q2}", transform=ax.transAxes, color="blue")
ax.text(0.05, 0.05, f"Q3(↓↓): {q3}", transform=ax.transAxes, color="green")
ax.text(0.05, 0.10, f"Q4(↓↑): {q4}", transform=ax.transAxes, color="orange")
plt.savefig("rna_protein_quadrant.png", dpi=150, bbox_inches="tight")
# 5. 翻译效率分析
# 翻译效率 = 蛋白丰度 / mRNA丰度(取log后做差)
translation_eff = protein_common - rna_common # log2(蛋白/mRNA)
top_te = translation_eff.nlargest(20) # 翻译效率最高的20个基因
bottom_te = translation_eff.nsmallest(20) # 翻译效率最低的20个基因
print("翻译效率最高的基因:", top_te.index.tolist()[:5])
面试常问点¶
Q1: mRNA和蛋白表达为什么不一致?¶
参考答案:主要有四个原因:一是翻译效率不同,有些mRNA有特殊的5'UTR结构或uORF,影响核糖体装载效率;二是蛋白半衰期不同,有些蛋白(如结构蛋白)很稳定可以累积,有些(如信号蛋白)很快被降解;三是翻译后调控,miRNA可以抑制翻译,泛素-蛋白酶体系统可以降解蛋白;四是技术因素,两种组学的检测灵敏度和偏好不同。这种不一致本身就是重要的生物学信息。
Q2: 联合分析中四象限图中"RNA上调但蛋白下调"(Q2)的基因有什么生物学意义?¶
参考答案:这类基因可能受到翻译层面的负调控。可能的原因包括:miRNA介导的翻译抑制(mRNA在但蛋白被压制)、蛋白被泛素化快速降解、蛋白折叠出问题被内质网质量控制清除。这类基因值得深入研究,因为它们揭示了转录之外的调控层。可以进一步查看这些基因是否富集在某些信号通路,以及是否有已知的miRNA靶点。
速查卡片¶
| 问题 | 一句话答案 |
|---|---|
| mRNA与蛋白相关性通常多高? | Pearson r ≈ 0.4-0.6 |
| 不一致的主要原因? | 翻译效率差异、蛋白半衰期差异、翻译后调控 |
| 四象限图横纵轴? | 横轴=RNA log2FC,纵轴=蛋白log2FC |
| 翻译效率怎么算? | log2(蛋白丰度) - log2(mRNA丰度) |
| 多组学整合工具? | mixOmics(R), MOFA+ |
| 交集基因通常多少? | 3000-6000个(取决于检测深度) |