跳转至

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量化指标汇总

指标输入含义范围
MATHVAF分布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监测: 液体活检追踪克隆演化和耐药