蛋白质组学实践教程
蛋白质组学实践教程
转录组告诉你哪些基因被转录,蛋白质组告诉你哪些蛋白真的被翻译、它们的丰度如何、以及是否被修饰。质谱是目前最常用的蛋白组测量手段:样本酶解后肽段上机,仪器给出质荷比和强度,数据库比对后得到蛋白身份和定量值。
做过转录组分析的读者上手蛋白组往往会遇到两个反差:数据维度小(几千个蛋白 vs 几万个基因)、缺失值多(某些蛋白在部分样本根本没测到)。因此思路上 bulk RNA-seq 的很多经验可以复用,但预处理和统计模型要调整。
本专栏假设原始质谱数据已经由 MaxQuant、FragPipe、DIA-NN、Spectronaut 等工具处理好,起点是一份带强度或 LFQ 值的蛋白表。
一个项目大致是什么样子
给你 20 个样本的 MaxQuant proteinGroups.txt 或 DIA-NN report.pg_matrix.tsv,从这里到一张能写进论文的差异蛋白结果,大致要走:
| 步骤 | 典型产物 | 常用工具 |
|---|---|---|
| 结果表清洗 | 去除污染、反向库、仅 1 肽识别的蛋白 | R,dplyr |
| 缺失值评估 | 每个样本缺失率分布 | naniar、VIM |
| 缺失值插补 | 完整的强度矩阵 | MinProb、KNN、DEP |
| 归一化 | 按中位数 / 中位线对齐 | DEP、limma 的 normalizeBetweenArrays |
| 批次效应检查 | PCA、样本相关性 | ggplot2、ComplexHeatmap |
| 差异蛋白分析 | 差异蛋白表 | limma、DEP、MSstats |
| 功能富集 | GO、Reactome、pathway 结果 | clusterProfiler、ReactomePA |
| 相互作用与网络 | 蛋白-蛋白互作图 | STRING、Cytoscape |
MaxQuant 和 FragPipe 是 DDA 的两条主流选择,DIA-NN 和 Spectronaut 面向 DIA 实验。处理好后的结果表在字段名上有差异,但后续的差异分析和富集分析可以共用。
常见工具栈
差异分析这一段,limma 仍然是最稳的选择,因为它对样本量小、噪音大、存在技术重复的实验设计非常友好。DEP 在 limma 之上包了一层适合蛋白组的数据流程,适合初学者。
| 阶段 | 工具 | 运行环境 |
|---|---|---|
| 原始数据处理 | MaxQuant、FragPipe、DIA-NN、Spectronaut | GUI / bash |
| 数据读取 | MSnbase、QFeatures、DEP | R |
| 缺失值处理 | DEP、imputeLCMD | R |
| 差异分析 | limma、DEP、MSstats | R |
| 功能注释 | clusterProfiler、ReactomePA | R |
| 蛋白互作 | STRING 网页、STRINGdb、Cytoscape | R / 网页 |
| 可视化 | ggplot2、ComplexHeatmap、EnhancedVolcano | R |
推荐公开数据集
蛋白组的公开数据比转录组少,但以下几个入口能覆盖大多数教学需求:
| 数据集 | 类型 | 适合 | 入口 |
|---|---|---|---|
| PRIDE 数据集 | 各种质谱项目 | 找到文献配套原始/结果 | PRIDE |
| MassIVE | 各种质谱项目 | 北美研究为主 | MassIVE |
DEP 包 UbiLength |
8 样本泛素化实验 | 差异分析最小入门数据 | DEP Bioconductor |
| CPTAC | 癌症蛋白组 + 表型 | 多组学整合练习 | CPTAC |
DEP 包自带的 UbiLength 数据是 HeLa 细胞不同处理时间的泛素化组实验,8 个样本、大约 2700 个蛋白,规模合适教学,下面的最小例子也基于它。
最小可跑的例子
这段代码基于 DEP 包自带的真实数据。安装好包后能直接运行完成:"读入 → 过滤 → 归一化 → 插补 → 差异分析 → 可视化" 一条链路:
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install("DEP")
library(DEP)
# 自带真实数据:UbiLength MaxQuant 结果
data <- UbiLength
experimental_design <- UbiLength_ExpDesign
# 清洗:去除污染蛋白、反向库匹配、仅 1 肽鉴定的蛋白
data_unique <- make_unique(data, "Gene.names", "Protein.IDs", delim = ";")
data_se <- make_se(data_unique, grep("LFQ.", colnames(data_unique)), experimental_design)
# 过滤:每组至少两个样本里被测到
data_filt <- filter_missval(data_se, thr = 0)
# 归一化 + 缺失值插补
data_norm <- normalize_vsn(data_filt)
data_imp <- impute(data_norm, fun = "MinProb", q = 0.01)
# 差异分析(limma 后端)
data_diff <- test_diff(data_imp, type = "control", control = "Ctrl")
dep <- add_rejections(data_diff, alpha = 0.05, lfc = 1)
# 火山图
plot_volcano(dep, contrast = "Ubi6_vs_Ctrl", label_size = 2, add_names = TRUE)
跑完后得到的是一张火山图,横轴是 log2 fold change,纵轴是 -log10(p)。被标注出来的蛋白就是这组对比下显著差异的候选,可以再去做富集分析或文献查证。
真实项目里有几件事比这段复杂:样本分组更多、协变量要纳入模型、DIA 数据的插补策略不同、要输出 MSstats 报告等等,但起步的框架就是这样。
专栏模块规划
| 模块 | 主题 | 状态 |
|---|---|---|
| 01 | 质谱结果表格式与实验设计 | 已上线 |
| 02 | DEP 差异蛋白分析 | 已上线 |
| 03 | 功能富集与 Reactome 通路 | 已上线 |
| 04 | 可视化:火山图、热图与蛋白互作 | 已上线 |
| 05 | limma 直接建模(不用 DEP 包装) | 规划中 |
| 06 | DIA 数据的处理差异 | 规划中 |
| 07 | STRING 与蛋白互作网络 | 规划中 |
| 08 | 转录组与蛋白组联合分析 | 规划中 |
目前 01-04 已上线,每个模块带一份可直接跑的 R 脚本。
推荐前置知识
- 编程基础:R、Python、Bash 学习路径
- R 数据整理与 ggplot2 可视化
- bulk RNA-seq 实践教程(差异分析思路有很多共通点)