2. 基因组学基础与突变图谱
各位好,欢迎来到第二章。上回我们聊了多组学的大框架,今天得把地基夯实——基因组学。
说白了,你要是连DNA上那些突变都看不懂,后面甲基化、转录组、蛋白组就没法串联。我个人的经验是,突变图谱是一切多组学整合的锚点。没有这个锚,你后面所有关联分析都是在空中楼阁。
2.1 DNA测序技术演进——从Sanger到长读长
你想想看,我们怎么知道一个人的基因组序列?靠测序。
技术演进大致分三个阶段:
| 技术世代 | 代表平台 | 读长 | 通量 | 主要用途 |
|---|---|---|---|---|
| 第一代 | Sanger测序 | ~800 bp | 低 | 验证、小片段 |
| 第二代(NGS) | Illumina(HiSeq/NovaSeq) | 150 bp × 2 | 极高 | WGS、WES、RNA-seq |
| 第三代(长读长) | PacBio HiFi / Oxford Nanopore | 10-100 kb | 中高 | 结构变异、重复区域、组装 |
我记得刚入行那会儿,大家还在用Sanger做候选基因验证,一个样本只能看几个位点。现在的NGS,一个flowcell跑下来就是几百个样本的WES数据。嗯,这里要注意:读长越短,比对和变异检测的难度越大,尤其是在重复区域。
2.2 突变类型概述——SNP、Indel、CNV
测序拿到了序列,接下来就是找差异。基因组突变,按照尺度从小到大,主要分三类:
2.2.1 SNP(单核苷酸多态性)
单个碱基的替换。这是最常见的突变类型。比如一个位点本来是A,在肿瘤样本里变成了T。
- 同义突变:不改变氨基酸——往往是“旁观者”
- 错义突变:改变氨基酸——可能影响蛋白功能
- 无义突变:提前引入终止密码子——通常致病性高
2.2.2 Indel(插入/缺失)
长度在1-50 bp左右的插入或缺失。Indel容易引起移码,破坏性比SNP更大。
我曾经在一个结直肠癌项目里发现一个2 bp的缺失,直接导致MSH2基因移码。如果不做Indel检测,单纯看SNP就会漏掉这个关键位点。
2.2.3 CNV(拷贝数变异)
大于1 kb的片段拷贝数增加(扩增)或减少(缺失)。
- 比如EGFR扩增在肺癌里很常见
- PTEN缺失在前列腺癌里是关键事件
2.3 突变图谱构建的“标准”流程
我个人习惯把流程分成四步:质控→比对→变异检测→注释。每一步都有坑,我踩过的坑现在跟你说说。
2.3.1 原始数据质控
拿到FASTQ文件后,第一步一定是跑FastQC。我见过太多人直接跳过这步去比对,结果下游变异检测全是假阳性。
# 常用质控命令
fastqc sample_R1.fastq.gz sample_R2.fastq.gz -o qc_reports/
# 低质量碱基和接头修剪(推荐fastp)
fastp -i sample_R1.fastq.gz -I sample_R2.fastq.gz \
-o cleaned_R1.fastq.gz -O cleaned_R2.fastq.gz \
--cut_front --cut_tail --detect_adapter_for_pe
嗯,这里要注意:多组学整合项目里,DNA测序的质控标准要比RNA-seq更严。因为变异检测对碱基质量极其敏感,Q30比例建议高于85%。
2.3.2 比对到参考基因组
最常用的工具是BWA-MEM。比对后的BAM文件还要做标记重复(MarkDuplicates)和碱基质量重校准(BQSR)。
# BWA-MEM比对
bwa mem -t 8 -M hg38.fa sample_R1.fastq.gz sample_R2.fastq.gz > sample.sam
# SAM转BAM、排序、标记重复
samtools view -bS sample.sam | samtools sort -o sample_sorted.bam
picard MarkDuplicates I=sample_sorted.bam O=sample_dedup.bam M=metrics.txt
# GATK碱基质量重校准(BQSR)
gatk BaseRecalibrator -R hg38.fa -I sample_dedup.bam --known-sites dbsnp.vcf -O recal.table
gatk ApplyBQSR -R hg38.fa -I sample_dedup.bam --bqsr-recal-file recal.table -O sample_recal.bam
2.3.3 变异检测
对于SNP和Indel,当前的金标准是GATK HaplotypeCaller。CNV检测通常需要单独工具。
- GATK HaplotypeCaller:联合检测SNP和Indel,通过局部重新组装获取更准确的的变异
- Mutect2:肿瘤-正常配对样本的体细胞突变检测,会在GATK4里
- CNVkit / GATK gCNV:专门用于CNV检测
- Manta / Delly:用于检测结构变异(SV)
# GATK4 HaplotypeCaller 单样本模式
gatk HaplotypeCaller -R hg38.fa -I sample_recal.bam \
-O sample.g.vcf.gz -ERC GVCF
# 联合基因分型(多样本时)
gatk CombineGVCFs -R hg38.fa -V sample1.g.vcf.gz -V sample2.g.vcf.gz -O cohort.g.vcf.gz
gatk GenotypeGVCFs -R hg38.fa -V cohort.g.vcf.gz -O raw_variants.vcf.gz
2.3.4 变异注释
VCF文件里只有位置和基因型,我们要问:“这个突变是错义吗?MAF多少?是否有已知致病性?”
我常用ANNOVAR或VEP来做功能注释,再用gnomAD / ClinVar 做群体频率和致病性标注。
# ANNOVAR 注释示例
table_annovar.pl raw_variants.vcf humandb/ \
-buildver hg38 \
-out annotated_variants \
-remove -protocol refGene,exac03,clinvar_20240926 \
-operation gx,f,f -nastring . -vcfinput
2.4 核心知识图谱——构建流程总览
我把上述流程画了一张图,方便你记忆整体脉络。这是一个端到端的构建流程:从FASTQ出发,到你可以直接用于多组学整合的注释后VCF。
2.5 构建突变图谱的注意事项
流程清楚了,我再唠叨几句实战中容易翻车的地方。
2.5.1 批次效应
我在一个大型队列项目(3000+样本)里处理过两台Illumina NovaSeq的测序数据。同样的样本被分到不同flowcell里跑,结果变异检测在某个基因区域出现明显的批次差异。
解决办法:变异检测阶段尽量用joint calling(联合基因分型),不要每个样本单独call完后合并。GATK的GenotypeGVCFs就是为此设计的。
2.5.2 过滤策略
VCF里原始变异很多是噪音。我习惯先用硬过滤(Hard Filtering)去除明显质量问题。
# GATK推荐SNP硬过滤脚本摘要
SNP_FILTER_EXPR="QD < 2.0 || MQ < 40.0 || FS > 60.0 || SOR > 3.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0"
2.5.3 多组学整合的结构化输出
我强烈建议把最终突变图谱组织成适合下游分析的格式。MAF(Mutation Annotation Format)是TCGA的标准,也是后续R包maftools、GenVisR直接能读入的格式。
比如一张MAF表格头几列大致是这样:
| Hugo_Symbol | Chromosome | Start_Position | Variant_Classification | Variant_Type | Reference_Allele | Tumor_Seq_Allele2 | t_depth | t_alt_count |
|---|---|---|---|---|---|---|---|---|
| TP53 | 17 | 7673802 | Missense_Mutation | SNP | C | T | 150 | 78 |
| EGFR | 7 | 55249071 | In_Frame_Deletion | DEL | CTT | -- | 200 | 112 |
嗯,这一章差不多了。从DNA测序原理到突变类型,再到完整的构建流程和注意事项,我们已经搭建了突变图谱的骨架。下一块内容我们就要用这个骨架去和转录组、蛋白组做整合了。记住:干净的突变图谱,是一切多组学关联分析的起点。