跳转至

肿瘤新抗原预测

一句话概述

肿瘤新抗原(Neoantigen)是由肿瘤特异性突变产生的异常蛋白片段——白话说就是:肿瘤细胞因为基因突变产生了正常细胞没有的"怪蛋白",免疫系统可以识别这些"怪蛋白"来攻击肿瘤,新抗原预测就是用生信方法找出这些最有可能被免疫系统识别的"怪蛋白片段"。


核心知识点表格

知识点说明
新抗原肿瘤突变产生的异常肽段,能被T细胞识别
MHC-I/II主要组织相容性复合体,将肽段呈递给T细胞
HLA分型人类MHC称为HLA,每个人的HLA型别不同
NetMHCpan最主流的MHC-I结合预测工具(v4.1)
pVACseq自动化新抗原预测流水线
nextNEOpiNextflow新抗原预测一体化流程
TMB肿瘤突变负荷,突变越多,潜在新抗原越多
结合亲和力肽段与MHC结合的强度,IC50<500nM为弱结合,<50nM为强结合
免疫原性肽段实际激活T细胞的能力(比结合预测更难)
BigMHC2024年深度学习方法,预测T细胞反应性

各步骤详解

第一步:理解新抗原产生机制

白话解释: 肿瘤细胞里有很多基因突变。有些突变(非同义突变)会改变蛋白质的氨基酸序列。改变后的蛋白被细胞内的蛋白酶切成小片段(8-11个氨基酸),这些片段被MHC分子"举"到细胞表面展示。如果T细胞的受体(TCR)恰好能识别这个片段,就会触发免疫攻击。

新抗原产生流程:
1. 基因突变 → 产生突变蛋白
2. 蛋白酶体切割 → 产生8-11个氨基酸的肽段
3. TAP转运 → 肽段进入内质网
4. MHC-I结合 → 肽段被MHC-I分子夹住
5. 细胞表面呈递 → MHC-肽复合物展示在细胞表面
6. T细胞识别 → CD8+ T细胞通过TCR识别 → 杀伤肿瘤

第二步:体细胞突变检测

白话解释: 首先需要从肿瘤样本中找出所有突变——对比肿瘤和正常组织的测序数据。

# 体细胞突变检测(Mutect2示例)
# 需要:肿瘤BAM + 配对正常BAM + 参考基因组

# 运行Mutect2
gatk Mutect2 \                           # GATK突变检测
  -R /ref/GRCh38.fa \                    # 参考基因组
  -I tumor.bam \                         # 肿瘤BAM
  -I normal.bam \                        # 正常组织BAM
  -normal normal_sample \                # 正常样本名
  --germline-resource af-only-gnomad.vcf.gz \  # gnomAD种系变异数据库
  -O somatic_mutations.vcf.gz            # 输出VCF

# 过滤突变
gatk FilterMutectCalls \                 # 过滤假阳性
  -R /ref/GRCh38.fa \                    # 参考基因组
  -V somatic_mutations.vcf.gz \          # 输入VCF
  -O filtered_mutations.vcf.gz           # 过滤后VCF

# 变异注释(VEP)
vep \                                    # Ensembl VEP注释
  --input_file filtered_mutations.vcf.gz \  # 输入VCF
  --output_file annotated.vcf \          # 输出注释后VCF
  --cache \                              # 使用本地缓存
  --plugin Downstream \                  # 下游效应插件
  --plugin Wildtype \                    # 野生型序列插件
  --format vcf \                         # VCF格式
  --pick                                 # 每个变异选最佳转录本

第三步:HLA分型

白话解释: 每个人的MHC分子(人类叫HLA)不一样,就像每个人的"展示架"形状不同。要预测哪些肽段能被展示,先得知道患者的HLA型别。

# 使用OptiType进行HLA-I分型(从WES/WGS数据)
# 安装:conda install -c bioconda optitype

# 第一步:提取HLA区域的reads
samtools view \                          # 提取reads
  -b tumor.bam \                         # 输入BAM
  chr6:29691116-33054976 \               # HLA区域坐标(GRCh38)
  > hla_reads.bam                        # 输出HLA区域BAM

# 转为FASTQ
samtools fastq \                         # BAM转FASTQ
  -1 hla_R1.fq -2 hla_R2.fq \           # 输出配对FASTQ
  hla_reads.bam                          # 输入BAM

# 第二步:运行OptiType
OptiTypePipeline.py \                    # OptiType主程序
  -i hla_R1.fq hla_R2.fq \              # 输入FASTQ
  --dna \                                # DNA模式(WES/WGS)
  -o optitype_result/ \                  # 输出目录
  -v                                     # 详细输出

