164_肿瘤异质性定量¶
一句话概述¶
肿瘤内异质性(Intratumor Heterogeneity, ITH)定量通过MATH评分、Shannon熵、亚克隆比例和克隆多样性指数等指标,从WGS/WES变异数据中量化肿瘤内部的遗传多样性,是预测治疗耐药和预后分层的重要工具。
核心知识点总览¶
| 知识点 | 说明 |
|---|---|
| ITH定义 | 肿瘤内部不同细胞携带不同突变的现象 |
| MATH | 突变等位基因频率(MAF)分布的中位绝对偏差 |
| Shannon熵 | 信息论指标,量化克隆多样性 |
| 亚克隆比例 | 亚克隆突变占总突变的比例 |
| VAF分布 | 变异等位基因频率分布反映克隆结构 |
| PyClone/PyClone-VI | 贝叶斯克隆结构推断工具 |
| EXPANDS | 从VAF推断克隆组成的工具 |
| 临床意义 | 高ITH关联差预后和治疗耐药 |
各步骤详解¶
第一步:理解肿瘤异质性¶
白话解释: 肿瘤不是一团完全相同的癌细胞——它更像一个"生态系统",里面有不同的"家族"(克隆)。有些家族是"创始家族"(克隆性突变,出现早),有些是后来分化出的"分支家族"(亚克隆突变)。异质性越高说明"家族"越多越复杂,治疗时任何一种药物可能只杀死部分家族,剩下的会形成耐药。
代码示例:
# 基本概念:从VAF理解克隆结构
library(ggplot2)
# 模拟一个肿瘤的VAF分布
set.seed(42)
# 克隆性突变 (CCF=1.0, 在纯度80%肿瘤中VAF≈0.4)
clonal_vaf <- rnorm(100, mean = 0.40, sd = 0.05)
# 亚克隆1 (CCF=0.5, VAF≈0.20)
subclone1_vaf <- rnorm(50, mean = 0.20, sd = 0.04)
# 亚克隆2 (CCF=0.3, VAF≈0.12)
subclone2_vaf <- rnorm(30, mean = 0.12, sd = 0.03)
all_vaf <- c(clonal_vaf, subclone1_vaf, subclone2_vaf)
# VAF密度图
df <- data.frame(VAF = all_vaf)
ggplot(df, aes(x = VAF)) +
geom_density(fill = "steelblue", alpha = 0.5) +
geom_vline(xintercept = c(0.40, 0.20, 0.12), linetype = "dashed", color = "red") +
annotate("text", x = c(0.40, 0.20, 0.12), y = c(3, 2, 1.5),
label = c("Clonal", "Subclone1", "Subclone2"), color = "red") +
labs(x = "Variant Allele Frequency (VAF)", y = "Density",
title = "VAF Distribution Reflecting Clonal Structure") +
theme_minimal()
第二步:MATH评分计算¶
白话解释: MATH(Mutant-Allele Tumor Heterogeneity)评分很简单——就是看所有突变的VAF有多"分散"。如果所有突变的VAF都差不多(集中在一个峰),说明肿瘤均匀(MATH低)。如果VAF分散在很多值,说明异质性高(MATH高)。
代码示例:
# === MATH评分计算 ===
calculate_MATH <- function(vaf_vector) {
# MATH = 100 × MAD / median
# MAD = median absolute deviation
med <- median(vaf_vector)
mad_val <- median(abs(vaf_vector - med))
math_score <- 100 * mad_val / med
return(math_score)
}
# 从VCF/MAF文件读取数据
library(maftools)
maf <- read.maf("tumor.maf")
# 提取VAF
vaf_data <- subsetMaf(maf)
vaf_values <- vaf_data$t_alt_count / (vaf_data$t_alt_count + vaf_data$t_ref_count)
# 计算MATH
math_score <- calculate_MATH(vaf_values)
cat(sprintf("MATH Score: %.2f\n", math_score))
# MATH评分解读:
# < 20: 低异质性(均匀肿瘤)
# 20-40: 中等异质性
# > 40: 高异质性
# === 使用maftools直接计算 ===
math_result <- math(maf, vafCol = "VAF")
print(math_result)
# 多样本比较
maf_list <- list(tumor1 = maf1, tumor2 = maf2, tumor3 = maf3)
math_scores <- sapply(maf_list, function(m) {
math(m, vafCol = "VAF")$MATH
})
第三步:Shannon熵和Simpson指数¶
代码示例:
# === 基于克隆结构的多样性指数 ===
# 假设已通过PyClone等工具获得克隆cluster及其细胞比例
clonal_fractions <- c(0.50, 0.30, 0.15, 0.05) # 4个克隆的细胞比例
# Shannon熵 (信息熵)
shannon_entropy <- function(fractions) {
fractions <- fractions[fractions > 0]
-sum(fractions * log2(fractions))
}
# Simpson指数 (1 - sum(pi^2))
simpson_index <- function(fractions) {
1 - sum(fractions^2)
}
# Richness (克隆数)
richness <- length(clonal_fractions)
# Evenness (均匀度 = H / log2(S))
evenness <- function(fractions) {
H <- shannon_entropy(fractions)
S <- length(fractions)
H / log2(S)
}
cat(sprintf("Shannon Entropy: %.3f bits\n", shannon_entropy(clonal_fractions)))
cat(sprintf("Simpson Index: %.3f\n", simpson_index(clonal_fractions)))
cat(sprintf("Richness: %d clones\n", richness))
cat(sprintf("Evenness: %.3f\n", evenness(clonal_fractions)))
# === 亚克隆比例 ===
# 定义: subclonal mutations / total mutations
# 通常用VAF阈值或PyClone聚类结果
calculate_subclonal_fraction <- function(vaf, purity = 0.8, ploidy = 2) {
# 在给定纯度和倍性下,克隆性突变的期望VAF
expected_clonal_vaf <- purity / (purity * ploidy + (1 - purity) * 2)
# 低于期望VAF*0.7的突变视为亚克隆
threshold <- expected_clonal_vaf * 0.7
subclonal <- sum(vaf < threshold) / length(vaf)
return(subclonal)
}
sub_frac <- calculate_subclonal_fraction(vaf_values, purity = 0.8)
cat(sprintf("亚克隆突变比例: %.1f%%\n", sub_frac * 100))
第四步:PyClone-VI克隆结构推断¶
代码示例:
# === 安装PyClone-VI ===
pip install pyclone-vi
# === 准备输入文件 ===
# TSV格式: mutation_id, sample_id, ref_counts, alt_counts,
# major_cn, minor_cn, normal_cn, tumour_content
import pandas as pd
# 准备PyClone-VI输入
mutations = pd.DataFrame({
'mutation_id': [f"mut_{i}" for i in range(200)],
'sample_id': ['tumor1'] * 200,
'ref_counts': ref_counts, # 参考等位基因读数
'alt_counts': alt_counts, # 变异等位基因读数
'major_cn': major_copy_number, # 主要拷贝数
'minor_cn': minor_copy_number, # 次要拷贝数
'normal_cn': [2] * 200, # 正常拷贝数
'tumour_content': [0.8] * 200 # 肿瘤纯度
})
mutations.to_csv("pyclone_input.tsv", sep='\t', index=False)
# === 运行PyClone-VI ===
pyclone-vi fit \
-i pyclone_input.tsv \
-o pyclone_results.h5 \
-c 40 \
-d beta-binomial \
-r 10
# 参数:
# -c 40: 最大cluster数
# -d beta-binomial: 似然模型(推荐)
# -r 10: 随机重启次数
# 提取结果
pyclone-vi write-results-file \
-i pyclone_results.h5 \
-o pyclone_clusters.tsv
# === 多样本联合分析 ===
# 多区域测序或配对原发-转移
# 输入中不同sample_id对应不同区域
# PyClone-VI会联合推断克隆结构
# 结果可视化
library(ggplot2)
clusters <- read.delim("pyclone_clusters.tsv")
# 克隆频率分布
ggplot(clusters, aes(x = factor(cluster_id), y = cellular_prevalence)) +
geom_boxplot(fill = "skyblue") +
labs(x = "Clone Cluster", y = "Cellular Prevalence (CCF)",
title = "Clonal Structure (PyClone-VI)") +
theme_minimal()
# 鱼骨图 (多时间点/区域)
# 使用fishplot或ClonEvol包
第五步:多区域测序的ITH分析¶
代码示例:
# === 多区域测序分析 ===
# 从同一肿瘤的多个区域取样测序,可以直接观察空间异质性
# 读取多区域MAF数据
regions <- c("Region_A", "Region_B", "Region_C", "Region_D")
# 突变分类: ubiquitous(所有区域共有) vs private(某区域特有)
classify_mutations <- function(mutation_matrix) {
# mutation_matrix: 突变×区域的presence/absence矩阵
n_regions <- ncol(mutation_matrix)
present_count <- rowSums(mutation_matrix > 0)
classification <- case_when(
present_count == n_regions ~ "Ubiquitous (Clonal)",
present_count == 1 ~ "Private",
TRUE ~ "Shared (Subclonal)"
)
return(classification)
}
# ITH指数: 1 - (ubiquitous mutations / total mutations)
ith_index <- 1 - sum(classification == "Ubiquitous (Clonal)") / length(classification)
cat(sprintf("ITH Index: %.3f\n", ith_index))
# === Jaccard距离矩阵 ===
# 区域间的突变组成差异
library(vegan)
dist_matrix <- vegdist(t(mutation_matrix > 0), method = "jaccard")
hclust_result <- hclust(dist_matrix, method = "ward.D2")
plot(hclust_result, main = "Tumor Regional Heterogeneity")
实战命令¶
# === ITH分析完整流程 ===
# 1. 变异检测
gatk Mutect2 -R ref.fa -I tumor.bam -I normal.bam -O mutations.vcf
# 2. 拷贝数分析(PyClone需要)
sequenza-utils bam2seqz --fasta ref.fa -n normal.bam --tumor tumor.bam -o seqz.gz
# 3. PyClone-VI克隆结构推断
pyclone-vi fit -i input.tsv -o results.h5 -c 40 -d beta-binomial -r 10
pyclone-vi write-results-file -i results.h5 -o clusters.tsv
# 4. MATH评分
Rscript -e 'library(maftools); maf=read.maf("tumor.maf"); math(maf)'
面试常问点¶
Q1:MATH评分是如何计算的?它反映什么?¶
A: MATH = 100 × MAD(VAF) / median(VAF)。MAD是中位绝对偏差(median absolute deviation)。它反映VAF分布的离散程度——如果肿瘤只有一个克隆,所有突变VAF集中在一个值(MATH低);如果有多个亚克隆,VAF分散在多个峰(MATH高)。MATH高提示肿瘤异质性高,通常关联差预后。
Q2:什么是克隆突变和亚克隆突变?如何区分?¶
A: 克隆突变(clonal)出现在所有/几乎所有肿瘤细胞中(CCF≈1.0),是肿瘤发生早期获得的驱动突变。亚克隆突变(subclonal)只在部分肿瘤细胞中存在(CCF<1.0),是后续进化产生的分支突变。区分方法:(1) 简单阈值:校正纯度和拷贝数后,VAF>0.5×purity为克隆性;(2) 统计模型:PyClone-VI等工具通过聚类VAF分布推断CCF和克隆结构。
Q3:Shannon熵在ITH量化中如何解释?¶
A: Shannon熵H = -Σpi·log2(pi),pi是第i个克隆的细胞比例。H=0表示只有一个克隆(完全均匀);H越大表示克隆越多且越均匀(多样性高)。例如:2个克隆各50% → H=1.0bit;4个克隆各25% → H=2.0bits。结合克隆数(richness)和均匀度(evenness)可以完整描述克隆多样性。
Q4:高ITH为什么预示差预后和耐药?¶
A: (1) 异质性高意味着肿瘤具有更大的遗传"储备库",治疗选择压力下更可能有预存的耐药克隆存活并扩展;(2) 亚克隆结构意味着不同区域可能对不同治疗敏感/耐药,单一疗法难以根除所有克隆;(3) 高ITH反映更活跃的进化过程(基因组不稳定性)。多项临床研究证实MATH或亚克隆比例与总生存期负相关。
Q5:多区域测序如何揭示ITH的空间结构?¶
A: 从同一肿瘤的多个空间区域(通常4-10个)分别取样测序。分析:(1) 共有突变(所有区域都有)=干细胞突变/早期获得;(2) 共享突变(部分区域有)=中间进化获得;(3) 私有突变(单区域)=晚期/局部进化。构建系统发育树可以重建肿瘤进化历史。TRACERx研究表明单区域取样会低估50%的ITH。
易错点¶
1. 未校正肿瘤纯度¶
错误: 直接用原始VAF计算MATH,纯度低的样本假性高MATH。 正确做法: 低纯度(如30%)会使所有VAF偏低且压缩分布。需要用ASCAT/Sequenza估计纯度后校正VAF为CCF(cancer cell fraction)再计算。
2. 混淆VAF和CCF¶
错误: 将VAF=0.2直接当作20%细胞携带该突变。 正确做法: VAF受纯度和拷贝数影响。CCF=VAF×(purity×ploidy+(1-purity)×2)/(purity×mutant_copies)。需要CNV信息来校正。
3. 低depth样本的MATH不可靠¶
错误: 30x WGS数据直接算MATH。 正确做法: 低覆盖度导致VAF估计不准确(二项采样噪声大),使MATH膨胀。建议至少60-100x WGS或200x WES。过滤低depth位点(depth<20)。
4. 克隆数选择不当¶
错误: PyClone-VI设置最大cluster为5就跑完。 正确做法: 设置较大的最大cluster数(如40),让算法自动选择最优数。或使用BIC/ELBO来评估不同K的拟合优度。
5. 忽略测序偏差¶
错误: WES数据中靶区域边界的突变也纳入ITH分析。 正确做法: WES边界区域覆盖不均匀,VAF不准确。只用靶区域中心(padding内)的突变。
补充知识¶
ITH量化指标汇总¶
| 指标 | 输入 | 含义 | 范围 |
|---|---|---|---|
| MATH | VAF分布 | MAF离散度 | 0-100+ |
| Shannon H | 克隆比例 | 多样性 | 0-log2(S) |
| Simpson D | 克隆比例 | 均匀度 | 0-1 |
| 亚克隆比例 | 突变分类 | 晚期突变占比 | 0-1 |
| wGII | 拷贝数 | 基因组不稳定性 | 0-1 |
| ITH index | 多区域 | 区域间差异 | 0-1 |
相关工具¶
- PyClone/PyClone-VI: 克隆结构推断
- EXPANDS: 克隆扩张检测
- SciClone: 克隆结构可视化
- ClonEvol: 克隆进化重建
- CITUP: 肿瘤系统发育推断
- fishplot: 克隆动态鱼骨图
临床转化¶
- TRACERx研究: 肺癌多区域测序追踪ITH与预后
- PCAWG: 泛癌全基因组ITH分析
- ctDNA监测: 液体活检追踪克隆演化和耐药