肿瘤纯度与倍性估计¶
一句话说明¶
肿瘤样本里不只有肿瘤细胞还混着正常细胞,"纯度"就是肿瘤细胞占比,"倍性"是肿瘤细胞的整体染色体拷贝数状态,这两个参数是准确分析突变和拷贝数的前提。
核心知识点¶
1. 为什么要估计纯度和倍性¶
- 纯度影响 VAF:如果肿瘤纯度 50%,一个杂合突变的 VAF 只有 25%(而非预期的 50%)
- 倍性影响 CNV:如果肿瘤是四倍体,拷贝数 4 才是"正常",不能当成扩增
- 不校正的后果:漏检低频突变、误判拷贝数状态、克隆分析结果不可靠
- 白话:不知道一杯牛奶掺了多少水,就没法判断"牛奶浓度"
2. 常用工具¶
| 工具 | 输入数据 | 方法 |
|---|---|---|
| ASCAT | SNP array / WGS | 等位基因特异性拷贝数 |
| ABSOLUTE | 突变VAF + 拷贝数 | 贝叶斯模型 |
| Sequenza | WGS/WES BAM | GC校正+B等位基因频率 |
| PureCN | Panel/WES | 突变+拷贝数联合 |
| FACETS | WES | 快速等位基因特异性CNV |
| Battenberg | WGS | 亚克隆拷贝数 |
3. 核心概念¶
- B等位基因频率(BAF):杂合 SNP 位点上两个等位基因的比例(正常应为 0.5)
- LogR:相对于正常样本的信号强度比(正常应为 0)
- LOH(杂合性丢失):一条染色体缺失导致 BAF 从 0.5 偏移到 0 或 1
- 全基因组倍增(WGD):整个基因组翻倍,常见于晚期肿瘤
4. 纯度估计的难点¶
- 肿瘤异质性:不是所有肿瘤细胞都有相同的突变和拷贝数
- 亚克隆结构:多个亚群以不同比例混合
- WGD 判断:二倍体和四倍体的信号模式可能相似,容易混淆
实战代码¶
# === 使用 Sequenza 估计纯度和倍性 ===
# 1. 从 BAM 提取数据(需要配对 Tumor/Normal)
sequenza-utils bam2seqz \
-n normal.bam \ # 正常样本BAM
-t tumor.bam \ # 肿瘤样本BAM
--fasta hg38.fa \ # 参考基因组
-gc gc50Base.wig.gz \ # GC含量文件
-o sample.seqz.gz # 输出seqz文件
# 2. 分箱(减少数据量)
sequenza-utils seqz_binning \
--seqz sample.seqz.gz \ # 输入seqz
-w 50 \ # 窗口50bp
-o sample_bin.seqz.gz # 输出分箱结果
# === 使用 FACETS(R语言) ===
# 3. 从 BAM 生成 pileup(使用 snp-pileup)
snp-pileup \
-g \ # 仅保留杂合SNP
-q15 -Q20 \ # 最小比对和碱基质量
dbsnp_common.vcf.gz \ # 已知SNP数据库
pileup.csv.gz \ # 输出pileup
normal.bam \ # 正常BAM
tumor.bam # 肿瘤BAM
# === Sequenza R 分析(接上面的步骤2) ===
library(sequenza) # 加载sequenza包
# 读取分箱后的seqz数据
data <- sequenza.extract( # 提取数据
"sample_bin.seqz.gz" # 输入分箱文件
)
# 拟合模型(搜索最优纯度和倍性组合)
fit <- sequenza.fit(data) # 模型拟合
# 查看结果
print(fit$purity) # 最优纯度估计
print(fit$ploidy) # 最优倍性估计
# 生成完整报告
sequenza.results( # 生成结果
sequenza.extract = data, # 数据
cp.table = fit, # 拟合结果
sample.id = "tumor_sample", # 样本ID
out.dir = "sequenza_results/" # 输出目录
)
# === FACETS R 分析 ===
library(facets) # 加载facets包
# 读取 pileup 数据
rcmat <- readSnpMatrix("pileup.csv.gz") # 读取SNP矩阵
# 预处理(GC校正+分段)
xx <- preProcSample(rcmat, # 输入数据
gbuild = "hg38") # 基因组版本
# 运行 FACETS
oo <- procSample(xx, # 处理样本
cval = 300) # 分段灵敏度(越大越不灵敏)
# 拟合纯度和倍性
fit2 <- emcncf(oo) # EM算法拟合
cat("纯度:", fit2$purity, "\n") # 打印纯度
cat("倍性:", fit2$ploidy, "\n") # 打印倍性
# 可视化
plotSample(x = oo, emfit = fit2) # 绘制全基因组CNV图
面试常问点¶
★ 纯度和倍性为什么要联合估计?¶
参考答案:因为纯度和倍性对数据信号的影响是耦合的。比如一个看起来信号升高 50% 的区域,可能是"纯度 100% + 拷贝数从 2 变成 3",也可能是"纯度 50% + 拷贝数从 2 变成 4"。单独估计一个参数时,另一个参数的不确定性会导致错误。所以需要在二维空间(纯度 x 倍性)中搜索信号最吻合的组合。
★ 全基因组倍增(WGD)怎么判断?¶
参考答案:WGD 的判断标准通常是:如果超过 50% 的常染色体区域的 major 拷贝数 >= 2(即两条同源染色体各有 >=2 份拷贝),就认为发生了 WGD。WGD 在晚期肿瘤中很常见(约 30-40% 的实体瘤),会让拷贝数分析更复杂,因为"正常"基线变成了 4 而不是 2。
速查卡片¶
| 问题 | 答案 |
|---|---|
| 纯度 | 肿瘤细胞占所有细胞的比例 |
| 倍性 | 肿瘤细胞的平均染色体拷贝数 |
| 常用工具 | FACETS, Sequenza, ABSOLUTE |
| BAF | B等位基因频率,正常=0.5 |
| LogR | 信号强度对数比,正常=0 |
| WGD | 全基因组倍增 |
| 纯度影响 | 降低突变VAF |
| 倍性影响 | 改变CNV判断基线 |
| LOH | 杂合性丢失 |
| 典型纯度范围 | 20%-90% |