蛋白质组TMT标记定量¶
一句话概述¶
基于串联质量标签(TMT/iTRAQ)的多重标记定量蛋白组学分析全流程——从质谱原始数据经MaxQuant/MSFragger搜库,到蛋白定量、归一化、差异表达和功能富集分析。
核心知识点总览¶
| 知识点 | 关键内容 | 重要程度 |
|---|---|---|
| TMT/iTRAQ原理 | 等压标签/MS2报告离子定量 | ⭐⭐⭐⭐⭐ |
| MaxQuant搜库 | Andromeda引擎/蛋白鉴定 | ⭐⭐⭐⭐⭐ |
| MSFragger/FragPipe | 超快搜索/开放搜索 | ⭐⭐⭐⭐⭐ |
| 定量归一化 | 批次效应/通道泄漏校正 | ⭐⭐⭐⭐ |
| 差异蛋白分析 | limma/MSstats统计检验 | ⭐⭐⭐⭐ |
| 比值压缩(ratio compression) | MS2 vs MS3对定量精度影响 | ⭐⭐⭐ |
| 多重TMT实验整合 | 桥接通道/参考通道策略 | ⭐⭐⭐ |
| 下游功能分析 | GO/KEGG/蛋白互作网络 | ⭐⭐⭐ |
各步骤详解¶
第一步:TMT定量蛋白组学原理¶
白话解释: TMT是一种多重标记技术——把不同样本的蛋白用不同"颜色"的标签标记(TMT6plex: 6色,TMT16plex: 16色),然后混合在一起同时质谱分析。标签设计巧妙:在MS1水平所有标签质量相同(等压),但在MS2碎裂后产生不同质量的"报告离子",通过报告离子的强度比较各样本中蛋白的相对含量。
技术细节: TMT标签结构:Reporter(质量不同) + Balancer(补偿质量) + Reactive group(与肽段氨基连接)
定量层级: - MS2定量:标准方法,报告离子在MS2谱中,有"比值压缩"问题 - MS3/SPS-MS3定量:选取MS2碎片离子再碎裂,减少co-isolation干扰,定量更准确但灵敏度降低
# TMTpro 16plex报告离子质量(m/z)——注意TMTpro与经典TMT不同
# 126.127726, 127.124761, 127.131081, 128.128116
# 128.134436, 129.131471, 129.137790, 130.134825
# 130.141145, 131.138180, 131.144500, 132.141535
# 132.147855, 133.144890, 133.151210, 134.148245
# 实验设计示例(TMT16plex)
# Channel 126: Sample_Control_1
# Channel 127N: Sample_Control_2
# Channel 127C: Sample_Control_3
# Channel 128N: Sample_Treatment_1
# ...
# Channel 134: Pool Reference (混合样本作为参考)
第二步:MaxQuant搜库分析¶
白话解释: MaxQuant是蛋白质组学最常用的数据分析软件。它把质谱产生的碎片谱图与蛋白序列数据库比对,鉴定出是哪些蛋白的哪些肽段,然后从报告离子的信号强度中提取定量信息。
技术细节:
# === MaxQuant 参数设置(TMT) ===
# 在MaxQuant GUI或mqpar.xml中设置:
# 1. 搜库参数
# Database: UniProt Human reviewed (Swiss-Prot)
# Enzyme: Trypsin/P
# Max missed cleavages: 2
# Fixed modifications: Carbamidomethyl (C)
# Variable modifications: Oxidation (M), Acetyl (Protein N-term)
# 2. TMT标记设置
# Type: Reporter ion MS2 (或 MS3)
# Label: TMT16plex
# Reporter mass tolerance: 0.003 Da
# 3. FDR控制
# Peptide FDR: 0.01
# Protein FDR: 0.01
# Site FDR: 0.01
# 4. 定量设置
# Min ratio count: 2
# Match between runs: Yes (同实验批次)
# 5. 命令行运行(Linux)
mono MaxQuantCmd.exe mqpar.xml
# === MSFragger/FragPipe 搜库(更快)===
# FragPipe是包含MSFragger的GUI/CLI工具
# MSFragger速度比MaxQuant快10-100倍
# 使用fragpipe命令行
fragpipe --headless \
--workflow TMT16 \
--manifest manifest.fp-manifest \
--output-dir fragpipe_output \
--ram 32 \
--threads 16
# manifest文件格式(指定raw文件和实验分组):
# /path/to/file1.raw experiment1 biorep1 1
# /path/to/file2.raw experiment1 biorep2 1
# FragPipe TMT工作流包含:
# MSFragger搜库 → Philosopher过滤 → TMT-Integrator定量
第三步:数据预处理与归一化¶
白话解释: MaxQuant/FragPipe输出的原始定量值还不能直接用于统计分析。需要进行质控过滤(去除污染蛋白、低质量鉴定)、缺失值处理、归一化(校正通道间系统偏差)等预处理步骤。
技术细节:
# === TMT数据预处理(R)===
library(limma)
library(NormalyzerDE)
library(tidyverse)
# 读取MaxQuant输出
protein_groups <- read.table("proteinGroups.txt", sep = "\t", header = TRUE)
# 1. 过滤
# 去除反向序列、污染物、只有一个肽段鉴定的蛋白
protein_groups <- protein_groups %>%
filter(Reverse != "+" & Potential.contaminant != "+" & Razor...unique.peptides >= 2)
# 2. 提取报告离子强度列
reporter_cols <- grep("Reporter.intensity.corrected", colnames(protein_groups))
quant_matrix <- protein_groups[, reporter_cols]
rownames(quant_matrix) <- protein_groups$Majority.protein.IDs
# 3. Log2转换
quant_log2 <- log2(quant_matrix)
quant_log2[is.infinite(as.matrix(quant_log2))] <- NA
# 4. 过滤缺失值过多的蛋白
# 保留在至少70%样本中有定量值的蛋白
keep <- rowMeans(!is.na(quant_log2)) >= 0.7
quant_filtered <- quant_log2[keep, ]
cat(sprintf("Proteins after filtering: %d\n", nrow(quant_filtered)))
# 5. 归一化
# 方法1: 中位数归一化(每个通道减去中位数)
medians <- apply(quant_filtered, 2, median, na.rm = TRUE)
quant_norm <- sweep(quant_filtered, 2, medians - mean(medians))
# 方法2: Quantile归一化
library(preprocessCore)
quant_qn <- normalize.quantiles(as.matrix(quant_filtered))
dimnames(quant_qn) <- dimnames(quant_filtered)
# 方法3: VSN (Variance Stabilizing Normalization)
library(vsn)
quant_vsn <- normalizeVSN(2^as.matrix(quant_filtered))
# 6. 缺失值填充(可选)
library(impute)
quant_imputed <- impute.knn(as.matrix(quant_norm), k = 5)$data
# 或使用MinProb(下限填充——假设缺失是因为低丰度)
# 或使用QRILC/MLE方法
第四步:差异蛋白分析¶
白话解释: 归一化后,用统计方法找出在不同条件间表达量显著变化的蛋白。limma(原为转录组设计)通过经验贝叶斯方差收缩,在蛋白组学中也表现优异。MSstats则是专为蛋白组学设计的统计框架。
技术细节:
# === limma差异分析 ===
library(limma)
# 实验设计矩阵
sample_info <- data.frame(
channel = colnames(quant_norm),
group = c(rep("Control", 4), rep("Treatment", 4))
)
design <- model.matrix(~ 0 + group, data = sample_info)
colnames(design) <- c("Control", "Treatment")
# 对比矩阵
contrast <- makeContrasts(Treatment - Control, levels = design)
# 拟合模型
fit <- lmFit(quant_norm, design)
fit2 <- contrasts.fit(fit, contrast)
fit3 <- eBayes(fit2)
# 提取结果
de_results <- topTable(fit3, number = Inf, sort.by = "P")
de_results$protein <- rownames(de_results)
# 显著差异蛋白
sig_proteins <- de_results %>% filter(adj.P.Val < 0.05 & abs(logFC) > 0.58)
cat(sprintf("Significant DEPs: %d (Up: %d, Down: %d)\n",
nrow(sig_proteins),
sum(sig_proteins$logFC > 0),
sum(sig_proteins$logFC < 0)))
# 火山图
library(EnhancedVolcano)
EnhancedVolcano(de_results, lab = de_results$protein,
x = 'logFC', y = 'adj.P.Val',
pCutoff = 0.05, FCcutoff = 0.58,
title = "TMT Differential Protein Expression")
# === MSstats专用蛋白组学统计 ===
library(MSstats)
# MSstats需要特定格式输入
# 从MaxQuant的evidence.txt生成
evidence <- read.table("evidence.txt", sep = "\t", header = TRUE)
protein_groups_msstats <- read.table("proteinGroups.txt", sep = "\t", header = TRUE)
# 转换MaxQuant输出为MSstats格式
msstats_input <- MaxQtoMSstatsFormat(
evidence = evidence,
annotation = annotation, # 实验设计注释
proteinGroups = protein_groups_msstats,
removeProtein_with1Feature = TRUE
)
# 数据处理
processed <- dataProcess(msstats_input,
normalization = "equalizeMedians",
summaryMethod = "TMP", # Tukey's Median Polish
MBimpute = TRUE)
# 差异分析
comparison <- matrix(c(1, -1), nrow = 1)
rownames(comparison) <- "Treatment-Control"
colnames(comparison) <- c("Treatment", "Control")
msstats_results <- groupComparison(contrast.matrix = comparison,
data = processed)
# 结果
sig_msstats <- msstats_results$ComparisonResult %>%
filter(adj.pvalue < 0.05 & abs(log2FC) > 0.58)
第五步:功能富集与网络分析¶
白话解释: 找到差异蛋白后,通过GO/KEGG富集分析和蛋白互作网络(PPI)理解它们代表的生物学过程。与转录组分析类似,但蛋白组数据更直接反映功能层面的变化。
技术细节:
# === 功能分析 ===
library(clusterProfiler)
library(org.Hs.eg.db)
library(STRINGdb)
# GO/KEGG富集
up_proteins <- sig_proteins$protein[sig_proteins$logFC > 0]
down_proteins <- sig_proteins$protein[sig_proteins$logFC < 0]
# 蛋白ID转换(UniProt → ENTREZID)
up_entrez <- bitr(up_proteins, fromType = "UNIPROT",
toType = "ENTREZID", OrgDb = org.Hs.eg.db)
ego_up <- enrichGO(gene = up_entrez$ENTREZID,
OrgDb = org.Hs.eg.db, ont = "BP", pvalueCutoff = 0.05)
dotplot(ego_up, showCategory = 15, title = "Upregulated Proteins - GO BP")
# STRING蛋白互作网络
string_db <- STRINGdb$new(version = "12.0", species = 9606, score_threshold = 400)
sig_mapped <- string_db$map(sig_proteins, "protein", removeUnmappedRows = TRUE)
string_db$plot_network(sig_mapped$STRING_id[1:50])
第六步:多重TMT实验整合¶
白话解释: 一个TMT16plex最多16个样本。大型研究需要多个TMT实验(plex),它们之间存在批次效应。通过在每个plex中包含一个共同的"桥接通道"(bridge/reference channel),可以进行跨plex的归一化和整合。
技术细节:
# === 多plex整合 ===
# 策略:Internal Reference Scaling (IRS)
# 每个plex的bridge channel作为参考
# 假设有3个plex,每个plex的第16通道是pooled reference
plex1_quant <- quant_norm[, 1:15] # 15个样本
plex1_ref <- quant_norm[, 16] # reference
plex2_quant <- quant_norm2[, 1:15]
plex2_ref <- quant_norm2[, 16]
plex3_quant <- quant_norm3[, 1:15]
plex3_ref <- quant_norm3[, 16]
# IRS归一化:各plex除以自己的reference,再乘以全局reference均值
global_ref <- rowMeans(cbind(plex1_ref, plex2_ref, plex3_ref), na.rm = TRUE)
plex1_irs <- sweep(plex1_quant, 1, plex1_ref) + global_ref
plex2_irs <- sweep(plex2_quant, 1, plex2_ref) + global_ref
plex3_irs <- sweep(plex3_quant, 1, plex3_ref) + global_ref
# 合并
integrated_quant <- cbind(plex1_irs, plex2_irs, plex3_irs)
# 验证:PCA看批次效应是否消除
pca_result <- prcomp(t(integrated_quant), scale. = TRUE)
plot(pca_result$x[, 1:2], col = rep(1:3, each = 15))
# 应该按生物学分组聚类,而非按plex
第七步:结果验证与报告¶
白话解释: 蛋白组学结果需要多层验证:与转录组数据比较一致性、WB/PRM验证关键蛋白、功能实验确认生物学意义。
技术细节:
# === 蛋白组-转录组一致性 ===
# 合并蛋白和mRNA数据
protein_rna_merge <- merge(de_results, rna_de_results,
by.x = "gene_name", by.y = "gene_symbol",
suffixes = c("_protein", "_rna"))
# 散点图比较fold change
ggplot(protein_rna_merge, aes(x = logFC_rna, y = logFC_protein)) +
geom_point(alpha = 0.3) +
geom_smooth(method = "lm", color = "red") +
geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
labs(x = "mRNA log2FC", y = "Protein log2FC") +
annotate("text", x = -2, y = 2,
label = sprintf("r = %.3f", cor(protein_rna_merge$logFC_rna,
protein_rna_merge$logFC_protein,
use = "complete.obs")))
# 通常r = 0.4-0.6(蛋白与mRNA不完全一致是正常的)
实战命令速查¶
# MaxQuant命令行
mono MaxQuantCmd.exe mqpar.xml
# FragPipe
fragpipe --headless --workflow TMT16 --manifest manifest.txt --output-dir output
# R分析
# limma: lmFit → contrasts.fit → eBayes → topTable
# MSstats: MaxQtoMSstatsFormat → dataProcess → groupComparison
面试常问点¶
Q1: TMT的比值压缩(ratio compression)是什么?如何解决?¶
A: 比值压缩是MS2级别TMT定量的固有问题——在MS1窗口中共分离的非目标肽段也会产生报告离子信号,"稀释"真实比值,使得差异被低估(fold change被压缩向1)。解决方法:(1) SPS-MS3定量(选取MS2碎片再碎裂,减少干扰);(2) 减小MS1分离窗口宽度;(3) 使用compensation factor算法校正。
Q2: MaxQuant和MSFragger/FragPipe的区别?¶
A: MaxQuant使用Andromeda搜索引擎,运行较慢但成熟稳定,MBR(Match Between Runs)提高鉴定率。MSFragger使用fragment ion indexing策略,搜索速度快10-100倍,支持开放搜索(open search)发现未预期修饰。FragPipe集成了MSFragger+Philosopher+TMT-Integrator的完整流程。两者结果高度一致,大型数据集推荐FragPipe。
Q3: TMT实验中如何处理缺失值?¶
A: TMT缺失值类型:(1) MCAR(完全随机缺失)——可用KNN/SVD填充;(2) MNAR(非随机缺失,因低丰度未检测到)——应用left-censored方法(如MinProb, QRILC)。实际中通常混合两种类型。策略:先过滤缺失>50%的蛋白,再用适当方法填充剩余缺失值,或使用能处理缺失值的统计方法(如MSstats的AFT模型)。
Q4: 为什么蛋白组的fold change通常小于转录组?¶
A: (1) TMT的比值压缩效应天然压缩差异;(2) 蛋白翻译后调控(如降解)缓冲了mRNA变化的效果;(3) 蛋白半衰期较长,短期刺激的效果在蛋白水平被稀释;(4) 蛋白组通常用更保守的fold change阈值(如1.5倍=log2FC>0.58)。
Q5: TMT与Label-Free定量的优缺点比较?¶
A: TMT优势:高重复性(同一MS运行,无run间变异)、通量高(最新TMTpro可达35重)、可比性好。劣势:成本高、动态范围受限(压缩效应)、需要足量起始蛋白。Label-Free优势:动态范围大、无标记成本、样本数不限。劣势:run间变异大、需严格实验控制、定量精度依赖色谱重现性。
易错点¶
1. 忘记过滤反向库和污染蛋白¶
MaxQuant输出中标有"+"的Reverse和Potential contaminant行必须去除,否则会引入虚假的差异蛋白。
2. 归一化方法选择不当¶
对于TMT数据,如果样本间总蛋白量差异大(如肿瘤vs正常),总量归一化会掩盖真实差异。应先评估是否适合等量假设。
3. 忽略TMT通道泄漏(isotope impurity)¶
TMT标签的同位素纯度不是100%,相邻通道间有~2-5%信号泄漏。MaxQuant可自动校正(Reporter ion isotope correction),但需要提供标签的校正因子(随批次不同,Thermo提供)。
4. 多plex整合不做桥接通道¶
没有共同参考通道的多个TMT plex无法可靠整合。批次效应会被误认为生物学差异。实验设计时必须预留参考通道。
5. 对PSM水平定量做蛋白水平统计¶
应在蛋白水平(汇总所有归属肽段后)做差异分析,而非对单个PSM或肽段水平做统计后再合并。
补充知识¶
TMT标记发展¶
- TMT6plex → TMT10plex → TMT11plex → TMTpro16plex → TMTpro18plex → TMTpro35plex
- TMTpro 18-plex:2021年发表,最多18个样本/实验
- TMTpro 35-plex:2024年发表(Zuniga et al., J Proteome Res),通过氘代(deuterium)引入扩展到35重,需要DISAT桥接通道策略校正氘效应
替代定量策略¶
- DIA (Data-Independent Acquisition):非标记,覆盖率高
- SILAC:代谢标记,定量最准确但限于细胞培养
- SWATH-MS:DIA的一种实现
引用推荐¶
- MaxQuant: Cox & Mann, Nature Biotechnology, 2008
- MSFragger: Kong et al., Nature Methods, 2017
- TMT: Thompson et al., Analytical Chemistry, 2003
- MSstats: Choi et al., Bioinformatics, 2014