跳转至

405_蛋白基因组学Proteogenomics


一句话说明

蛋白基因组学(Proteogenomics)就是用质谱数据验证基因组预测的蛋白序列,发现新型蛋白和突变肽段。


核心知识点

什么是蛋白基因组学

  • 传统流程:质谱肽段 → 搜标准蛋白数据库(UniProt)
  • 蛋白基因组学:质谱肽段 → 搜基于基因组/转录组定制数据库
  • 核心价值:发现标准数据库中没有的蛋白(新ORF、体细胞突变肽段、RNA编辑肽段)

定制数据库来源

来源内容用途
基因组VCF肿瘤体细胞突变新抗原预测
RNA-seq样本特异性转录本新ORF发现
Ribo-seq翻译组数据验证翻译产物
三框翻译基因组所有ORF非经典蛋白

应用场景

  • 肿瘤新抗原:体细胞突变产生的突变肽段,用于免疫治疗
  • 非经典蛋白:lncRNA翻译的小蛋白(micropeptide)
  • 数据库更新:验证基因组注释的正确性

实战代码

# ========== 蛋白基因组学分析流程示例 ==========

# ========== 1. 从VCF生成突变肽段数据库 ==========
def vcf_to_mutant_peptides(vcf_file, reference_fasta, upstream=10, downstream=10):
    """
    从VCF文件生成突变肽段序列
    原理:取突变位点前后各10个氨基酸,生成突变版本和野生型版本
    """
    # 简化示例,实际使用 pyvcf 或 cyvcf2
    mutations = [
        {"chrom": "chr1", "pos": 1000, "ref": "G", "alt": "A", 
         "gene": "TP53", "codon_change": "R175H"},
        {"chrom": "chr7", "pos": 2000, "ref": "C", "alt": "T", 
         "gene": "KRAS", "codon_change": "G12D"},
    ]

    # 氨基酸单字母代码对照表
    aa_table = {
        "Arg": "R", "His": "H", "Lys": "K", "Asp": "D", "Glu": "E",
        "Gly": "G", "Ala": "A", "Val": "V", "Leu": "L", "Ile": "I",
        "Pro": "P", "Phe": "F", "Trp": "W", "Met": "M", "Ser": "S",
        "Thr": "T", "Cys": "C", "Tyr": "Y", "Asn": "N", "Gln": "Q"
    }

    peptides = []
    for mut in mutations:
        # 解析氨基酸变化(例如 "R175H" = 第175位R突变为H)
        ref_aa = mut["codon_change"][0]      # 野生型氨基酸
        mut_aa = mut["codon_change"][-1]     # 突变氨基酸
        position = int(mut["codon_change"][1:-1])  # 位置

        # 模拟蛋白质序列(实际从FASTA文件提取)
        mock_protein = "MEEPQSDPSVEPPLSQETFSDLWKLLPENNVLSPLPSQAMDDLMLSPDDIEQWFTEDPGP"

        # 确保位置在蛋白范围内
        if position <= len(mock_protein):
            start = max(0, position - upstream - 1)
            end = min(len(mock_protein), position + downstream)

            # 提取突变肽段(包含突变位点)
            mutant_peptide = mock_protein[start:position-1] + mut_aa + mock_protein[position:end]
            wild_peptide = mock_protein[start:end]  # 野生型对照

            peptides.append({
                "gene": mut["gene"],
                "mutation": mut["codon_change"],
                "mutant_peptide": mutant_peptide,
                "wild_type_peptide": wild_peptide
            })

    return peptides

mutations = vcf_to_mutant_peptides("tumor.vcf", "hg38.fa")
for m in mutations:
    print(f"基因: {m['gene']}, 突变: {m['mutation']}")
    print(f"  突变肽段: {m['mutant_peptide']}")
    print(f"  野生型: {m['wild_type_peptide']}")

# ========== 2. 生成自定义搜库数据库(FASTA格式) ==========
def create_custom_database(mutations, output_fasta="custom_db.fasta"):
    """
    将突变肽段写入FASTA格式数据库,用于质谱搜库
    格式:>蛋白ID 描述信息
          氨基酸序列
    """
    with open(output_fasta, "w") as f:
        for i, mut in enumerate(mutations):
            # 突变肽段条目
            f.write(f">MUT_{mut['gene']}_{mut['mutation']} mutant_peptide\n")
            f.write(f"{mut['mutant_peptide']}\n")
            # 野生型对照条目
            f.write(f">WT_{mut['gene']}_{mut['mutation']} wild_type_peptide\n")
            f.write(f"{mut['wild_type_peptide']}\n")
    print(f"数据库已写入: {output_fasta}")

create_custom_database(mutations)

# ========== 3. 分析质谱搜库结果(PSM过滤) ==========
import pandas as pd
import numpy as np

# 模拟质谱搜库输出(PSM = Peptide-Spectrum Match,肽段-谱图匹配)
psm_results = pd.DataFrame({
    "peptide_sequence": ["SVEPPLSQETF", "LMLSPDDIEQW", "MEEPQSDPSVEP", "KLLPENNVLS"],
    "protein_id": ["MUT_TP53_R175H", "WT_TP53_R175H", "MUT_KRAS_G12D", "WT_KRAS_G12D"],
    "score": [85.2, 72.1, 91.5, 68.3],       # 搜库打分
    "pep": [0.001, 0.01, 0.0005, 0.02],       # Posterior Error Probability(越小越好)
    "unique_peptide": [True, True, True, True]  # 是否为蛋白特异肽段
})

# ========== 4. 过滤高置信度突变肽段 ==========
# FDR < 1%:PEP < 0.01 且分数足够高
confident_psm = psm_results[
    (psm_results["pep"] < 0.01) &          # 假阳性率 < 1%
    (psm_results["score"] > 75) &           # 打分阈值
    (psm_results["protein_id"].str.startswith("MUT_"))  # 只保留突变肽段
]

print("\n高置信度突变肽段:")
print(confident_psm[["peptide_sequence", "protein_id", "score", "pep"]].to_string(index=False))

# ========== 5. 统计各类别蛋白的分布 ==========
psm_results["category"] = psm_results["protein_id"].apply(
    lambda x: "Mutant" if x.startswith("MUT_") else "Wild-type"
)
category_counts = psm_results.groupby("category").size()
print("\n各类别PSM数量:")
print(category_counts)

面试常问点

  1. Q: 蛋白基因组学与常规蛋白组学的搜库有什么不同? A: 常规搜UniProt标准数据库;蛋白基因组学搜定制数据库(基于VCF/RNA-seq生成),能发现非标准蛋白序列。

  2. Q: 什么是6框翻译(6-frame translation)? A: 基因组DNA有正负链各3个阅读框,共6个阅读框,全部翻译成蛋白序列用于搜库,可发现未注释的ORF。

  3. Q: 如何验证发现的新型蛋白是真实的? A: 多肽段覆盖验证、正交实验(Western blot/免疫沉淀)、Ribo-seq验证翻译、在独立队列中重现。

  4. Q: 假阳性如何控制? A: 靶-诱饵(target-decoy)策略:在数据库中加入随机序列(decoy),统计匹配到decoy的比例估算FDR。


速查表

工具功能
MaxQuant蛋白组定量搜库
PercolatorPSM打分重校正(半监督学习)
ProteoWizard质谱文件格式转换
pyteomicsPython解析质谱数据
PGTools蛋白基因组学专用流程
Proteomics DB人类蛋白图谱数据库