跳转至

350_结构变异与遗传病


一句话说明

结构变异(SV)是基因组"大块"的改变——比普通SNV大得多,从几百个碱基到整条染色体的缺失、重复、倒位,是许多遗传病(特别是发育异常)的重要原因。


核心知识点

要点1:结构变异的类型与规模

白话类比:SNV是书上的"错别字",SV则是"整段文字被删掉、复制、或者贴错了位置",影响更大、更难检测。 专业解释:主要类型: - CNV(拷贝数变异):缺失(DEL)或重复(DUP),影响基因剂量 - 倒位(INV):片段方向颠倒,可破坏基因功能或导致融合基因 - 易位(TRA/BND):两条染色体片段互换,可导致融合基因(BCR-ABL慢粒白血病) - 插入(INS):包括转座元件插入(LINE/SINE) 规模:通常定义>50bp为SV,≥1kb常被称为"large SV"。

要点2:SV检测方法比较

白话类比:检测"大块变异"需要不同的工具,就像量大距离用长尺而不是游标卡尺。 专业解释: - 读数深度法(RD):通过覆盖深度变化检测CNV(工具:CNVnator、GATK gCNV) - 读对信息法(PE):异常配对末端(insert size异常)提示SV(Lumpy、Delly) - 分裂读法(SR):reads跨越SV断点,部分未比对(Manta、SVABA) - 组装法(AS):de novo组装检测(最准确,但计算量大) - 长读测序:PacBio/Nanopore直接跨越断点,最全面(Sniffles2、PBSV)

要点3:CNV与遗传病

白话类比:基因的"份数"不对会导致剂量敏感性疾病——多一份或少一份都不行,就像蛋糕配方中某种成分的量直接决定口感。 专业解释:典型CNV相关遗传病: - 22q11.2缺失综合征(DiGeorge):最常见致病CNV之一,约1/3000 - Williams综合征:7q11.23缺失(ELN基因区域) - Prader-Willi/Angelman综合征:15q11-q13缺失(印记区域) - Charcot-Marie-Tooth 1A:17p12重复(PMP22基因) - Smith-Magenis综合征:17p11.2缺失

要点4:SNP芯片与染色体微阵列分析(CMA)

白话类比:CMA是专门用来找"大块变异"的芯片工具,像全身扫描仪一样同时检测几百万个位点,精度可以达到几十KB。 专业解释:CMA(Chromosomal Microarray Analysis):包括SNP芯片(如Illumina GSA、CytoSNP)和CGH芯片。分辨率可达50-100kb(优于传统G显带核型分析的5-10Mb)。SNP芯片额外优势:可检测LOH(杂合性丢失)、单亲二体(UPD)。分析软件:PennCNV、GenomeStudio。

要点5:ACMG SV分类标准

白话类比:SV的分类也有"ACMG规则书",类似SNV的5级分类,但判断逻辑不同——主要看SV大小、覆盖的基因、已知数据库记录。 专业解释:ACMG/ClinGen 2019年发布SV分类指南(类似SNV的5级体系)。关键证据:①数据库比对(ClinVar SV、DECIPHER、DGV正常人群);②基因剂量敏感性(ClinGen剂量敏感性评分:0-3分);③遗传模式符合(如携带者父母正常则致病性降低);④断点位置(是否中断已知致病基因)。


实战命令/代码

# ========== Manta:短读测序SV检测 ==========

# Manta是GATK生态外最常用的SV检测工具
# 安装:conda install -c bioconda manta

# 步骤1:配置分析(需要BAM索引)
configManta.py \
    --bam proband.bam \              # 先证者BAM文件
    --bam father.bam \               # 父亲BAM(三人组模式)
    --bam mother.bam \               # 母亲BAM
    --referenceFasta hg38.fa \       # 参考基因组
    --exome \                        # WES/Exome模式(调整参数)
    --runDir manta_results/          # 输出目录

# 步骤2:运行分析
./manta_results/runWorkflow.py \
    -m local \                       # 本地运行模式
    -j 16                            # 并行线程数

echo "Manta SV检测完成"

