BioPlayground

🧬
목록으로

CNV 분석: Read Depth로 복제수 이상을 잡는 방법과 함정

복제수 이상은 왜 SV 콜러가 잘 못 잡을까요. Read Depth의 신호 처리 관점, GC/mappability 편향 보정, HMM 기반 상태 분할까지 CNVkit과 GATK CNV의 실무를 정리합니다.

심화
|
20
|
검증 완료 (2026-07-22)
copy number variationCNV analysisread depth
진행률0/52 (0%)

SV 콜러가 왜 대형 CNV를 놓치나요

지난 편에서 Manta·Delly·GRIDSS로 SV를 봤습니다. 그런데 이 도구들이 실무에서 놓치는 SV 유형이 있습니다. 매우 큰 DEL과 DUP — 특히 100kbp 이상 크기.

이유는 이 도구들이 페어드-엔드 discordant read와 split read를 주 시그니처로 쓰기 때문입니다. 큰 DEL이 있으면 두 breakpoint 각각에 관여하는 리드는 소수라 통계 파워가 부족합니다. 반면 이 큰 DEL이 게놈에 만드는 가장 뚜렷한 신호는 커버리지 감소입니다. 그래서 CNV 전용 도구는 read depth를 주 시그니처로 씁니다.

CNV의 유형과 실무 의미

  • Germline CNV: 자연 다형성 (예: LDL 수용체 유전자의 CNV). 인구 유전학 · 발달 장애 연구.
  • Somatic CNV: 암에서 흔한 유전자 증폭(예: HER2 · MYC)이나 결실(예: PTEN · CDKN2A). 표적 치료 선택의 지표.
  • 소형 exon-level CNV: WES에서 유전자 내 몇 개 엑손 결실. 유전 질환 진단의 20~30%가 이 유형.

각 유형이 요구하는 도구가 다릅니다.

Read Depth 접근의 큰 그림

원리를 세 단계로.

1. 게놈을 bin으로 나누기

전 게놈을 일정 크기 bin(예: 1kb)으로 나누고 각 bin에 리드 개수를 셉니다. 이 카운트가 bin의 raw depth.

2. 편향 보정

Raw depth는 여러 편향이 있습니다.

  • GC 편향: GC 극단인 bin은 라이브러리 준비 시 덜 증폭 → depth 낮음.
  • Mappability 편향: 반복 서열 근처 bin은 리드가 unique하게 안 붙어 → depth 낮음.
  • 레이션(replication timing): 라이브러리 준비 시점의 세포 주기 편향.

이 편향을 로컬 회귀나 GAM 등으로 보정합니다.

3. 세그멘테이션

보정된 depth 프로파일에서 인접 bin들의 값이 급변하는 지점을 breakpoint로 잡고, 같은 값 유지 구간을 세그먼트로 묶습니다. 이게 CNV의 시작·종료 좌표.

세그먼트별 평균 depth가 참조 대비 반이면 hetero DEL, 0이면 homo DEL, 1.5×면 hetero DUP, 2×면 homo DUP.

CNVkit — WES · WGS 다 지원하는 표준

Eric Talevich가 만든 파이썬 도구. Somatic CNV(암 임상)에 특화되어 있지만 germline도 됩니다.

실행 흐름

bash
# 1) 참조 CNV 생성 (정상 샘플 여러 개로)
cnvkit.py batch \
-n normal1.bam normal2.bam normal3.bam ... \
-f hg38.fa \
-t exome_targets.bed \
-a exome_antitargets.bed \
--output-reference myref.cnn \
-d ref_output/
# 2) 종양 CNV 콜링
cnvkit.py batch tumor1.bam tumor2.bam \
-r myref.cnn \
-d results/
  • Target bed (-t): 표적 영역 (WES면 엑솜 bed).
  • Antitarget bed (-a): 표적 외 영역 (off-target 리드 활용).
  • 참조 (myref.cnn): 정상 샘플로 만든 baseline.