# 输出示例:
# A*02:01  A*24:02  B*35:01  B*44:03  C*04:01  C*07:02
# 每个人有6个HLA-I等位基因(A×2, B×2, C×2)

# HLA-II分型(用HLA-HD)
hlahd \                                  # HLA-HD分型
  -t 16 \                                # 线程数
  -f freq_data/ \                        # 频率数据目录
  hla_R1.fq hla_R2.fq \                  # 输入FASTQ
  gene_split/ \                          # 基因分割目录
  HLA_dict/ \                            # HLA字典
  result/                                # 输出目录

第四步:MHC结合预测(NetMHCpan)

白话解释: 把突变产生的肽段"试穿"到患者的HLA分子上,看哪些肽段能"穿得进去"(结合亲和力强)。

# 安装NetMHCpan(需要从DTU申请许可证)
# 下载地址:https://services.healthtech.dtu.dk/services/NetMHCpan-4.1/

# 准备肽段文件(FASTA格式)
# 从VEP注释的突变中提取突变肽段(每个突变±10个氨基酸)
# mutation_peptides.fasta:
# >MUT1_TP53_R273H
# VVRCPHHERCS
# >MUT2_KRAS_G12D
# VVVGADGVGKS

# 运行NetMHCpan-4.1
netMHCpan \                              # 主命令
  -a HLA-A02:01,HLA-A24:02,HLA-B35:01 \  # 患者HLA型别
  -f mutation_peptides.fasta \           # 输入肽段文件
  -l 8,9,10,11 \                         # 预测8-11mer肽段
  -BA \                                  # 同时输出结合亲和力(BA)
  -xls \                                 # 输出Excel格式
  -xlsfile results.xls                   # 输出文件名

# 结果解读:
# %Rank < 0.5: 强结合(Strong Binder, SB)
# %Rank < 2.0: 弱结合(Weak Binder, WB)
# IC50 < 50nM: 强结合
# IC50 < 500nM: 弱结合

# 使用MHCflurry(替代方案,Python)
# pip install mhcflurry
# mhcflurry-downloads fetch

python -c "
from mhcflurry import Class1PresentationPredictor  # 导入预测器
predictor = Class1PresentationPredictor.load()       # 加载模型

# 预测肽段与HLA的结合
results = predictor.predict(
    peptides=['VVVGADGVGKS', 'VVRCPHHERCS'],  # 突变肽段
    alleles=['HLA-A*02:01', 'HLA-A*24:02'],    # HLA型别
    verbose=0
)
print(results[['peptide', 'best_allele', 'presentation_score']])  # 查看结果
"

第五步:pVACseq自动化流程

白话解释: pVACseq把上面所有步骤串成一个自动化流水线——从VCF突变文件到最终的新抗原候选列表。

# 安装pVACseq
pip install pvactools                    # pip安装

# 运行pVACseq
pvacseq run \                            # 主命令
  annotated.vcf \                        # VEP注释后的VCF(必须有Wildtype插件)
  sample_name \                          # 样本名称
  "HLA-A*02:01,HLA-A*24:02,HLA-B*35:01,HLA-B*44:03" \  # HLA型别
  NetMHCpan MHCflurry \                  # 使用的预测算法
  output_dir/ \                          # 输出目录
  -e1 8,9,10,11 \                        # MHC-I肽段长度
  -e2 15 \                               # MHC-II肽段长度(可选)
  --iedb-install-directory /opt/iedb/ \  # IEDB安装目录
  -t 16 \                                # 线程数
  --normal-sample-name normal_sample \   # 配对正常样本名
  --minimum-fold-change 1 \              # 最小fold change
  --binding-threshold 500                # 结合阈值IC50(nM)

# 主要输出文件:
# output_dir/MHC_Class_I/sample_name.filtered.tsv
# 关键列:
# Mutation           → 突变信息
# HLA_Allele         → 结合的HLA等位基因
# MT_IC50_Score      → 突变肽段IC50
# WT_IC50_Score      → 野生型肽段IC50
# Fold_Change        → IC50变化倍数
# Gene_Name          → 基因名
# Variant_Type       → 变异类型(missense等)

第六步:新抗原优先级排序

白话解释: 预测出来的候选新抗原可能有几百个,需要按"最有可能引发免疫反应"的标准排序。

# 读取pVACseq结果
neoantigens <- read.delim(
  "output_dir/MHC_Class_I/sample_name.filtered.tsv"  # pVACseq输出
)