# 步骤3:查看结果
ls manta_results/results/variants/   # 列出结果文件
# 主要结果文件:
# candidateSV.vcf.gz    - 所有候选SV(未过滤)
# diploidSV.vcf.gz      - 经过滤的最终SV
# candidateSmallIndels.vcf.gz - 用于传给GATK的小Indel
# ========== CNVnator:读数深度法CNV检测 ==========

# 安装:conda install -c bioconda cnvnator

# 步骤1:提取读数历史(以100bp窗口为例)
cnvnator \
    -root sample.root \              # 输出ROOT文件
    -genome hg38 \                   # 参考基因组版本
    -tree sample.bam                 # 输入BAM文件

# 步骤2:计算覆盖深度直方图
cnvnator \
    -root sample.root \
    -his 100 \                       # 100bp bin大小
    -d /path/to/chromosomes/         # 各染色体FASTA目录

# 步骤3:统计分析
cnvnator \
    -root sample.root \
    -stat 100                        # 计算统计量

# 步骤4:分割检测(关键步骤)
cnvnator \
    -root sample.root \
    -partition 100                   # 分割算法

# 步骤5:CNV检出
cnvnator \
    -root sample.root \
    -call 100 \                      # 检出CNV
    > sample_cnv_calls.txt           # 保存结果

# 查看结果格式(CNV类型、位置、大小、q-value)
head -20 sample_cnv_calls.txt       # 查看前20个CNV
# ========== 解析和过滤SV VCF文件 ==========
import pysam    # VCF/BAM文件处理
import pandas as pd   # 数据处理

def parse_sv_vcf(sv_vcf_file, min_size=500, max_size=10_000_000):
    """
    解析SV VCF文件,提取结构变异信息
    sv_vcf_file: Manta/GATK SV输出的VCF文件
    min_size: 最小SV大小(bp)
    max_size: 最大SV大小(bp)
    """
    variants = []  # 存储变异信息

    # 打开VCF文件
    vcf = pysam.VariantFile(sv_vcf_file)

    for rec in vcf:
        # 获取SV类型
        sv_type = rec.info.get('SVTYPE', 'UNKNOWN')  # DEL/DUP/INV/BND

        # 获取SV大小
        sv_len = abs(rec.info.get('SVLEN', 0))
        if isinstance(sv_len, tuple):
            sv_len = abs(sv_len[0])  # SVLEN有时是元组

        # 过滤大小不合适的SV
        if sv_len < min_size or sv_len > max_size:
            continue  # 跳过太小或太大的SV

        # 过滤未通过质控的SV
        if list(rec.filter)[0] != 'PASS':
            continue  # 只保留PASS状态

        # 获取等位基因频率(通过INFO字段)
        pr = rec.samples[0].get('PR', (0, 0))  # paired reads支持
        sr = rec.samples[0].get('SR', (0, 0))  # split reads支持

        variants.append({
            'chrom': rec.chrom,           # 染色体
            'start': rec.start,           # 起始位置
            'end': rec.stop,              # 终止位置
            'sv_type': sv_type,           # SV类型
            'sv_len': sv_len,             # SV大小
            'PR_ref': pr[0] if pr else 0, # 参考等位基因读数
            'PR_alt': pr[1] if pr else 0, # 变异等位基因读数
        })

    return pd.DataFrame(variants)

# 使用示例
# df_sv = parse_sv_vcf("diploidSV.vcf.gz", min_size=100)
# print(f"过滤后SV数量: {len(df_sv)}")
# print(df_sv.groupby('sv_type').size())  # 按类型统计
# ========== CMA数据分析:PennCNV后处理 ==========
library(dplyr)    # 数据处理
library(GenomicRanges)   # 基因组区间操作

# 读取PennCNV输出的CNV list
cnv_calls <- read.table("sample.cnv", header=FALSE, 
    col.names=c("region","numSNP","length","state","file","startSNP","endSNP","conf"))