CNVkit의 아이디어: 심지어 off-target 리드도 CNV 신호로 씁니다. WES는 표적 외 영역에도 리드가 있어 이걸 안 쓰면 낭비.

결과

.cns 파일에 세그먼트별 log2 copy number ratio.

  • log2=0: 참조 대비 동일.
  • log2=−1: 절반 (hetero DEL 후보).
  • log2=+0.58: 1.5배 (hetero DUP 후보).
  • log2=+1: 2배 (homo DUP 후보).

시각화는 cnvkit.py scattercnvkit.py diagram으로 유전자별 카피 넘버 프로파일을 PDF로 출력.

GATK CNV — Best Practices 체제

Broad Institute의 GATK4에도 CNV 도구가 있습니다. Panel of Normals(PoN) 기반 접근.

Germline

bash
gatk GermlineCNVCaller \
--input case.hdf5 \
--contig-ploidy-calls ploidy_calls/ \
--model cohort-model \
--output cnv_output

여러 정상 샘플로 만든 모델이 필요.

Somatic

bash
# 1) 종양-정상 쌍에서 각 read count
gatk CollectReadCounts -I tumor.bam -L intervals.bed --format HDF5 -O tumor.hdf5
gatk CollectReadCounts -I normal.bam -L intervals.bed --format HDF5 -O normal.hdf5
# 2) 정상 PoN으로 정규화
gatk DenoiseReadCounts \
-I tumor.hdf5 \
--count-panel-of-normals pon.hdf5 \
--standardized-copy-ratios tumor.std.tsv \
--denoised-copy-ratios tumor.denoised.tsv
# 3) 세그멘테이션 + 콜링
gatk ModelSegments --denoised-copy-ratios tumor.denoised.tsv -O tumor.seg
gatk CallCopyRatioSegments -I tumor.seg -O tumor.called.seg

GATK CNV는 클라우드 워크플로(Terra)에 통합되어 있어 팀 표준 파이프라인이면 매끄럽습니다.

Control-FREEC · cn.mops — 대안

  • Control-FREEC: 프랑스 연구소가 만든 종양-정상 쌍 CNV 도구. B-allele frequency(BAF) 정보도 통합.
  • cn.mops: R 패키지. 여러 샘플의 read depth를 mixture Poisson 모델로 통합 콜링. 소규모 코호트에 안정적.

도구 선택 매트릭스

상황1순위2순위
암 종양-정상 쌍 임상 진단CNVkitGATK CNV Somatic
암 종양 단독CNVkit + PoNControl-FREEC
Germline 발달 장애 (WES exon-level)GATK CNV GermlineExomeDepth
인구 유전학 germline 대규모GATK CNV + gCNVcn.mops
소규모 코호트 (<20)cn.mopsCNVkit

GC 편향 보정 — 실무 감

GC 편향의 실체를 감으로 잡아봅시다. 인간 게놈 평균 GC = 40%. 각 1kb bin의 GC%가 20~70% 사이에 분포. 라이브러리에 따라 편향 곡선이 다릅니다.

PCR-free 라이브러리: GC 편향 거의 없음. 보정 최소. PCR 라이브러리: GC 40~50%에서 최고, 그 밖에서 감소 (U자 커브). Nextera XT: GC 20% 이하와 70% 이상에서 극단적 감소.

CNVkit의 --drop-low-coverage 옵션이 이 극단 bin을 자동 제거합니다. GC 편향이 심한 라이브러리에서는 log2 프로파일이 노이즈로 뒤덮이니 보정 이후에 세그멘테이션.

Circular Binary Segmentation — 세그멘테이션 알고리즘

세그멘테이션의 표준 알고리즘.

원리: bin depth 시계열에서 두 지점을 찍고 그 사이 평균이 다른지 t-검정. 유의하면 breakpoint. 이 과정을 반복.

