c# CNVkit: 타깃 시퀀싱 및 엑솜 기반 Copy Number Variation 분석 도구
CNVkit은 타깃 시퀀싱(targeted sequencing) 또는 엑솜(exome) 데이터에서 Copy Number Variation(CNV)을 추정하기 위한 Python 기반 소프트웨어 도구이다. 여러 샘플의 커버리지 데이터를 활용하여 표준화된 참조(reference) 모델과 비교한 후, 게놈 단위의 복수 수를 추정하고, 구간 단위로 분할(segmentation)하여 CNV를 식별한다. CNVkit은 저선택성(off-target) 읽기(read)도 활용하여 더 안정적인 정상화와 해석을 가능하게 한다.
- 주요 용도: 암 샘플의 CNV 탐지, 대상 패널 및 엑솜 데이터의 CNV 분석, 참조 모델 기반 정규화, 시각화 및 리포트 생성
- 사용 환경: Python 기반 도구로, 명령행 인터페이스(CLI) 중심의 워크플로를 제공하며, R / 다른 도구와의 상호작용도 가능하다.
---
## 원리와 배경
CNVkit은 샘플 간 커버리지 차이를 보정하고, 커버리지의 로그-2 비율(log2 ratio)을 통해 CNV를 추정한다. 이때 일반적으로 기준이 되는 참조(reference)는 하나 이상의 정상 샘플로 구성된 합성 모델이며, 대상 영역(targets)과 비대상 영역(antitargets)의 커버리지를 모두 활용하여 보다 안정적인 normalization을 수행한다. 핵심 수식은 다음과 같다.
- 로그 비율 계산: $L_i = \log_2 \left( \frac{D_i}{D_{\text{ref},i}} \right)$
- 여기서 $D_i$는 bin $i$ 또는 구간의 관찰 커버리지이고, $D_{\text{ref},i}$는 참조 구간의 기대 커버리지이다.
- 절대 복제 수 추정(단순 근사, 구간별 평균 로그비율로부터): $CN \approx 2 \cdot 2^{L}$
- 이 식은 기본적으로 이진성(diploid) 기준에서의 변화를 반영한다. 보다 정교한 모델은 분할된 구간마다 적합한 복제 수를 부여한다.
- 구간 분할(sementation) 시 사용되는 일반적 원리
- 로그 비율의 구간 변화가 일정하지 않은 영역을 경계로 나누어, 각 구간이 하나의 복제 수 상태를 가지도록 분할한다.
- 구간 분할은 HMM, CBS(Circular Binary Segmentation) 등 다양한 방법으로 수행될 수 있으며, 데이터 특성에 따라 최적의 방법이 선택된다.
또한 CNVkit은 GC-content 보정, mappability 보정 등 커버리지에 영향을 주는 정량적 인자들을 반영하여 정규화의 정확도를 높인다.
---
## 입력 데이터 및 전처리
- 입력 데이터 유형
- BAM: 타깃 시퀀싱 또는 엑솜 데이터의 정렬된 읽기 파일
- TARGETS(BED): 분석 대상 영역의 좌표
- ANTITARGETS(BED): 비타깃 영역으로 간주되는 보완 구간
- CALIBRATION/참조 샘플: 정상 샘플 또는 이미 만들어진 참조 파일
- 전처리 개요
- 커버리지 집합 계산: 각 구간의 읽기 커버리지 집계
- GC-content, mappability 보정 적용
- 참조 모델 생성 및 로딩
- 일반적인 워크플로우 포인트
- 하나의 배치(batch)로 다수의 샘플에 대해 참조를 공유하거나, 개별 참조를 사용할 수 있다.
- 타깃 영역과 비타깃 영역의 커버리지를 함께 분석하여 더 안정적인 정규화를 수행한다.
---
## 파이프라인 개요 및 주요 단계
1) 참조(reference) 생성
- 정상 샘플들의 커버리지 데이터를 모아 합성 참조를 생성하거나, 미리 제공된 참조를 사용한다.
- 참조 생성 시 GC 보정 및 기타 보정 과정을 포함할 수 있다.
2) 샘플 정규화 및 로그 비율 계산
- 각 샘플의 구간 커버리지를 참조와 비교하여 $L_i$를 계산한다.
- 필요 시 보정 인자 및 가중치를 적용한다.
3) 구간 분할(segmentation)
- 로그 비율의 구간 경계를 찾아 하나의 복제 수 상태를 가지는 구간으로 분할한다.
- 분할 방법은 데이터 특성에 따라 달라진다.
4) 복제 수 추정 및 보고
- 각 구간에 대해 추정된 CN을 부여하고, 시각화 및 리포트를 생성한다.
5) 시각화 및 출력
- 히스토그램, 가계도형, 게놈 뷰어, 분할 결과의 표 형태 출력 등을 제공한다.
- 간단한 워크플로우 예시
- targets.bed와 antitargets.bed를 준비
- 참조 샘플로부터 reference.cnn을 생성하거나 사전 준비된 참조를 로드
- batch 명령 또는 구성 파일을 통해 각 샘플의 CNV 분석 수행
- 결과 파일(.cnn, .cns 등) 및 시각화를 확인
---
## 산출물(출력 파일)
- 구간별 복제 수 및 로그 비율 데이터
- 일반적으로 bin 수준의 CNV 데이터와 구간(segmented) 데이터를 포함하는 파일이 생성된다.
- 예시 출력 형식: bin 단위의 위치 정보, 커버리지, $L_i$, 추정 CN
- 분할 결과 파일
- CNS( segmentation ) 파일: 게놈 전역의 분할 구간과 각 구간의 평균 로그 비율, 추정 CN
- 참조 파일
- 참조 커버리지 모델 또는 참조 CNN 파일
- 시각화 및 리포트
- 분할 결과의 그래프, 게놈 뷰(ideogram), 샘플별 요약표 등
- 주의
- 파일 확장자는 일반적으로 CNVkit에서 사용하는 표준 확장자를 따른다(CNN, CNS 등). 구체적 파일 이름은 실행 옵션에 따라 다를 수 있다.
---
## 해석과 활용 팁
- CNV 해석 포인트
- CNV의 신뢰도는 분할의 경계선 품질, 참조 모델의 적합도, GC 및 맵핑 보정의 정확성에 크게 좌우된다.
- 작은 CNV(특히 단일 구간의 복제 수 변화)는 샘플 간 비교 및 배치 효과에 민감하므로, 다수의 정상 샘플로 구성된 참조가 유리하다.
- 품질 관리(QC)
- 로그 비율 분포의 정규성 여부, GC-커버리치 상관관계, 비타깃 영역의 읽기 커버리지 비율 등을 확인한다.
- 분할 결과에서 너무 많은 작고 불안정한 구간이 나타나면 보정 파라미터를 조정하거나 데이터 품질을 재평가한다.
- 해석 보조
- 절대 CN 추정치보다, 동일 샘플 내에서의 변동성, 구간 간의 동시 변화 등을 함께 고려하는 것이 좋다.
- 필요한 경우 Salz(E) 등의 추가 통계적 검증이나 시퀀싱 설계의 보완이 필요하다.
---
## 구현 상세 및 팁
- 구현 언어 및 환경
- CNVkit은 Python 기반의 CLI 도구로, 설치 후 명령어를 통해 워크플로우를 실행한다.
- 일반적인 명령 구성 요소
- 참조 생성, 샘플 정규화, 분할, CN 추정, 리포트 및 시각화
- 조합 가능한 옵션
- 대상 영역의 정의 방식(타깃 기반 또는 확장된 영역), 참조 샘플의 구성, 분할 알고리즘 선택, 출력 형식 등의 옵션이 존재한다.
- 권장 실무 tip
- 가능하면 동일 배치의 샘플 간 비교를 권장하고, 참조는 가능한 한 많은 정상 샘플로 구성한다.
- 분할 품질을 높이기 위해 GC 보정 및 비타깃 영역 보정의 정확성을 확인한다.
---
## 비교 및 대안 도구
- CNVkit과 유사한 CNV 분석 도구들
- ExomeCNV, EXCAVATOR2, CODEX2 등.
- 장단점 비교 포인트
- 대상 시퀀싱에서의 정상화 방식, 비타깃 영역 활용 여부, 분할 알고리즘의 차이, 출력 포맷의 친숙도 등이 주요 비교 포인트이다.
- 선택 시 고려사항
- 데이터 특성(타깃 패널 커버리지 분포, 정상 샘플 수), 분석 목적(발견적 CNV 탐지 vs 보고용 CNV 명확화), 워크플로우와의 호환성 등을 종합적으로 고려한다.
---
## 한계와 주의사항
- CNV 탐지의 민감도는 수집된 데이터의 품질과 참조 모델의 적합성에 크게 의존한다.
- 작은 CNV, 고도로 재실험된 또는 저커버리 영역에서의 검출은 불확실성이 크다.
- GC 콘텐츠, 중복 영역, 맵핑 품질 등의 보정이 부정확하면 오탐/누락이 증가할 수 있다.
- 해석 시 생물학적 맥락(암의 특성, 동형성 등)을 함께 고려해야 한다.
---
## 참조
- CNVkit 공식 문서 및 튜토리얼
- 관련 연구 및 사례 연구에서 CNVkit의 활용 예
---
관련 문서: [[WES 및 타깃 시퀀싱에서의 CNV 분석 가이드]], [[CNV]]