# 解析染色体和位置(格式:chr1:123-456)
cnv_calls <- cnv_calls %>%
    mutate(
        chrom = sub(":(.*)", "", region),   # 提取染色体号
        start = as.numeric(sub(".*:(\\d+)-.*", "\\1", region)),  # 提取起始
        end = as.numeric(sub(".*-(\\d+)$", "\\1", region)),       # 提取终止
        cn_type = ifelse(state %in% c(1,2), "DEL", "DUP")         # CNV类型
    ) %>%
    filter(length >= 100000)  # 过滤<100kb的CNV(减少假阳性)

cat("保留CNV数量:", nrow(cnv_calls), "\n")  # 输出保留数量

# 与数据库比对(DGV正常人群CNV数据库)
# 这里使用GRanges进行区间重叠分析
cnv_gr <- GRanges(
    seqnames = cnv_calls$chrom,
    ranges = IRanges(start=cnv_calls$start, end=cnv_calls$end)
)
cat("构建GRanges对象完成,共", length(cnv_gr), "个CNV\n")

面试常问点

★ Q1:SV的检测方法有哪些?各有什么优缺点?

四种信号:①读数深度(RD):检测CNV灵敏,但分辨率受bin大小限制(工具:CNVnator、ExomeDepth);②读对(PE):异常插入大小检测易位/倒位,但小片段敏感性差;③分裂读(SR):精确断点,但需要较长读段;④长读测序:直接跨越断点,最准确,但成本高(Sniffles2、PBSV)。最佳实践:短读SV通常综合PE+SR+RD(Manta/Delly),长读SV首选Sniffles2。

★ Q2:22q11.2缺失综合征的基因组特征和检测方法?

22q11.2微缺失(约3Mb)导致先天性心脏病(85%)、腭裂、免疫缺陷(T细胞减少)、学习障碍。检测方法:①FISH(金标准,临床常规);②染色体芯片(CMA,覆盖更广CNV);③短读WES/WGS(CNV分析可检测,但分辨率有限);④MLPA(多重探针扩增,经济快速)。注意:标准G显带核型分析可能漏诊(分辨率仅5-10Mb)。

★ Q3:单亲二体(UPD)是什么?与SV有什么关系?

单亲二体(UPD):子女的一对同源染色体均来自同一亲本(例如两条来自母亲,父亲的那条缺失或替换)。与SV关系:有时UPD是由于染色体非整倍体的"自我救援(trisomy rescue)"——多一条染色体的受精卵通过丢失一条回到二倍体,若碰巧保留同一亲本的两条即形成UPD。检测:SNP芯片可显示长片段LOH(杂合性丢失),提示UPD。印记基因区域UPD(如15q11的Prader-Willi/Angelman)有表型效应。

★ Q4:GATK SV分析与Manta的区别?

GATK gCNV(GermlineCNVCaller)专注于读数深度法检测CNV,适合panel和WES数据,利用概率模型和多样本参考。Manta整合PE+SR信号,可检测DEL/DUP/INV/BND/INS类型,灵敏度高于单一方法。两者互补:GATK gCNV用于CNV(特别是小片段),Manta用于所有SV类型检测。临床WES分析通常两种方法结合。

★ Q5:如何区分良性的CNV多态性(CNV polymorphism)和致病性CNV?

关键判断依据:①DGV(Database of Genomic Variants)和gnomAD SV数据库收录的CNV通常为良性(正常人群多态);②DECIPHER数据库中与已知综合征关联的CNV;③ClinGen剂量敏感性评分(1-3分,3分=确定剂量敏感);④基因含量(覆盖ClinGen高剂量敏感基因→致病可能性高);⑤家系数据(受影响家庭成员携带,正常亲属不携带→致病性增加)。


速查表

SV类型缩写描述典型遗传病
缺失DEL片段丢失DiGeorge, Williams
重复DUP片段额外拷贝Charcot-Marie-Tooth 1A
倒位INV片段方向颠倒血友病A(F8倒位)
易位TRA/BND染色体片段互换慢粒白血病(BCR-ABL)
插入INS外来片段插入LINE-1插入致遗传病
检测工具方法最适场景
MantaPE+SRWES/WGS SV全检
CNVnatorRDWGS大CNV
ExomeDepthRDWES/Panel小CNV
Sniffles2长读长读测序SV
PennCNV芯片SNP芯片CNV
GATK gCNVRD+贝叶斯Panel/WES批量CNV