# 优先级打分标准
neoantigens$priority_score <-
  # 1. 结合亲和力越强越好(IC50越小分越高)
  ifelse(neoantigens$MT_IC50_Score < 50, 3,
    ifelse(neoantigens$MT_IC50_Score < 150, 2, 1)) +
  # 2. 野生型不结合 + 突变型结合 = 差异越大越好
  ifelse(neoantigens$Fold_Change > 5, 2, 0) +
  # 3. 变异等位基因频率越高越好(克隆性新抗原)
  ifelse(neoantigens$Tumor_DNA_VAF > 0.3, 2,
    ifelse(neoantigens$Tumor_DNA_VAF > 0.1, 1, 0)) +
  # 4. RNA中有表达
  ifelse(neoantigens$Tumor_RNA_VAF > 0, 1, 0)

# 排序
neoantigens <- neoantigens[order(-neoantigens$priority_score), ]

# 查看top候选
head(neoantigens[, c("Gene_Name", "Mutation", "HLA_Allele",
  "MT_IC50_Score", "Fold_Change", "priority_score")], 20)

常见报错与解决

报错原因解决方案
VEP: Wildtype plugin not found没安装Wildtype插件下载pvactools的VEP插件并配置
NetMHCpan: license expired学术许可证过期重新在DTU网站申请
pVACseq: no neoantigens found过滤太严格或突变太少放宽binding-threshold到1000nM
OptiType: no solutionHLA reads太少确保BAM包含HLA区域reads
MHCflurry: model not downloaded模型没下载运行mhcflurry-downloads fetch
VCF format errorVCF格式不标准用bcftools norm规范化VCF

速查表

# ========== 新抗原预测速查 ==========

# 1. 体细胞突变检测
gatk Mutect2 -R ref.fa -I tumor.bam -I normal.bam -O somatic.vcf

# 2. 变异注释(VEP + Wildtype插件)
vep -i somatic.vcf -o annotated.vcf --plugin Wildtype --cache

# 3. HLA分型
OptiTypePipeline.py -i R1.fq R2.fq --dna -o result/

# 4. MHC结合预测
netMHCpan -a HLA-A02:01 -f peptides.fasta -l 9 -BA

# 5. 自动化流程(pVACseq)
pvacseq run annotated.vcf sample "HLA-A*02:01" NetMHCpan output/

# 6. 筛选标准
# IC50 < 500nM + Fold Change > 1 + VAF > 0.1 + RNA表达 > 0

面试高频问题

Q1: 什么是新抗原?和肿瘤相关抗原(TAA)有什么区别?

新抗原(Neoantigen)来自肿瘤特异性体细胞突变,只存在于肿瘤细胞,理论上免疫攻击不会伤害正常组织。TAA是正常组织也有但在肿瘤中过表达的蛋白(如HER2、CEA),免疫攻击可能有脱靶毒性。新抗原是个性化肿瘤疫苗的理想靶点。

Q2: MHC-I和MHC-II呈递的区别?

MHC-I呈递8-11个氨基酸的肽段给CD8+ T细胞(杀伤性T细胞),几乎所有有核细胞都表达。MHC-II呈递13-25个氨基酸的肽段给CD4+ T细胞(辅助性T细胞),主要在抗原呈递细胞(树突细胞、巨噬细胞)上表达。新抗原预测通常以MHC-I为主。

Q3: NetMHCpan的预测结果怎么解读?

两个关键指标:(1) %Rank(推荐):<0.5%为强结合(SB),<2%为弱结合(WB);(2) IC50(nM):<50nM为强结合,<500nM为弱结合。%Rank更可靠,因为它不受HLA等位基因间的系统性差异影响。同时要看野生型肽段的结合——突变型强结合+野生型弱结合才是好的新抗原候选。

Q4: 预测结合≠预测免疫原性,怎么理解?

MHC结合预测只回答"肽段能不能被展示",但展示出来不代表T细胞就会识别。免疫原性还取决于:(1) TCR库中是否有能识别的T细胞;(2) 肽段是否与自身蛋白太相似(免疫耐受);(3) 肿瘤微环境是否允许免疫激活。BigMHC等新工具试图直接预测T细胞反应性,但准确率仍有限。

Q5: 新抗原预测在临床上有什么应用?

(1) 个性化肿瘤疫苗:根据患者特异的新抗原设计mRNA/肽段疫苗;(2) 免疫治疗疗效预测:高TMB/新抗原负荷的患者对免疫检查点抑制剂(PD-1/PD-L1)反应更好;(3) TCR-T细胞治疗:设计靶向新抗原的工程化T细胞;(4) 最小残留病灶监测:追踪新抗原特异性T细胞。