蛋白质组学 TMT 标记定量¶
一句话概述¶
TMT(串联质量标签)是一种多重同位素标记技术,能在一次质谱实验中同时比较多达18个样本的蛋白质表达差异。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| TMT(Tandem Mass Tag) | Thermo Fisher 开发的等压标记试剂,目前最高支持 TMTpro 18-plex |
| iTRAQ | AB Sciex 开发的类似技术,支持 4-plex 和 8-plex |
| 等压标记 | 不同标签质量相同但碎裂后产生不同报告离子,用于定量 |
| 报告离子 | TMT 标签在 HCD 碎裂后释放的不同质量离子(如 126-134 Da) |
| 共分离干扰 | 多个肽段同时进入质谱导致定量偏差(ratio compression) |
| FragPipe + TMT-Integrator | 2026年 Nature Communications 发表,性能超越 MaxQuant 和 PD |
| MaxQuant | 免费开源蛋白组学分析工具,配合 Perseus 做统计分析 |
| Proteome Discoverer(PD) | Thermo 商业软件,GUI 友好,支持多种搜索引擎 |
| MS2 vs MS3 定量 | MS3 能减少共分离干扰但灵敏度降低,MS2 更常用 |
| 标准化 | 中位数归一化是最常用的标准化方法 |
白话解释原理¶
想象一下: 你想比较6组病人血液中蛋白质的含量差异。
传统方法:每组分别做实验,然后比较 → 批次效应大,不准确。
TMT方法:给每组样本贴不同颜色的"标签"(TMT标记),然后混在一起做一次实验 → 同一台仪器、同一次测量,结果更可比。
具体过程: 1. 6个样本的蛋白质分别用6种TMT标签标记(像给6队球员穿不同颜色球衣) 2. 混合在一起上质谱分析 3. 质谱先看到"一个球"(同一个肽段,因为标签等压) 4. 打碎这个球后,根据不同颜色碎片(报告离子)的强度来判断每组的含量
各步骤详解¶
第一步:实验数据格式了解¶
白话解释: 质谱产生的原始数据是 .raw 文件(Thermo)或 .wiff 文件(Sciex),需要用专门软件处理。
# TMT 实验原始数据结构
# project/
# ├── raw_data/
# │ ├── Fraction01.raw # 第1个分级的原始质谱数据
# │ ├── Fraction02.raw # 第2个分级
# │ └── ...
# ├── database/
# │ └── human_uniprot.fasta # 蛋白质参考数据库
# └── results/
# └── ... # 分析结果
# 下载人类蛋白质数据库(UniProt reviewed)
wget https://rest.uniprot.org/uniprotkb/stream?format=fasta\&query=reviewed:true+AND+organism_id:9606 \
-O human_uniprot_reviewed.fasta # 下载人类已审核蛋白序列
第二步:使用 FragPipe + TMT-Integrator 分析(推荐)¶
白话解释: FragPipe 是目前性能最好的开源 TMT 分析工具,2026年发表在 Nature Communications,比 MaxQuant 能鉴定更多蛋白。
# 1. 下载安装 FragPipe
# 访问 https://fragpipe.nesvilab.org/ 下载最新版
# FragPipe 包含 MSFragger(搜库引擎)+ Philosopher(后处理)+ TMT-Integrator
# 2. 图形界面使用流程
# a. 加载 .raw 文件
# b. 选择 workflow: TMT-10plex(或TMTpro-16plex等)
# c. 指定 FASTA 数据库
# d. 设置搜索参数:
# - 酶: Trypsin/P
# - 固定修饰: Carbamidomethyl (C), TMT (N-term, K)
# - 可变修饰: Oxidation (M)
# - 母离子容差: 20 ppm
# - 碎片离子容差: 20 ppm
# e. 运行 → 自动完成搜库、FDR控制、定量
# 3. 命令行使用(高级用户)
# MSFragger 搜库
java -jar MSFragger.jar \
--database_name human_uniprot.fasta \ # 蛋白数据库
--precursor_mass_tolerance 20 \ # 母离子容差 20ppm
--fragment_mass_tolerance 20 \ # 碎片离子容差 20ppm
--search_enzyme_name Trypsin \ # 胰蛋白酶消化
--num_enzyme_termini 2 \ # 完全酶切
*.raw # 原始数据文件
第三步:使用 MaxQuant 分析(经典方法)¶
白话解释: MaxQuant 是最经典的蛋白组学分析软件,免费但只能在 Windows 上运行。
# MaxQuant 分析流程(图形界面)
# 1. 下载: https://www.maxquant.org/
# 2. 安装 .NET Framework(MaxQuant需要)
# 关键参数设置:
# Raw files → 添加所有 .raw 文件
# Group-specific parameters:
# Type: Reporter ion MS2
# TMT标签: 选择 TMT 10plex / TMTpro 16plex
# Labels: 设置每个通道对应的样本
# Global parameters:
# Sequences → 添加 FASTA 数据库
# Fixed modifications: Carbamidomethyl (C)
# Variable modifications: Oxidation (M), Acetyl (Protein N-term)
# Min peptide length: 7
# FDR: 0.01 (1%)
# MaxQuant 输出关键文件:
# - proteinGroups.txt → 蛋白质水平定量结果
# - peptides.txt → 肽段水平定量结果
# - evidence.txt → PSM(肽段谱匹配)水平数据
# - summary.txt → 实验总结统计
第四步:下游统计分析(R 语言)¶
白话解释: 搜库完成后,需要做统计分析找出差异表达的蛋白质。
# 安装必要的R包
if (!require("BiocManager")) install.packages("BiocManager") # 安装Bioconductor管理器
BiocManager::install("limma") # 安装差异分析包
install.packages("ggplot2") # 安装绑图包
install.packages("pheatmap") # 安装热图包
# 1. 读入 TMT 定量数据
library(limma) # 加载差异分析包
library(ggplot2) # 加载绑图包
# 读取 MaxQuant 输出的 proteinGroups.txt
data <- read.delim("proteinGroups.txt", stringsAsFactors = FALSE) # 读取数据
# 提取 TMT 报告离子强度列(Reporter intensity corrected)
tmt_cols <- grep("Reporter.intensity.corrected", colnames(data)) # 找到TMT定量列
tmt_matrix <- as.matrix(data[, tmt_cols]) # 提取为矩阵
rownames(tmt_matrix) <- data$Protein.IDs # 用蛋白ID作为行名
# 2. 过滤和标准化
# 去除反库(decoy)和污染蛋白
keep <- data$Reverse != "+" & data$Potential.contaminant != "+" # 保留非反库非污染
tmt_matrix <- tmt_matrix[keep, ] # 过滤
# 去除缺失值过多的蛋白(>50%缺失)
valid <- rowSums(tmt_matrix > 0) >= ncol(tmt_matrix) * 0.5 # 至少50%通道有值
tmt_matrix <- tmt_matrix[valid, ] # 过滤
# log2 转换
tmt_log2 <- log2(tmt_matrix + 1) # log2转换,+1避免log(0)
# 中位数归一化
tmt_norm <- normalizeBetweenArrays(tmt_log2, method = "quantile") # 分位数归一化
# 3. 差异表达分析(limma)
# 设计矩阵
group <- factor(c("Control", "Control", "Control", # 前3个通道是对照
"Treatment", "Treatment", "Treatment")) # 后3个通道是处理
design <- model.matrix(~ 0 + group) # 创建设计矩阵
colnames(design) <- levels(group) # 设置列名
# 拟合线性模型
fit <- lmFit(tmt_norm, design) # 拟合模型
contrast <- makeContrasts(Treatment - Control, levels = design) # 创建对比
fit2 <- contrasts.fit(fit, contrast) # 应用对比
fit2 <- eBayes(fit2) # 经验贝叶斯
# 提取差异蛋白
results <- topTable(fit2, number = Inf, adjust.method = "BH") # 所有结果
sig_proteins <- results[results$adj.P.Val < 0.05 & # FDR < 0.05
abs(results$logFC) > 1, ] # |log2FC| > 1
cat("差异蛋白数量:", nrow(sig_proteins), "\n") # 打印数量
# 4. 火山图可视化
ggplot(results, aes(x = logFC, y = -log10(adj.P.Val))) + # 创建火山图
geom_point(aes(color = adj.P.Val < 0.05 & abs(logFC) > 1), # 显著性着色
size = 1) + # 点大小
scale_color_manual(values = c("grey", "red")) + # 灰色和红色
geom_hline(yintercept = -log10(0.05), linetype = "dashed") + # FDR线
geom_vline(xintercept = c(-1, 1), linetype = "dashed") + # FC线
labs(x = "log2 Fold Change", y = "-log10(FDR)", # 轴标签
title = "TMT差异蛋白火山图") + # 标题
theme_minimal() # 简洁主题
ggsave("volcano_plot.pdf", width = 8, height = 6) # 保存图片
第五步:功能富集分析¶
# 使用 clusterProfiler 做 GO 和 KEGG 富集
BiocManager::install("clusterProfiler") # 安装富集分析包
BiocManager::install("org.Hs.eg.db") # 安装人类注释包
library(clusterProfiler) # 加载富集分析包
library(org.Hs.eg.db) # 加载人类注释数据库
# 提取差异蛋白的基因名
gene_list <- rownames(sig_proteins) # 差异蛋白ID列表
# GO 富集分析
go_result <- enrichGO(
gene = gene_list, # 基因列表
OrgDb = org.Hs.eg.db, # 注释数据库
keyType = "UNIPROT", # ID类型
ont = "BP", # 生物过程
pAdjustMethod = "BH", # 校正方法
pvalueCutoff = 0.05 # p值阈值
)
# KEGG 通路富集
kegg_result <- enrichKEGG(
gene = gene_list, # 基因列表
organism = "hsa", # 人类
pvalueCutoff = 0.05 # p值阈值
)
# 可视化
dotplot(go_result, showCategory = 15) # GO富集点图(前15条)
barplot(kegg_result, showCategory = 10) # KEGG富集柱状图(前10条)
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
No PSMs found | 搜库参数设置错误 | 检查修饰设置是否包含 TMT 标记,检查酶切设置 |
Low identification rate (<20%) | 数据库选错或数据质量差 | 确认物种正确,检查 raw 文件是否完整 |
Reporter ions not detected | HCD 能量不对或标记效率低 | 确认碎裂方式为 HCD,NCE 设为 30-35% |
Ratio compression | 共分离干扰 | 使用 MS3 方法或 SPS-MS3,或增加分级数 |
Batch effect visible in PCA | 不同批次间系统偏差 | 使用 ComBat 或 limma 的 removeBatchEffect |
Too many missing values | 蛋白丰度太低 | 放宽过滤条件,或使用 imputation 填补缺失值 |
速查表¶
┌──────────────────────────────────────────────────────────┐
│ TMT 蛋白组学分析速查 │
├──────────────────────────────────────────────────────────┤
│ TMT 规格: │
│ TMT 6-plex: 126-131 Da │
│ TMT 10-plex: 126-131 Da (含N/C同位素) │
│ TMTpro 16/18-plex: 126-134 Da │
│ │
│ 分析工具选择: │
│ FragPipe+TMT-Integrator — 性能最好,开源 │
│ MaxQuant — 经典免费,配 Perseus 做统计 │
│ Proteome Discoverer — 商业GUI,Thermo官方 │
│ │
│ 关键参数: │
│ 酶切: Trypsin/P, max 2 missed cleavages │
│ 固定修饰: Carbamidomethyl(C), TMT(N-term, K) │
│ 可变修饰: Oxidation(M) │
│ FDR: 1% (protein & peptide) │
│ 母离子容差: 10-20 ppm │
│ │
│ 差异分析标准: │
│ |log2FC| > 1.0(2倍变化) │
│ FDR < 0.05 │
│ 至少2个唯一肽段 │
│ │
│ 下游分析: limma → GO/KEGG → PPI 网络 │
└──────────────────────────────────────────────────────────┘
面试高频问题¶
TMT 和 iTRAQ 标记的区别是什么? 答:两者原理相同(等压标记),但 TMT 支持更高通量(最高18-plex vs iTRAQ 8-plex),TMT 标记效率更高(标记 N-末端和赖氨酸侧链),且 TMT 目前主流,iTRAQ 已逐渐被取代。TMT 使用 HCD 碎裂,iTRAQ 使用 HCD 或 CID。
什么是 ratio compression?怎么解决? 答:Ratio compression(比值压缩)是 TMT 定量的主要问题。原因是在 MS2 水平上,目标肽段的报告离子中混入了共分离的其他肽段的报告离子,导致定量比值被"压缩"(向1靠近)。解决方法:使用 SPS-MS3(同步前体选择-三级质谱),增加色谱分离分级数减少共洗脱,或使用计算方法校正。
蛋白组学数据分析中如何处理缺失值? 答:缺失值分为"随机缺失"(MAR,技术原因)和"非随机缺失"(MNAR,低丰度蛋白检测不到)。处理方法:(1) 过滤——去除缺失比例过高的蛋白;(2) 填补——KNN填补(适合MAR)、最小值填补(适合MNAR)、或 Perseus 的降采样高斯分布填补法。