泛癌分析方法与流程¶
一句话说明¶
泛癌分析就是把几十种不同癌症的数据放在一起统一分析,找出跨癌种的共同规律——哪些基因在多种癌症中都突变、哪些通路是"万能靶点"、不同癌种是否有相似的分子亚型。
核心知识点¶
1. 什么是泛癌分析¶
- 定义:跨越多种肿瘤类型的系统性比较分析(Pan-Cancer Analysis)
- 代表项目:TCGA Pan-Cancer Atlas(33 种癌症,超过 11,000 例样本)
- 核心思想:癌症不应只按器官分类,同一器官的癌症可能有不同的分子机制,不同器官的癌症可能有相似的分子特征
- 白话:不同工厂(器官)出的故障(癌症)可能是同一个零件(基因)坏了
2. TCGA 数据结构¶
| 数据类型 | 样本规模 | 说明 |
|---|---|---|
| WES 突变 | ~10,000 | 体细胞突变(MAF) |
| 拷贝数 | ~11,000 | SNP array + WES |
| 基因表达 | ~11,000 | RNA-seq (RSEM/TPM) |
| DNA 甲基化 | ~10,000 | 450K array |
| 临床信息 | ~11,000 | 生存、分期、治疗等 |
| miRNA | ~10,000 | miRNA-seq |
3. 泛癌分析的主要方向¶
- 突变全景图:哪些基因在多癌种中高频突变
- 突变签名分析:不同突变过程的指纹(如 UV、吸烟、APOBEC、MMR缺陷)
- 通路分析:哪些信号通路跨癌种频繁异常
- 分子分类:按分子特征重新分类(不按器官)
- 免疫亚型:肿瘤微环境的跨癌种分类
- 生存预后:跨癌种的预后标志物
实战代码¶
# === 泛癌分析:TCGA 数据获取与突变全景图 ===
# 1. 使用 TCGAbiolinks 下载数据(通过 R)
# 或使用 GDC API / cBioPortal
import pandas as pd # 数据处理
import matplotlib.pyplot as plt # 绑图
import seaborn as sns # 统计绑图
# 2. 读取泛癌突变数据(MAF格式合并)
# 假设已下载并合并了多癌种MAF
maf = pd.read_csv("pancancer_mutations.maf",
sep="\t", # 制表符分隔
usecols=["Hugo_Symbol", "Variant_Classification",
"Tumor_Sample_Barcode", "cancer_type"],
low_memory=False)
# 3. 计算每个基因在每种癌症中的突变频率
def calc_mutation_freq(maf_df):
"""计算基因-癌种突变频率矩阵"""
# 每个癌种的总样本数
samples_per_cancer = maf_df.groupby("cancer_type")[
"Tumor_Sample_Barcode"].nunique() # 各癌种样本数
# 每个基因在每个癌种中突变的样本数
gene_cancer = maf_df.groupby(
["Hugo_Symbol", "cancer_type"])[
"Tumor_Sample_Barcode"].nunique().reset_index() # 突变样本数
gene_cancer.columns = ["gene", "cancer", "mut_samples"]
# 计算频率
gene_cancer["freq"] = gene_cancer.apply(
lambda r: r["mut_samples"] / samples_per_cancer[r["cancer"]],
axis=1) # 突变频率 = 突变样本数 / 总样本数
return gene_cancer
freq_df = calc_mutation_freq(maf)
# 4. 找出跨癌种高频突变基因(在>=5个癌种中频率>5%)
gene_cancer_count = freq_df[freq_df["freq"] > 0.05].groupby("gene")[
"cancer"].nunique() # 每个基因突变频率>5%的癌种数
pan_cancer_genes = gene_cancer_count[
gene_cancer_count >= 5 # 至少5个癌种
].sort_values(ascending=False)
print("=== 泛癌高频突变基因 ===")
print(pan_cancer_genes.head(20)) # 打印前20个
# 5. 绘制 oncoplot 风格的热图
top_genes = pan_cancer_genes.head(15).index.tolist() # 前15基因
pivot = freq_df[freq_df["gene"].isin(top_genes)].pivot(
index="gene", columns="cancer", values="freq").fillna(0)
plt.figure(figsize=(16, 8)) # 设置大小
sns.heatmap(pivot, # 热图
cmap="YlOrRd", # 黄-红配色
annot=True, # 显示数值
fmt=".0%", # 百分比格式
linewidths=0.5) # 网格线
plt.title("泛癌基因突变频率热图") # 标题
plt.tight_layout() # 紧凑布局
plt.savefig("pancancer_oncoplot.png", dpi=150) # 保存
# === 使用 TCGAbiolinks 下载 TCGA 数据 ===
library(TCGAbiolinks) # TCGA数据下载包
# 下载某癌种的突变数据
query <- GDCquery( # 构建查询
project = "TCGA-BRCA", # 乳腺癌项目
data.category = "Simple Nucleotide Variation", # 突变数据
data.type = "Masked Somatic Mutation", # 体细胞突变
workflow.type = "Aliquot Ensemble Somatic Variant Merging and Masking"
)
GDCdownload(query) # 下载数据
maf <- GDCprepare(query) # 整理为MAF格式
# 使用 maftools 分析
library(maftools) # MAF分析包
laml <- read.maf(maf = maf) # 读取MAF
oncoplot(maf = laml, top = 20) # 绘制oncoplot(前20基因)
面试常问点¶
★ 泛癌分析的意义是什么?¶
参考答案:泛癌分析有三个核心意义:(1) 发现跨癌种的共同驱动机制——比如 TP53 在几乎所有癌种中都突变,KRAS 在胰腺癌、结直肠癌、肺癌中都是驱动基因,说明这些通路是"万能靶点";(2) 支持"篮子试验"设计——按分子标志物而非癌种分组进行临床试验(如 BRAF V600E 突变不限癌种用 vemurafenib);(3) 揭示肿瘤的分子分类可能比器官分类更有临床价值——比如 MSI-H 的结直肠癌和胃癌在免疫治疗上有相似的响应。
★ 泛癌分析需要注意什么批次效应?¶
参考答案:需要注意:(1) 不同癌种的测序平台和时间可能不同(早期用 GA-II,后期用 HiSeq);(2) 不同癌种的突变检测 pipeline 可能不完全一致;(3) 样本纯度和倍性在不同癌种间差异大(如脑胶质瘤纯度通常低);(4) 基因表达要统一归一化方法(TPM 或上四分位数归一化);(5) 不同癌种的样本量差异大,分析时要注意统计功效。
速查卡片¶
| 问题 | 答案 |
|---|---|
| TCGA 癌种数 | 33 种 |
| TCGA 总样本数 | ~11,000 |
| 数据下载工具 | TCGAbiolinks, GDC Portal |
| MAF 分析工具 | maftools (R) |
| 突变签名工具 | SigProfiler, MutationalPatterns |
| 泛癌高频基因 | TP53, PIK3CA, KRAS, PTEN |
| 篮子试验 | 按分子标志物分组的临床试验 |
| 免疫亚型 | 6 种(Thorsson 2018) |
| 关键数据库 | TCGA, ICGC, COSMIC |
| cBioPortal | 在线查询泛癌突变 |