蛋白质翻译后修饰(PTM)分析¶
一句话说明¶
翻译后修饰(PTM)就是蛋白质翻译出来之后被"二次加工"——加个磷酸基、糖链、甲基等化学基团,改变蛋白质的功能、定位和相互作用。就像新车出厂后还要装导航、贴膜、改排气管一样。
核心知识点¶
要点1:常见PTM类型¶
| PTM类型 | 质量偏移(Da) | 生物学功能 | 检测难度 |
|---|---|---|---|
| 磷酸化 | +79.966 | 信号传导开关 | 中 |
| 泛素化 | +114.043(diGly) | 蛋白降解标记 | 高 |
| 乙酰化 | +42.011 | 组蛋白修饰,基因调控 | 中 |
| 甲基化 | +14.016 | 组蛋白/蛋白质功能调控 | 高(小质量偏移) |
| 糖基化 | 不定 | 蛋白质折叠、细胞识别 | 高(异质性大) |
| 琥珀酰化 | +100.016 | 代谢调控 | 中 |
| SUMO化 | 大分子 | 蛋白定位、转录调控 | 高 |
要点2:PTM质谱检测策略¶
- Bottom-up(自下而上):蛋白酶切成肽段后检测,是主流方法
- 优势:灵敏度高、方法成熟
- 劣势:失去修饰位点间的组合信息
- Top-down(自上而下):直接分析完整蛋白
- 优势:保留完整修饰信息和组合关系(proteoform)
- 劣势:技术难度大,只适合小蛋白
- Middle-down:大片段分析,折中方案
要点3:数据库搜索策略¶
- 固定修饰(Fixed Modification):所有指定残基都被修饰,如半胱氨酸烷基化(+57.021)
- 可变修饰(Variable Modification):可能有也可能没有的修饰,如甲硫氨酸氧化(+15.995)
- 搜索空间爆炸:每加一种可变修饰,搜索空间翻倍——3种可变修饰的搜索时间是0种的8倍
- 开放搜索(Open Search):不预设修饰类型,用大质量容忍窗口(如±500 Da)搜索所有可能的修饰,工具如MSFragger
要点4:PTM分析常用工具¶
- MaxQuant:支持多种PTM搜索,内置位点定位算法
- MSFragger:超快的开放搜索引擎,适合发现未知PTM
- pFind:支持大规模PTM搜索
- PTM数据库:
- PhosphoSitePlus:磷酸化/乙酰化/泛素化等
- dbPTM:综合PTM数据库
- UniProt:蛋白注释含已知PTM信息
实战代码¶
# === 使用MSFragger进行开放搜索发现未知PTM ===
# MSFragger是FragPipe工具套件的核心引擎
# 1. 下载FragPipe: https://github.com/Nesvilab/FragPipe
# 包含MSFragger + Philosopher + PTM-Shepherd
# 2. 命令行运行开放搜索
java -jar MSFragger.jar \
--database_name human_uniprot.fasta \ # 蛋白序列库
--precursor_mass_lower -150 \ # 母离子质量偏移下限(-150 Da)
--precursor_mass_upper 500 \ # 母离子质量偏移上限(+500 Da)
--precursor_mass_units 1 \ # 单位:Da
--fragment_mass_tolerance 20 \ # 碎片离子容忍度20ppm
--output_format tsv \ # 输出TSV格式
sample1.mzML sample2.mzML # 输入文件
# === PTM分析下游统计 ===
import pandas as pd
import numpy as np
# 1. 读取PTM搜索结果(以MaxQuant乙酰化位点为例)
acetyl = pd.read_csv("Acetyl (K)Sites.txt", sep="\t")
# 2. 基本过滤
acetyl = acetyl[acetyl["Reverse"] != "+"] # 去反库
acetyl = acetyl[acetyl["Localization prob"] > 0.75] # 高置信位点
# 3. 计算修饰化学计量比(Stoichiometry)
# 化学计量比 = 修饰肽段强度 / (修饰肽段强度 + 未修饰肽段强度)
# 反映实际修饰程度
if "Occupancy" in acetyl.columns:
acetyl_occupied = acetyl[acetyl["Occupancy"] > 0]
print(f"平均乙酰化占有率: {acetyl_occupied['Occupancy'].mean():.2%}")
# 4. PTM motif分析
from collections import Counter
# 提取磷酸化位点周围的序列motif(±7个氨基酸)
def extract_motif(sequence_window):
"""统计修饰位点周围的氨基酸频率"""
if pd.isna(sequence_window) or len(sequence_window) < 15:
return None
return sequence_window # 15个字符的窗口序列
motifs = acetyl["Sequence window"].apply(extract_motif).dropna()
# 统计中心位点(修饰位点)两侧的氨基酸偏好
center = 7 # 窗口中心位置
position_freq = {}
for pos in range(-3, 4): # 分析修饰位点±3位的偏好
aa_at_pos = [m[center + pos] for m in motifs if len(m) > center + pos]
position_freq[pos] = Counter(aa_at_pos).most_common(3)
print("修饰位点周围氨基酸偏好:")
for pos, freq in position_freq.items():
print(f" 位置{pos:+d}: {freq}")
面试常问点¶
Q1: 什么是开放搜索(Open Search)?为什么需要?¶
参考答案:传统数据库搜索需要预先指定可能的修饰类型,但实际上蛋白质可能有几百种不同的修饰。开放搜索放宽母离子质量匹配的容忍窗口(如±500 Da),让算法自动发现各种修饰。MSFragger通过片段离子索引技术使开放搜索速度可接受。这对发现新修饰类型、检测化学伪影(如甲醛固定产生的加合物)特别有用。
Q2: 可变修饰设太多会怎样?¶
参考答案:每增加一种可变修饰,搜索空间就翻倍。比如3种可变修饰在一个肽段上有8种组合(2³),搜索时间显著增加,而且假阳性也会升高(因为候选匹配变多了)。所以一般建议可变修饰不超过3-4种,真正需要大规模PTM搜索时用开放搜索策略代替。
速查卡片¶
| 问题 | 一句话答案 |
|---|---|
| 磷酸化质量偏移? | +79.966 Da |
| 泛素化残留标记? | diGly(+114.043 Da),留在Lys上 |
| 固定修饰vs可变修饰? | 固定=所有位点都有;可变=可能有也可能没有 |
| 开放搜索用什么工具? | MSFragger(FragPipe套件) |
| PTM化学计量比是什么? | 修饰肽段占总肽段的比例,反映实际修饰程度 |
| Bottom-up vs Top-down? | Bottom-up切成肽段分析主流;Top-down分析完整蛋白保留组合信息 |