肿瘤驱动基因鉴定¶
一句话说明¶
肿瘤基因组里有成千上万个突变,但大部分是"搭车客"(passenger),真正驱动肿瘤发生发展的"驾驶员"(driver)基因只有少数几个,鉴定它们是精准治疗的基础。
核心知识点¶
1. 驱动基因 vs 乘客突变¶
- Driver(驱动突变):直接促进肿瘤发生、生长或转移的突变(白话:引发火灾的火柴)
- Passenger(乘客突变):肿瘤发展过程中随机积累的、无功能意义的突变(白话:火灾现场被烧毁的家具,是结果不是原因)
- 典型肿瘤:2-8 个驱动突变 + 数千个乘客突变
2. 驱动基因鉴定方法¶
| 方法 | 原理 | 代表工具 |
|---|---|---|
| 频率法 | 某基因突变频率显著高于背景 | MutSigCV, MuSiC |
| 功能影响法 | 突变对蛋白功能的影响评分 | OncodriveFML, CHASM |
| 聚集法 | 突变在蛋白结构上聚集(hotspot) | OncodriveCLUSTL, e-Driver |
| 网络法 | 突变富集在特定通路/网络 | NetSig, DriverNet |
| 机器学习法 | 综合多种特征预测 | DriverML, MOAT |
3. 关键数据库¶
- COSMIC:最全的肿瘤体细胞突变数据库
- OncoKB:临床可操作的肿瘤基因注释(MSK 维护)
- CIViC:社区驱动的临床变异注释
- CGC(Cancer Gene Census):已确认的癌基因/抑癌基因列表
- IntOGen:系统性驱动基因鉴定结果
4. 驱动基因的两种类型¶
- 癌基因(Oncogene):功能获得性突变激活(白话:油门踩到底)
- 特征:热点突变、同一密码子反复突变
- 例子:KRAS G12D, BRAF V600E, EGFR L858R
- 抑癌基因(Tumor Suppressor):功能丧失性突变失活(白话:刹车坏了)
- 特征:截断突变分散分布、纯合缺失、LOH
- 例子:TP53, RB1, PTEN
实战代码¶
# === 使用 MutSigCV 鉴定驱动基因 ===
# 1. 准备输入文件(MAF 格式)
# MAF 文件包含所有样本的突变信息
# 通常从 Mutect2 → VEP → maf_tools 转换
# 2. 运行 MutSigCV(MATLAB 版本)
# MutSigCV 需要三个输入:突变文件、覆盖度文件、协变量文件
matlab -nodisplay -r \
"MutSigCV('mutations.maf', 'coverage.txt', \
'covariates.txt', 'mutsig_output')"
# === 使用 dNdScv(R包,更现代的方法) ===
# === dNdScv:基于 dN/dS 的驱动基因鉴定 ===
library(dndscv) # 加载dNdScv包
# 1. 准备输入数据(最少4列)
# sampleID, chr, pos, ref, alt
mutations <- read.table( # 读取突变文件
"somatic_mutations.txt", # 突变文件
header = TRUE # 有表头
)
# 2. 运行 dNdScv
result <- dndscv( # 运行分析
mutations, # 突变数据
refdb = "hg38", # 参考基因组版本
max_muts_per_gene_per_sample = 3, # 每样本每基因最多3个突变
max_coding_muts_per_sample = 5000 # 每样本最多编码突变数
)
# 3. 查看显著驱动基因(q值<0.1)
sig_genes <- result$sel_cv # 基因选择结果
sig_drivers <- sig_genes[
sig_genes$qallsubs_cv < 0.1, # 全局q值<0.1
]
print(sig_drivers[, c("gene_name", # 打印基因名
"n_syn", # 同义突变数
"n_mis", # 错义突变数
"n_non", # 无义突变数
"wmis_cv", # 错义dN/dS
"wnon_cv", # 无义dN/dS
"qallsubs_cv")]) # q值
# 4. 判断驱动类型(癌基因 vs 抑癌基因)
for (i in 1:nrow(sig_drivers)) { # 遍历每个驱动基因
gene <- sig_drivers$gene_name[i] # 基因名
wmis <- sig_drivers$wmis_cv[i] # 错义dN/dS
wnon <- sig_drivers$wnon_cv[i] # 无义dN/dS
if (wmis > 1 & wnon <= 1) { # 错义高、无义不高
cat(gene, "→ 可能是癌基因\n") # 功能获得型
} else if (wnon > 1) { # 无义突变显著
cat(gene, "→ 可能是抑癌基因\n") # 功能丧失型
}
}
# 使用 OncoKB API 注释驱动突变的临床意义
import requests # HTTP请求库
import pandas as pd # 数据处理
def annotate_oncokb(mutations_df, token):
"""用 OncoKB 注释突变的临床可操作性"""
url = "https://www.oncokb.org/api/v1/annotate/mutations/byProteinChange"
headers = {"Authorization": f"Bearer {token}"} # API密钥
results = [] # 存储注释结果
for _, row in mutations_df.iterrows(): # 遍历突变
params = {
"hugoSymbol": row["gene"], # 基因名
"alteration": row["protein_change"], # 蛋白变化
"tumorType": row["cancer_type"], # 癌种
}
resp = requests.get(url, headers=headers, params=params)
if resp.status_code == 200: # 请求成功
data = resp.json()
results.append({
"gene": row["gene"],
"mutation": row["protein_change"],
"oncogenic": data.get("oncogenic", ""), # 是否致癌
"level": data.get("highestSensitiveLevel", ""), # 最高证据等级
"drugs": data.get("treatments", []) # 对应药物
})
return pd.DataFrame(results) # 返回注释表
# 使用示例
# result = annotate_oncokb(mutations, "YOUR_ONCOKB_TOKEN")
面试常问点¶
★ 怎么区分驱动突变和乘客突变?¶
参考答案:主要看三个维度:(1) 频率——驱动突变在大量肿瘤样本中反复出现(如 BRAF V600E 在 ~50% 黑色素瘤中出现),乘客突变是随机的;(2) 功能影响——驱动突变通常影响蛋白关键功能域,改变蛋白活性;(3) 正选择信号——驱动突变的非同义/同义比(dN/dS)显著 >1,说明受到正选择。工具如 MutSigCV 和 dNdScv 就是通过统计方法综合判断。
★ dN/dS 比值在驱动基因鉴定中的作用?¶
参考答案:dN/dS 是非同义突变率(dN)与同义突变率(dS)的比值。同义突变不改变蛋白序列,被认为是中性的(作为背景突变率)。如果一个基因的 dN/dS > 1,说明非同义突变频率超过预期,受到了正选择——这是驱动基因的标志。如果 dN/dS ≈ 1,说明中性进化(乘客基因)。如果 dN/dS < 1,说明受到负选择(对细胞有害的突变被淘汰了)。
速查卡片¶
| 问题 | 答案 |
|---|---|
| 驱动基因 | 直接促进肿瘤发展的关键基因 |
| 乘客突变 | 随机积累、无功能意义 |
| 典型驱动突变数 | 2-8 个/肿瘤 |
| 频率法工具 | MutSigCV, MuSiC |
| dN/dS 方法 | dNdScv |
| 临床注释库 | OncoKB, CIViC |
| 癌基因特征 | 热点突变、功能获得 |
| 抑癌基因特征 | 截断突变分散、功能丧失 |
| 常见驱动基因 | TP53, KRAS, EGFR, BRAF, PIK3CA |
| MAF 格式 | Mutation Annotation Format |