肿瘤突变负荷(TMB)计算与解读¶
一句话概述:TMB 是肿瘤基因组中体细胞突变的总数(通常以 mut/Mb 为单位),是免疫治疗响应的重要预测标志物,TMB-H (≥10 mut/Mb) 的患者更可能从免疫检查点抑制剂中获益。
核心知识点速查表¶
| 概念 | 白话解释 |
|---|---|
| TMB | 肿瘤突变负荷 = 每百万碱基的突变数 |
| TMB-H | TMB高(≥10 mut/Mb),FDA批准的免疫治疗标志物 |
| WES | 全外显子组测序,TMB的金标准计算方法 |
| Panel | 靶向测序面板,临床常用(如F1CDx、MSK-IMPACT) |
| 非同义突变 | 改变蛋白质的突变(WES计算时只算这些) |
| 新抗原 | 突变产生的新蛋白片段,被免疫系统识别 |
| ICB | 免疫检查点阻断治疗(如PD-1/PD-L1抑制剂) |
| bTMB | 血液TMB,从ctDNA计算 |
一、TMB 的原理(白话版)¶
比喻:肿瘤细胞就像"犯了很多错误的细胞"。错误越多(突变越多),细胞表面就会出现越多"不正常的标记"(新抗原)。免疫系统就像警察,标记越多越容易发现"坏人"。所以 TMB 高的肿瘤对免疫治疗响应好——因为免疫系统有更多"线索"来识别和杀灭肿瘤。
二、从 WES 计算 TMB¶
第 1 步:体细胞突变检测¶
# TMB计算的前提:准确的体细胞突变检测
# 标准流程:配对样本(肿瘤+正常)→ Mutect2
# 运行 Mutect2
gatk Mutect2 \
-R reference.fa \ # 参考基因组
-I tumor.bam \ # 肿瘤样本BAM
-I normal.bam \ # 正常样本BAM
-normal normal_sample_name \ # 正常样本名
--germline-resource af-only-gnomad.vcf.gz \ # gnomAD数据库
--panel-of-normals pon.vcf.gz \ # 正常样本面板
-O somatic_mutations.vcf.gz # 输出体细胞突变
# 过滤突变
gatk FilterMutectCalls \
-R reference.fa \
-V somatic_mutations.vcf.gz \ # 原始突变
-O filtered_mutations.vcf.gz # 过滤后突变
# 只保留 PASS 的突变
bcftools view -f PASS \ # 只保留PASS
filtered_mutations.vcf.gz \
> pass_mutations.vcf
第 2 步:计算 TMB¶
# ========== Python脚本:从VCF计算TMB ==========
import pysam # VCF解析库
def calculate_tmb(vcf_file, exome_size_mb=35.0):
"""
从过滤后的体细胞突变VCF计算TMB
参数:
vcf_file: 过滤后的VCF文件
exome_size_mb: 外显子组有效区域大小(Mb)
WES通常约35Mb(编码区域)
"""
vcf = pysam.VariantFile(vcf_file) # 打开VCF
total_mutations = 0 # 总突变数
nonsynonymous = 0 # 非同义突变数
synonymous = 0 # 同义突变数
for record in vcf: # 遍历每个变异
# 只计算SNV和小indel
if record.filter.keys() == ['PASS']: # 只看PASS的变异
total_mutations += 1 # 计数
# 如果有功能注释信息(VEP/SnpEff)
info = record.info
if 'ANN' in info: # SnpEff注释
ann = info['ANN'][0]
if 'missense' in ann or 'nonsense' in ann:
nonsynonymous += 1
elif 'synonymous' in ann:
synonymous += 1
# TMB计算
# 方法1:所有突变(Panel常用)
tmb_all = total_mutations / exome_size_mb # 所有突变/Mb
# 方法2:只算非同义突变(WES经典方法)
tmb_nonsyn = nonsynonymous / exome_size_mb # 非同义突变/Mb
print(f"总突变数: {total_mutations}")
print(f"非同义突变: {nonsynonymous}")
print(f"TMB (所有突变): {tmb_all:.1f} mut/Mb")
print(f"TMB (仅非同义): {tmb_nonsyn:.1f} mut/Mb")
# TMB分级
if tmb_all >= 10:
print("TMB分级: TMB-High (≥10 mut/Mb)")
print("→ 可能从免疫检查点抑制剂获益")
else:
print("TMB分级: TMB-Low (<10 mut/Mb)")
return tmb_all
# 运行
tmb = calculate_tmb("pass_mutations.vcf", exome_size_mb=35.0)
第 3 步:从 Panel 数据计算 TMB¶
# Panel(如F1CDx覆盖约1.1Mb)的TMB计算
# Panel TMB包含同义+非同义突变(提高小区域的灵敏度)
def calculate_panel_tmb(vcf_file, panel_size_mb):
"""Panel TMB计算"""
import pysam
vcf = pysam.VariantFile(vcf_file)
mutation_count = 0
for record in vcf:
if record.filter.keys() == ['PASS']:
# Panel TMB包含所有类型的非驱动突变
# 排除:已知驱动突变、hotspot、germline
# 排除:indel > 某个长度
ref_len = len(record.ref) # ref长度
alt_len = max(len(a) for a in record.alts) # alt长度
if abs(ref_len - alt_len) <= 20: # 排除大indel
mutation_count += 1
tmb = mutation_count / panel_size_mb # TMB = 突变数/面板大小
print(f"Panel TMB: {tmb:.1f} mut/Mb")
print(f"Panel大小: {panel_size_mb} Mb")
print(f"突变数: {mutation_count}")
return tmb
# FoundationOne CDx: panel_size_mb = 1.1
# MSK-IMPACT: panel_size_mb = 1.2 (468基因) 或 1.7 (505基因)
三、TMB 的临床应用¶
TMB 与免疫治疗¶
# FDA 批准的 TMB 相关适应症:
#
# Pembrolizumab (Keytruda):
# - 适用于 TMB-H (≥10 mut/Mb) 的实体瘤
# - 2020年FDA批准
# - 需要经 FDA 批准的伴随诊断检测
#
# 检测方法要求:
# - FoundationOne CDx (F1CDx) — FDA批准的伴随诊断
# - 其他Panel需要与F1CDx做比对验证
# TMB 阈值参考:
# FDA: ≥10 mut/Mb (F1CDx)
# NCCN NSCLC: ≥10 mut/Mb
# 学术研究常用: ≥17 mut/Mb (区分MSI-H/MSS)
# bTMB (血液): ≥16-20 mut/Mb (因Panel不同而异)
TMB 与 MSI 的关系¶
# TMB 和 MSI 的关系:
# MSI-H 肿瘤通常 TMB 也高(因为MMR缺陷导致大量突变)
# 但 TMB-H ≠ MSI-H(有些TMB高是其他原因,如POLE突变)
#
# Venn 图关系:
# MSI-H 几乎都是 TMB-H
# TMB-H 中只有一部分是 MSI-H
# 两者结合使用可以更精确地预测免疫治疗响应
四、常见报错与注意事项¶
| 问题 | 说明 | 解决方法 |
|---|---|---|
| Panel TMB 与 WES TMB 不一致 | Panel覆盖区域小,变异性大 | Panel ≥1Mb才可靠,用校准系数 |
| 低纯度肿瘤 TMB 偏低 | 正常细胞稀释了突变信号 | 肿瘤纯度校正或提高测序深度 |
| germline 变异未过滤 | 胚系变异被当成体细胞突变 | 配对正常样本或用gnomAD过滤 |
| 不同Panel不可比 | 覆盖区域和计算方法不同 | 使用统一标准(如TMB Harmonization Project) |
| TMB-H 但免疫治疗无效 | TMB不是完美预测指标 | 结合PD-L1、MSI、TILs等综合评估 |
五、面试高频问题¶
Q1:TMB 怎么计算?
TMB = 体细胞突变数 / 测序覆盖区域大小(Mb)。WES 通常只算非同义突变,有效区域约 35Mb。Panel 通常算所有突变(包括同义),面板大小约 1~2Mb。
Q2:TMB-H 为什么预测免疫治疗响应?
TMB高 → 产生更多新抗原 → 肿瘤细胞表面展示更多"异常标记" → 免疫系统更容易识别 → 免疫检查点抑制剂(解除免疫刹车)效果更好。
Q3:TMB 的局限性?
(1) 不是所有 TMB-H 患者都响应免疫治疗(假阳性);(2) 部分 TMB-L 患者也可能响应;(3) 不同检测平台和计算方法的 TMB 可比性差;(4) 不考虑新抗原的免疫原性质量。
六、速查表¶
# === TMB 计算速查 ===
# 1. 体细胞突变检测
gatk Mutect2 -R ref.fa -I tumor.bam -I normal.bam -normal N -O somatic.vcf.gz
gatk FilterMutectCalls -R ref.fa -V somatic.vcf.gz -O filtered.vcf.gz
# 2. TMB 计算
# WES: TMB = 非同义突变数 / 35 Mb
# Panel: TMB = 所有突变数 / Panel大小(Mb)
# 3. TMB 阈值
# TMB-H: ≥10 mut/Mb (FDA/F1CDx)
# 研究常用: ≥17 mut/Mb
# 4. 相关工具
# TMBcalc — 自动化TMB计算pipeline
# maftools (R包) — 从MAF文件计算TMB
# TMB计算公式: TMB = (total_mutations) / (panel_size_Mb)
参考资料:FDA Keytruda TMB-H适应症 2020、TMBcalc (Privitera et al. 2024, Frontiers in Genetics)、NCCN NSCLC Guidelines 2024