R의 DNAcopy 패키지가 표준 구현. CNVkit이 내부에서 이 알고리즘을 사용.

손 계산 — 세그먼트 콜링

가상의 depth 프로파일 (log2 ratio).

text
bin 1-100: 평균 0.05 (참조)
bin 101-200: 평균 -0.95 (hetero DEL 후보)
bin 201-300: 평균 0.10 (참조 회복)
bin 301-500: 평균 0.60 (hetero DUP 후보)
bin 501-600: 평균 0.00 (참조)

Circular Binary Segmentation이 이렇게 분할할 것입니다.

  • seg 1: bin 1-100 (참조).
  • seg 2: bin 101-200 (log2=−0.95, hetero DEL, 크기 100kb).
  • seg 3: bin 201-300 (참조).
  • seg 4: bin 301-500 (log2=+0.60, hetero DUP, 크기 200kb).
  • seg 5: bin 501-600 (참조).

각 세그먼트별로 CNV 유형과 크기가 결정.

시각화 — IGV와 UCSC

CNV VCF를 IGV에 로드하면 각 세그먼트가 색 상자로 표시. UCSC Genome Browser의 Copy Number 트랙과도 비교 가능.

Colab에서 R로 소형 실습

CNVkit은 Colab에서 무겁고, R에서 DNAcopy로 세그멘테이션만 시연이 편합니다.

r
install.packages("DNAcopy")
library(DNAcopy)

# 가상 depth 데이터
set.seed(42)
n <- 500
depth <- c(rnorm(100, 0, 0.1), 
           rnorm(100, -1.0, 0.1),
           rnorm(100, 0, 0.1),
           rnorm(200, 0.6, 0.1))
pos <- 1:n

cna <- CNA(genomdat = depth, chrom = rep("chr1", n), maploc = pos)
cna.smoothed <- smooth.CNA(cna)
seg <- segment(cna.smoothed)

print(seg$output)
plot(seg, plot.type = "s")

이 코드 하나로 CBS 세그멘테이션과 시각화 감을 잡습니다.

CS 매핑

  • 1차원 신호 분할: DryBench "신호 세그멘테이션" 편(signal-segmentation) 참고.
  • 편향 보정: GC · mappability는 지역 회귀로 예측되는 시스템적 편향.
  • HMM 기반 상태 추정: 일부 CNV 도구(gCNV)는 HMM으로 카피 넘버 상태(0,1,2,3,4+)를 추정.

마무리

CNV는 SV의 특수 유형이지만 read depth라는 완전히 다른 시그니처를 씁니다. GATK Best Practices에서 SNV/인델과 별도 트랙으로 취급되는 이유입니다. 다음 편(S16)에서는 GATK가 콜한 변이를 어떻게 하플로타입 단위로 정리하고, 소규모 시퀀싱에서 놓친 변이를 알려진 인구 데이터로 임퓨테이션하는지 봅니다.

더 깊게 파고 싶다면

  • Talevich E. et al. (2016), CNVkit: Genome-wide copy number detection and visualization from targeted DNA sequencing. PLoS Comput Biol 12:e1004873. CNVkit 원 논문.
  • Boeva V. et al. (2012), Control-FREEC: a tool for assessing copy number and allelic content using next-generation sequencing data. Bioinformatics 28:423.
  • Klambauer G. et al. (2012), cn.mops: mixture of Poissons for discovering copy number variations in next-generation sequencing data with a low false discovery rate. Nucleic Acids Research 40:e69.
  • Olshen A.B. et al. (2004), Circular binary segmentation for the analysis of array-based DNA copy number data. Biostatistics 5:557. CBS 원 논문.
  • UCSC Genome Browser (https://genome.ucsc.edu/): CNV 시각화 표준.

CNVkit 리포트 한 번 열어보면 유전자별 카피 넘버가 임상 리포트에 어떻게 실리는지 감이 옵니다. 다음 편에서 하플로타이핑과 임퓨테이션으로 갑시다.