免疫治疗标志物与免疫检查点预测¶
一句话概述:通过 TMB、MSI、PD-L1 表达、新抗原负荷、免疫浸润评分等多维度标志物综合预测患者对免疫检查点抑制剂(ICB)的响应概率。
核心知识点速查表¶
| 概念 | 白话解释 |
|---|---|
| ICB | 免疫检查点阻断(如抗PD-1/PD-L1/CTLA-4) |
| PD-1/PD-L1 | 免疫刹车分子,肿瘤利用它逃避免疫 |
| TMB | 肿瘤突变负荷(突变多→新抗原多→响应好) |
| MSI-H/dMMR | 错配修复缺陷(突变极多→响应非常好) |
| TILs | 肿瘤浸润淋巴细胞(T细胞越多→响应越好) |
| 新抗原(Neoantigen) | 突变产生的新蛋白片段,被T细胞识别 |
| TIDE | 肿瘤免疫功能障碍与排斥评分 |
| TCR多样性 | T细胞受体多样性,反映免疫应答广度 |
一、免疫治疗预测概念(白话版)¶
比喻:免疫治疗就像"解除警察(T细胞)的手铐"。但不是所有病人都适合: 1. 有没有"线索"?→ TMB/新抗原(突变越多,免疫识别越容易) 2. 警察(T细胞)在不在现场?→ TILs/免疫浸润 3. 手铐(免疫检查点)锁上了吗?→ PD-L1表达 4. 犯人(肿瘤)有没有其他逃跑手段?→ 免疫逃逸机制
二、标志物 1:新抗原预测¶
# 新抗原预测流程:体细胞突变 → 突变肽段 → MHC结合预测
# 第 1 步:从突变生成候选肽段
# 用 pvacseq(pVACtools 的一部分)
pip install pvactools # 安装pVACtools
# 第 2 步:HLA 分型(确定患者的 MHC 类型)
# 用 OptiType 从 WES 数据推断 HLA 分型
conda install -c bioconda optitype
OptiType -i sample_R1.fastq.gz sample_R2.fastq.gz \ # 输入FASTQ
--dna \ # DNA测序数据
--outdir optitype_results/ # 输出目录
# 输出 HLA 分型,例如:HLA-A*02:01, HLA-B*07:02, HLA-C*07:01
# 第 3 步:运行 pVACseq 预测新抗原
pvacseq run \
annotated_somatic.vcf \ # VEP注释后的体细胞突变VCF
sample_name \ # 样本名
"HLA-A*02:01,HLA-B*07:02" \ # HLA分型结果
MHCflurry MHCnuggetsI NetMHCpan \ # 预测算法(多个)
neoantigen_results/ \ # 输出目录
-e1 8,9,10,11 \ # MHC-I肽段长度(8-11个氨基酸)
--iedb-install-directory /path/to/iedb # IEDB安装目录
# 输出文件:
# all_epitopes.tsv — 所有候选新抗原
# filtered.tsv — 过滤后的高置信度新抗原
# 包含:突变信息、肽段序列、IC50结合亲和力
# IC50 < 500nM → 可能被MHC展示
# IC50 < 50nM → 强结合(高优先级新抗原候选)
新抗原质量评估¶
# ========== Python脚本:新抗原质量评分 ==========
import pandas as pd
# 读取 pVACseq 结果
epitopes = pd.read_csv("neoantigen_results/all_epitopes.tsv",
sep="\t") # 读取结果
# 优先排序标准
# 1. IC50 < 500nM(MHC结合力)
# 2. 突变型IC50 < 野生型IC50(突变增强结合)
# 3. 基因表达量高(RNA-seq数据)
# 4. 克隆突变优于亚克隆突变
# 5. VAF高
# 综合评分
epitopes['agretopicity'] = (
epitopes['WT IC50 Score'] / epitopes['MT IC50 Score'] # 突变/野生型IC50比
)
# agretopicity > 1 → 突变增强了MHC结合(好的新抗原特征)
# 筛选高优先级新抗原
high_priority = epitopes[
(epitopes['MT IC50 Score'] < 500) & # 结合力强
(epitopes['agretopicity'] > 1.5) & # 突变增强结合
(epitopes['Tumor DNA VAF'] > 0.1) # VAF>10%
]
print(f"高优先级新抗原数量: {len(high_priority)}")
high_priority.to_csv("high_priority_neoantigens.tsv",
sep="\t", index=False)
三、标志物 2:免疫浸润分析¶
# ========== R脚本:CIBERSORT 免疫细胞反卷积 ==========
# CIBERSORT 从bulk RNA-seq估计免疫细胞比例
# 使用 immunedeconv 包(整合多种方法)
# install.packages("immunedeconv")
library(immunedeconv) # 加载包
# 读取表达矩阵(TPM格式)
expr <- read.csv("expression_tpm.csv", row.names=1) # 基因×样本矩阵
# 运行 CIBERSORT
cibersort_result <- deconvolute(
expr, # 表达矩阵
method = "cibersort_abs" # CIBERSORT绝对模式
)
# 运行其他方法比较
timer_result <- deconvolute(expr, method = "timer") # TIMER
xcell_result <- deconvolute(expr, method = "xcell") # xCell
# 提取关键免疫细胞比例
# CD8+ T细胞比例高 → 免疫热肿瘤 → 可能响应ICB
# Treg比例高 → 免疫抑制 → 可能不响应
四、标志物 3:TIDE 综合评分¶
# TIDE(Tumor Immune Dysfunction and Exclusion)
# 在线工具:http://tide.dfci.harvard.edu/
# 也可以用 Python API
pip install tidepy # 安装tidepy(如果可用)
# 或直接用R/Python提交
# 准备输入:基因表达矩阵(TPM,行=基因,列=样本)
# 上传到 TIDE 网站或使用 API
# TIDE 评分解读:
# TIDE score 高 → 预测不响应ICB
# TIDE score 低 → 预测响应ICB
# TIDE 考虑两个维度:
# - Dysfunction: T细胞功能障碍程度
# - Exclusion: T细胞被排斥程度
五、多标志物综合预测¶
# ========== 综合ICB响应预测 ==========
import pandas as pd
def predict_icb_response(tmb, msi_status, pdl1_tps,
cd8_infiltration, tide_score,
neoantigen_count):
"""综合多标志物预测ICB响应"""
score = 0 # 初始评分
evidence = []
# TMB
if tmb >= 10:
score += 2
evidence.append(f"TMB-H ({tmb} mut/Mb)") # TMB高
# MSI
if msi_status == "MSI-H":
score += 3 # MSI-H权重最高
evidence.append("MSI-H/dMMR")
# PD-L1
if pdl1_tps >= 50:
score += 2
evidence.append(f"PD-L1 TPS≥50% ({pdl1_tps}%)")
elif pdl1_tps >= 1:
score += 1
evidence.append(f"PD-L1 TPS 1-49% ({pdl1_tps}%)")
# CD8 浸润
if cd8_infiltration == "high":
score += 1
evidence.append("CD8+ T cell high")
# TIDE
if tide_score < 0:
score += 1
evidence.append(f"TIDE favorable ({tide_score:.2f})")
# 新抗原
if neoantigen_count >= 10:
score += 1
evidence.append(f"High neoantigen load ({neoantigen_count})")
# 综合判断
if score >= 5:
prediction = "Likely Responder" # 可能响应
elif score >= 3:
prediction = "Possible Responder" # 可能响应
else:
prediction = "Unlikely Responder" # 不太可能响应
print(f"ICB响应预测: {prediction} (Score: {score}/10)")
print(f"支持证据: {', '.join(evidence)}")
return prediction, score
# 使用示例
predict_icb_response(
tmb=15, msi_status="MSS", pdl1_tps=60,
cd8_infiltration="high", tide_score=-0.5,
neoantigen_count=25
)
六、常见报错与解决¶
| 问题 | 原因 | 解决方法 |
|---|---|---|
| OptiType HLA分型失败 | 测序深度不够 | HLA区域需要 >30X 深度 |
| 新抗原预测全部 IC50>500 | HLA分型不准或突变类型不适合 | 检查HLA分型,考虑MHC-II |
| CIBERSORT结果全0 | 基因名格式不对 | 确保用 HUGO gene symbol |
| TIDE评分与临床不符 | TIDE基于特定训练集 | TIDE是预测工具不是诊断工具 |
七、面试高频问题¶
Q1:免疫治疗常用的预测标志物有哪些?
(1) PD-L1 表达(IHC);(2) TMB-H(≥10 mut/Mb);(3) MSI-H/dMMR;(4) TILs(CD8+ T细胞浸润);(5) 新抗原负荷;(6) 基因表达谱(如TIDE、GEP)。单个标志物不够完美,多标志物联合预测更准确。
Q2:为什么有些 TMB-H 患者免疫治疗无效?
(1) 新抗原质量差(虽然多但不被MHC展示);(2) T细胞被排斥在肿瘤外(cold tumor);(3) 肿瘤有其他免疫逃逸机制(如β2M丢失、HLA缺失);(4) 免疫抑制微环境(Treg/MDSC多)。
Q3:免疫热肿瘤 vs 免疫冷肿瘤?
热肿瘤:大量T细胞浸润到肿瘤内部,对ICB响应率高。冷肿瘤:T细胞很少或被阻挡在肿瘤边缘,对ICB响应差。治疗策略:将冷肿瘤变热(联合放疗、溶瘤病毒、CAR-T等)。
八、速查表¶
# === 免疫治疗标志物速查 ===
# FDA批准的ICB预测标志物:
# PD-L1 TPS ≥1% (NSCLC一线pembrolizumab)
# PD-L1 CPS ≥10 (胃癌pembrolizumab)
# TMB ≥10 mut/Mb (所有实体瘤pembrolizumab)
# MSI-H/dMMR (所有实体瘤pembrolizumab)
# 新抗原预测工具:
# pVACseq (pVACtools) — 标准新抗原预测
# NetMHCpan — MHC结合预测
# OptiType — HLA分型
# 免疫浸润分析:
# CIBERSORT/CIBERSORTx — 免疫反卷积
# TIMER — 肿瘤免疫估计
# xCell — 64种细胞类型
# 综合评分:
# TIDE — 免疫功能障碍和排斥
# GEP (18-gene) — Merck开发的基因表达谱
参考资料:pVACtools (Hundal et al. 2020)、TIDE (Jiang et al. 2018)、CIBERSORTx、NCCN Biomarker Compendium 2024