蛋白组Label-free定量¶
一句话说明¶
Label-free定量就是"不贴标签也能比较蛋白质含量"——不需要同位素标记,直接比较不同样本中肽段的质谱信号强度或鉴定到的谱图数来推算蛋白质丰度差异,成本低、操作简单。
核心知识点¶
要点1:两种Label-free策略¶
- 基于强度的定量(Intensity-Based):比较肽段的离子强度(峰面积)
- 提取离子色谱图(XIC)的峰面积代表肽段含量
- MaxQuant中的LFQ(Label-Free Quantification)强度是最常用指标
- 需要精确的峰对齐和归一化
- 基于谱图计数(Spectral Counting):比较鉴定到某蛋白的MS/MS谱图数量
- 谱图数越多 → 蛋白丰度越高
- 简单但精度低,适合大差异的粗筛
要点2:MaxQuant/MaxLFQ算法¶
- MaxQuant:蛋白组学最经典的数据处理软件(Juergen Cox开发)
- MaxLFQ算法:MaxQuant中的Label-free定量核心算法
- 原理:利用样本对之间肽段强度比值的中位数来推算蛋白丰度
- 优势:不受"missing peptide"影响,比简单求和更准确
- Match Between Runs(MBR):一个样本没鉴定到的肽段,如果其他样本鉴定到了,用保留时间+精确质量从原始数据中"找回来",减少缺失值
要点3:与标记定量对比¶
| 特点 | Label-free | TMT/iTRAQ标记 | SILAC标记 |
|---|---|---|---|
| 成本 | 低 | 高(标记试剂贵) | 中 |
| 样本数 | 无限制 | 每组6-18个(TMTpro 18plex) | 2-3个 |
| 精度 | 中 | 高 | 最高 |
| 缺失值 | 多 | 少 | 少 |
| 定量范围 | 宽 | 窄(ratio compression) | 宽 |
要点4:数据处理注意事项¶
- 蛋白推断(Protein Inference):同一肽段可能属于多个蛋白(简并性问题),需要用Occam's Razor原则选最小蛋白集
- 归一化:中位数归一化或分位数归一化消除样本间系统差异
- 缺失值处理:区分"真缺失"(蛋白不存在)和"随机缺失"(检测限问题)
- 统计检验:常用moderated t-test(limma)或Perseus的检验方法
实战代码¶
# === MaxQuant命令行运行 ===
# 下载MaxQuant: https://www.maxquant.org/
# 1. 准备参数文件mqpar.xml(通常用GUI配置后导出)
# 关键参数设置:
# - Label-free quantification: LFQ
# - Match between runs: 勾选
# - Min. ratio count: 2(至少2个肽段用于定量)
# - FASTA文件: uniprot_human.fasta
# 2. 命令行运行MaxQuant
dotnet MaxQuantCmd.exe mqpar.xml # 运行分析(可能需要几小时到几天)
# === MaxQuant结果下游分析(Perseus风格) ===
import pandas as pd
import numpy as np
from scipy.stats import ttest_ind
from statsmodels.stats.multitest import multipletests
# 1. 读取MaxQuant的proteinGroups.txt输出
pg = pd.read_csv("combined/txt/proteinGroups.txt", sep="\t")
# 2. 基本过滤
pg = pg[pg["Reverse"] != "+"] # 去除反库匹配(decoy)
pg = pg[pg["Potential contaminant"] != "+"] # 去除常见污染物
pg = pg[pg["Only identified by site"] != "+"] # 去除仅通过修饰位点鉴定的
print(f"过滤后蛋白数: {len(pg)}")
# 3. 提取LFQ强度列
lfq_cols = [c for c in pg.columns if c.startswith("LFQ intensity")] # 找到所有LFQ列
lfq_data = pg[["Protein IDs", "Gene names"] + lfq_cols].copy()
lfq_data.set_index("Protein IDs", inplace=True)
# 4. 替换0为NaN,做log2变换
lfq_numeric = lfq_data[lfq_cols].replace(0, np.nan) # MaxQuant用0表示缺失
lfq_log2 = np.log2(lfq_numeric) # log2变换
# 5. 过滤:至少在一个组中70%样本有值
group1_cols = lfq_cols[:3] # 前3个样本为组1
group2_cols = lfq_cols[3:6] # 后3个样本为组2
valid_g1 = lfq_log2[group1_cols].notna().sum(axis=1) >= 2 # 组1至少2/3有值
valid_g2 = lfq_log2[group2_cols].notna().sum(axis=1) >= 2 # 组2至少2/3有值
lfq_filtered = lfq_log2[valid_g1 & valid_g2]
# 6. 差异蛋白分析
results = []
for idx in lfq_filtered.index:
g1 = lfq_filtered.loc[idx, group1_cols].dropna().values # 组1数据
g2 = lfq_filtered.loc[idx, group2_cols].dropna().values # 组2数据
fc = g1.mean() - g2.mean() # log2 fold change
_, pval = ttest_ind(g1, g2)
results.append({"Protein": idx, "log2FC": fc, "pvalue": pval})
df_res = pd.DataFrame(results)
df_res["padj"] = multipletests(df_res["pvalue"], method="fdr_bh")[1] # FDR校正
sig_proteins = df_res[(df_res["padj"] < 0.05) & (abs(df_res["log2FC"]) > 1)]
print(f"显著差异蛋白: {len(sig_proteins)}")
面试常问点¶
Q1: Label-free定量的主要缺点是什么?¶
参考答案:主要有三个:一是缺失值多,低丰度蛋白在某些样本中可能检测不到,DDA模式下尤其严重;二是样本间变异大,因为每个样本独立上机,仪器状态、进样量的波动都会影响定量;三是通量低,每个样本都要独立跑一次质谱。相比之下TMT标记可以把多个样本混在一起跑,减少了技术变异和机时。
Q2: MaxQuant的Match Between Runs有什么风险?¶
参考答案:MBR可以减少缺失值,但有假阳性风险。它是根据保留时间和精确质量从其他样本"推断"出肽段存在,如果不同肽段碰巧在相近的保留时间和质量位置,就会错误匹配。所以MBR找回的定量结果不如直接鉴定的可靠,尤其在保留时间校正不准的时候。建议用MBR时要适当提高其他筛选标准。
速查卡片¶
| 问题 | 一句话答案 |
|---|---|
| LFQ两种方法? | 基于强度(XIC峰面积)和基于谱图计数 |
| MaxLFQ算法原理? | 用样本对间肽段强度比值的中位数推算蛋白丰度 |
| MBR是什么? | Match Between Runs,用其他样本的鉴定信息"找回"缺失肽段 |
| Label-free vs TMT? | LFQ便宜样本数不限但缺失值多;TMT精度高但成本高 |
| proteinGroups.txt哪些要过滤? | Reverse, Potential contaminant, Only identified by site |
| 差异蛋白常用阈值? |