测序平台与深度测量方法
测序深度这个指标,跟测序平台的选择是绑死的。不同平台出来的数据,计算深度的方式完全不同。我在项目里见过不少新手,拿着Illumina的数据直接套Nanopore的计算公式,结果导致后续分析全盘出错。
这一章我们就把主流平台的核心参数讲透,再教你怎么准确计算深度。
主流测序平台及其核心参数
目前实验室里常用的平台其实就三类。我们来看它们的核心差异:
| 平台类型 | 典型代表 | 读长范围 | 单次数据产出 | 主要应用 |
|---|---|---|---|---|
| 短读长平台 | Illumina NovaSeq / HiSeq | 150 ~ 300 bp | 600 Gb ~ 3 Tb | 全基因组、外显子、RNA-seq |
| 长读长平台 | PacBio Sequel / Revio | 10 ~ 25 kb | 80 ~ 360 Gb | 结构变异、基因组组装 |
| 超长读长平台 | Oxford Nanopore PromethION | 10 kb ~ 2 Mb+ | 50 ~ 250 Gb | 重复区域、甲基化检测 |
讲三点我自己的观察:
- Illumina的数据量优势很明显,但读长短,对重复区域无能为力。我之前做全基因组测序,目标深度30×,如果只算唯一比对的reads,实际有效深度可能只有20×。
- PacBio的HiFi模式(CCS read)读长通常在15kb左右,准确度能到Q30以上。我建议做变异检测时优先选HiFi数据。
- Nanopore的优势是超长读长,但单碱基准确度不太好(最开始只有85%~90%)。现在最新的R10.4芯片加Q20+试剂,准确度已经能到Q30了。不过我还是习惯做一下consensus校正。
深度到底怎么算?
先说定义。测序深度(Depth)就是覆盖某个位点的独立read数量。但实际操作中,有几种不同的深度概念:
- 物理深度 (Physical Depth):文库中不同DNA片段覆盖某位点的总数。这个值跟你打断片段的方式有关。
- 有效深度 (Effective Depth):经过质控和比对后,真正用于变异检测的reads覆盖数。去重和不合格比对后往往会损失10%~20%。
- 覆盖度 (Coverage):深度≥1×的基因组比例。它是评估数据完整性的关键指标。
提醒:论文里写的“30×测序”通常指物理深度。但你做实际分析时,一定要看有效深度。我个人习惯在报告中同时标注这两个值。
如何计算深度:从理论到命令行
最简单的公式:
测序深度 = (总碱基数 × 平均读长) / 基因组大小
举个例子,人类基因组约3.1 Gb,你想做到30×深度,需要产出总碱基数:3.1 Gb × 30 = 93 Gb。换算成150 bp双端reads,就是93 Gb / 150 bp ≈ 6.2亿条reads。
我在项目中一般直接用samtools depth来算。给你看一段常用命令:
# 计算每个位点的深度
samtools depth -a sample.bam > sample_depth.txt
# 统计平均深度
cat sample_depth.txt | awk '{sum+=$3; count++} END {print "平均深度: " sum/count}'
# 计算深度覆盖比例(比如深度≥10×的区域占比)
cat sample_depth.txt | awk '{if ($3 >= 10) covered++} END {print "10×覆盖比例: " covered/NR*100 "%"}'
嗯,这里要注意:-a参数会输出所有位点,包括深度为0的位置。如果不加-a,samtools depth只输出有比对信息的位点,那样计算出的平均深度会虚高。
分析实战:BAM文件深度分布
只看平均深度是不够的。我会更关注深度分布情况。举个例子:
# 统计深度区间分布
samtools depth -a sample.bam | awk '
{
if ($3 == 0) zero++;
else if ($3 < 5) lt5++;
else if ($3 < 10) lt10++;
else if ($3 < 20) lt20++;
else if ($3 < 30) lt30++;
else if ($3 < 50) lt50++;
else gt50++;
}
END {
print "深度=0位点比例: " zero/NR*100 "%"
print "深度1-5×比例: " lt5/NR*100 "%"
print "深度5-10×比例: " lt10/NR*100 "%"
print "深度10-20×比例: " lt20/NR*100 "%"
print "深度20-30×比例: " lt30/NR*100 "%"
print "深度30-50×比例: " lt50/NR*100 "%"
print "深度>50×比例: " gt50/NR*100 "%"
}'
为什么会需要看分布?举个真实案例。我之前做一个肝癌WGS项目,平均深度32×,看起来很好。但一看深度分布图,发现外显子区域深度只有8×,而内含子区域被严重扩增。最后发现是PCR过度扩增导致的偏差。
避坑指南:我遇到过不少同学只看平均深度就下结论这是30×数据。实际上30×的平均深度下,GC含量极端区域(比如启动子区)的真实深度可能只有2-3×。一定要画深度分布图。
平台选择与深度的映射关系
不同应用场景,对深度的要求差别很大。我整理了一个参考表:
| 分析类型 | 推荐平台 | 建议物理深度 | 备注 |
|---|---|---|---|
| 全基因组SNP检测 | Illumina | 30-50× | 需要有效深度≥20× |
| 稀有变异检测 | Illumina | 60-100× | 低频变异需要更高深度 |
| 结构变异检测 | PacBio / Nanopore | 15-30× | 长读长优势明显 |
| RNA-seq表达定量 | Illumina | 20-30M reads | 非深度,而是read总数 |
| 甲基化检测 | Nanopore | 30-50× | 需要足够覆盖才行 |
个人经验:我习惯把测序数据量换算成深度时,留出20%的冗余。比如目标30×,我会要求36×的数据量,去掉质控、比对和PCR重复后,刚好达到有效深度25×左右。
深度测量的核心流程
我们把这章的重点画成一张图,方便你快速对照实操:
最后总结一句话:不要迷信平均深度,要看有效深度和深度分布。 我在项目中吃过这个亏,希望你别再踩一遍。实际操作时,先跑一遍上面的命令,看清楚数据质量,再做后续分析决策。