免疫治疗生物标志物分析¶
一句话说明¶
免疫治疗不是对所有人都有效,需要通过生物标志物(如 PD-L1 表达、TMB、MSI、免疫细胞浸润等)来预测哪些患者最可能获益——这就是精准免疫治疗的生信分析核心。
核心知识点¶
1. 主要免疫治疗生物标志物¶
| 标志物 | 检测方法 | 临床应用 |
|---|---|---|
| PD-L1 表达 | IHC 蛋白染色 | PD-1/PD-L1 抑制剂适应症 |
| TMB | WES/Panel NGS | Keytruda 泛癌种 |
| MSI/dMMR | NGS/PCR/IHC | Keytruda 泛癌种 |
| 新抗原负荷 | WES + HLA 分型 + 预测 | 研究阶段 |
| 免疫细胞浸润 | 转录组反卷积 | 研究/临床辅助 |
| 肿瘤微环境 | 单细胞/空间转录组 | 研究阶段 |
| GEP(基因表达谱) | RNA-seq | T细胞炎性评分 |
2. 免疫细胞浸润评估(反卷积)¶
- 原理:从 bulk RNA-seq 数据推断肿瘤组织中各种免疫细胞的比例(白话:从一杯混合果汁反推出各种水果的比例)
- 工具:CIBERSORT, CIBERSORTx, TIMER, MCP-counter, EPIC, quanTIseq
- 输出:每种免疫细胞类型的估计比例(T 细胞、B 细胞、巨噬细胞、NK 细胞等)
3. 新抗原预测流程¶
- HLA 分型:从 WES/RNA-seq 推断 HLA 基因型(OptiType, HLA-HD) - 结合预测:预测突变肽段与患者 HLA 分子的亲和力(NetMHCpan)4. 免疫相关基因签名¶
- T 细胞炎性基因签名(GEP):18 个基因的表达评分,预测 PD-1 治疗响应
- IFN-γ 签名:干扰素γ通路基因的表达水平
- 免疫排斥表型:TGF-β 信号通路高表达,免疫细胞被排斥在肿瘤外围
实战代码¶
# === CIBERSORT 免疫细胞浸润分析 ===
# 安装和加载
# CIBERSORT 需要从官网下载 R 源码(需注册)
source("CIBERSORT.R") # 加载CIBERSORT函数
# 1. 准备表达矩阵(TPM 或 FPKM,行=基因,列=样本)
expr_matrix <- read.table(
"expression_tpm.txt", # TPM表达矩阵
header = TRUE, row.names = 1, # 有表头和行名
sep = "\t" # 制表符分隔
)
# 2. 运行 CIBERSORT(LM22 参考签名)
results <- CIBERSORT(
sig_matrix = "LM22.txt", # 22种免疫细胞参考签名
mixture_file = "expression_tpm.txt", # 表达矩阵
perm = 100, # 置换次数(统计检验)
QN = TRUE # 分位数归一化
)
# 3. 提取结果(前22列是细胞比例)
immune_fractions <- results[, 1:22] # 22种免疫细胞比例
p_values <- results[, "P-value"] # 统计显著性
# 4. 可视化
library(ggplot2) # 绑图库
library(tidyr) # 数据整理
# 转为长格式
long_df <- as.data.frame(immune_fractions)
long_df$sample <- rownames(long_df) # 添加样本列
long_df <- pivot_longer(long_df, # 转长格式
cols = -sample, # 除样本列外
names_to = "cell_type", # 细胞类型
values_to = "fraction" # 比例
)
# 绘制堆积柱状图
ggplot(long_df, aes(x = sample, y = fraction, fill = cell_type)) +
geom_bar(stat = "identity") + # 堆积柱状图
theme(axis.text.x = element_text(angle = 45, hjust = 1)) + # X轴旋转
labs(title = "肿瘤免疫细胞浸润分析",
y = "细胞比例", x = "样本")
# === 新抗原预测流程 ===
import subprocess # 系统命令
# 1. HLA 分型(从 WES BAM 推断)
def run_optitype(bam_path, output_dir):
"""用 OptiType 进行 HLA-I 分型"""
cmd = (
f"OptiTypePipeline.py " # OptiType主程序
f"-i {bam_path} " # 输入BAM
f"--dna " # DNA模式
f"-o {output_dir} " # 输出目录
f"-v" # 详细输出
)
subprocess.run(cmd, shell=True) # 执行
# 2. 从突变生成肽段序列
def generate_peptides(vcf_path, ref_fasta, peptide_length=9):
"""从 VCF 突变生成突变肽段(简化示例)"""
# 实际使用 pvacseq 或 vaxrank 等专用工具
cmd = (
f"pvacseq run " # pVACseq 新抗原预测
f"{vcf_path} " # 输入VCF(需VEP注释)
f"sample_name " # 样本名
f"HLA-A*02:01,HLA-B*07:02 " # HLA类型(从OptiType获取)
f"NetMHCpan " # 结合预测方法
f"pvacseq_output/ " # 输出目录
f"-e1 8,9,10,11 " # MHC-I肽段长度
f"--iedb-install-directory /opt/iedb " # IEDB路径
f"-t 8" # 线程数
)
subprocess.run(cmd, shell=True) # 执行
# 3. 筛选高亲和力新抗原
import pandas as pd
neoantigen_df = pd.read_csv("pvacseq_output/MHC_Class_I/sample.filtered.tsv",
sep="\t")
# 筛选条件
strong_binders = neoantigen_df[
(neoantigen_df["Median MT IC50"] < 500) & # 突变肽结合力 <500nM
(neoantigen_df["Median WT IC50"] > 500) & # 野生型结合力 >500nM
(neoantigen_df["Tumor DNA VAF"] > 0.1) # 突变VAF >10%
]
print(f"强结合新抗原候选数: {len(strong_binders)}")
面试常问点¶
★ 为什么需要多个生物标志物联合预测免疫治疗效果?¶
参考答案:因为单一标志物都有局限性。PD-L1 表达可能被肿瘤微环境动态调控,假阴性率高;TMB 不考虑突变的免疫原性;MSI 只反映一种突变机制。实际上免疫治疗是否有效取决于多个因素的综合:肿瘤是否产生了新抗原(TMB/新抗原负荷)、免疫系统是否能识别(HLA 类型、抗原呈递)、免疫细胞是否浸润到肿瘤内部(TIL/GEP)、肿瘤是否有免疫逃逸机制(PD-L1、TGF-β)。联合使用多个标志物能提高预测准确性。
★ CIBERSORT 的原理是什么?¶
参考答案:CIBERSORT 使用支持向量回归(SVR)解决反卷积问题。它有一个预先定义的 22 种免疫细胞的基因表达参考签名(LM22),然后把肿瘤的 bulk RNA-seq 表达谱看作这 22 种细胞以不同比例混合的结果。SVR 模型找到一组最优的比例系数,使得参考签名的加权混合最接近实际观测的表达谱。通过置换检验评估结果的统计显著性。
速查卡片¶
| 问题 | 答案 |
|---|---|
| PD-L1 检测方法 | IHC(免疫组化) |
| TMB 阈值 | >= 10 mut/Mb |
| MSI 检测 | NGS / PCR / IHC |
| 反卷积工具 | CIBERSORT, TIMER, MCP-counter |
| HLA 分型工具 | OptiType, HLA-HD |
| 新抗原预测 | pVACseq, NetMHCpan |
| GEP 基因签名 | 18 基因 T细胞炎性评分 |
| 联合预测优势 | 提高准确性,覆盖多维度 |
| 免疫排斥标志 | TGF-β 高表达 |
| 临床级标志物 | PD-L1、TMB、MSI(FDA批准) |