跳转至

CNVkit — 高通量测序拷贝数变异检测工具


一句话说明

CNVkit(v0.9.13)用WGS或WES数据估算每个基因组区域的拷贝数——就像用"读段密度测量尺"衡量不同区域DNA是变多了(扩增)还是变少了(缺失),是癌症和遗传病研究的常用CNV工具。


安装与配置

# 方法1:conda安装(推荐,v0.9.13)
conda create -n cnvkit python=3.10   # CNVkit需要Python 3.10+
conda activate cnvkit

conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
conda install cnvkit                  # 安装最新版(0.9.13,2026年更新)

# 验证安装
cnvkit.py version    # 查看版本号
cnvkit.py --help     # 查看所有子命令

# 安装可选依赖(R包,用于绘图)
conda install -c conda-forge r-base r-ggplot2 r-dnacopy  # R的CBS分割算法

核心用法

一键全自动流程(batch命令,最推荐新手)

# WES数据:有配对正常样本(最常用场景)
cnvkit.py batch \
    tumor.bam \                        # 肿瘤样本BAM
    --normal normal.bam \              # 配对正常样本BAM
    --targets targets.bed \            # 捕获区域BED文件(WES专用)
    --annotate refFlat.txt \           # 基因注释(用于自动获取antitarget区域)
    --fasta reference.fasta \          # 参考基因组
    --output-reference reference_flat.cnn \  # 输出参考样本CNN文件
    --output-dir cnvkit_output \       # 输出目录
    -p 16                              # 线程数

# WGS数据:无靶向捕获区域
cnvkit.py batch \
    tumor.bam \
    --normal normal.bam \
    --method wgs \                     # 全基因组模式(不需要--targets)
    --fasta reference.fasta \
    --output-dir cnvkit_wgs_out \
    -p 16

分步运行(理解每一步)

# 步骤1:计算目标区域覆盖度(肿瘤和正常样本)
cnvkit.py coverage tumor.bam targets.bed -o tumor.targetcoverage.cnn   # 目标区域
cnvkit.py coverage tumor.bam antitargets.bed -o tumor.antitargetcoverage.cnn  # 非目标区域

cnvkit.py coverage normal.bam targets.bed -o normal.targetcoverage.cnn
cnvkit.py coverage normal.bam antitargets.bed -o normal.antitargetcoverage.cnn

# 步骤2:构建参考基线(从正常样本)
cnvkit.py reference normal.targetcoverage.cnn normal.antitargetcoverage.cnn \
    --fasta reference.fasta -o reference_flat.cnn

# 步骤3:归一化(肿瘤相对参考)
cnvkit.py fix \
    tumor.targetcoverage.cnn \
    tumor.antitargetcoverage.cnn \
    reference_flat.cnn \
    -o tumor.cnr                      # 比率文件(log2 ratio)

# 步骤4:片段化分割(CBS算法)
cnvkit.py segment tumor.cnr -o tumor.cns  # 分割结果文件

# 步骤5:可视化
cnvkit.py scatter tumor.cnr -s tumor.cns -o tumor_scatter.pdf  # 散点图
cnvkit.py diagram tumor.cnr -s tumor.cns -o tumor_diagram.pdf  # 染色体图

参数详解

参数/命令说明示例值
batch --method分析方法hybrid(WES默认)、wgsamplicon
batch --targets靶向捕获区域BED(WES必须)targets.bed
batch --normal正常样本BAMnormal.bam
--output-reference输出参考基线CNN文件flat_reference.cnn
segment -m分割算法cbs(默认)、haarhmm
call --purity肿瘤纯度(影响拷贝数绝对值)0.7(70%纯度)
call --ploidy肿瘤倍性2(二倍体默认)

实战案例

# 完整WES体细胞CNV分析

REF="hg38.fasta"
TARGETS="agilent_sureselect_v6.bed"    # 捕获区域

# 1. 一键批处理(推荐)
cnvkit.py batch \
    tumor.bam \
    --normal normal.bam \
    --targets $TARGETS \
    --fasta $REF \
    --annotate refFlat.txt \
    --output-reference reference.cnn \
    --output-dir cnv_results \
    -p 20

# 2. 查看结果文件
ls cnv_results/
# tumor.targetcoverage.cnn    - 目标区覆盖度
# tumor.antitargetcoverage.cnn - 非目标区覆盖度
# tumor.cnr                   - 每个bin的log2 ratio
# tumor.cns                   - 分割后的CNV段

# 3. 调用绝对拷贝数(需要肿瘤纯度信息)
cnvkit.py call \
    cnv_results/tumor.cns \
    --purity 0.75 \             # 肿瘤纯度75%
    --ploidy 2 \
    -o tumor_absolute.cns

# 4. 导出基因级别结果
cnvkit.py export seg tumor.cns -o tumor.seg  # SEG格式(IGV等工具可用)
cnvkit.py genemetrics cnv_results/tumor.cnr \
    -s cnv_results/tumor.cns \
    -t 0.4 \                    # 阈值过滤微小变化
    -o gene_level_cnv.txt       # 每个基因的CNV统计

# 5. 可视化全基因组CNV图
cnvkit.py scatter cnv_results/tumor.cnr \
    -s cnv_results/tumor.cns \
    -o cnv_scatter.pdf

# 6. 查看扩增/缺失基因
awk '$5 > 2' gene_level_cnv.txt | head  # 查看高扩增基因(>2倍log2 ratio)
awk '$5 < -2' gene_level_cnv.txt | head # 查看深度缺失基因

常见报错与解决

报错1:ImportError: No module named 'cnvlib' - 原因:CNVkit未正确安装,或Python环境冲突 - 解决:确认在正确conda环境conda activate cnvkit;重新安装conda install cnvkit

报错2:R is not available, CBS segmentation not available - 原因:缺少R环境或R的DNAcopy包 - 解决:conda install -c conda-forge r-base r-dnacopy;或使用--segment-method haar替代CBS

报错3:CNV结果噪音很大(.cnr文件散点很分散) - 原因:测序深度不足(WES一般需≥100x覆盖),或正常样本匹配不当 - 解决:使用多个正常样本构建参考基线;确认肿瘤和正常样本来自相同捕获区域


速查表

命令说明
cnvkit.py batch --method wgsWGS全基因组CNV分析
cnvkit.py batch --method hybridWES靶向捕获CNV分析(默认)
cnvkit.py segment tumor.cnrCBS算法分割CNV段
cnvkit.py call --purity 0.7调用绝对拷贝数(需肿瘤纯度)
cnvkit.py scatter *.cnr -s *.cns全基因组散点图
cnvkit.py diagram染色体臂水平CNV图
cnvkit.py genemetrics基因级别CNV统计
cnvkit.py export seg导出SEG格式(IGV/GISTIC2用)
*.cnr每个bin的log2比率文件
*.cns分割后的CNV区段文件