VCF는 변이 탐지 결과를 저장하는 포맷입니다.
BAM에서 변이를 찾고 나면 그 결과가 VCF로 나옵니다.
어떤 염색체의 어떤 위치에서 레퍼런스와 다른 염기가 발견됐는지, 그게 얼마나 신뢰할 수 있는지를 담고 있습니다.
BCF는 VCF를 바이너리로 압축한 포맷입니다.
SAM과 BAM의 관계와 같습니다. 담고 있는 정보는 동일하고 저장 방식만 다릅니다.
VCF가 어떻게 생겼나
VCF도 SAM처럼 #으로 시작하는 헤더 섹션과 변이 레코드로 나뉩니다.
##fileformat=VCFv4.2
##FILTER=<ID=PASS,Description="All filters passed">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##reference=GRCh38
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE1
chr1 925952 rs1234567 C T 50 PASS DP=30;AF=0.5 GT:DP:GQ 0/1:30:99
chr1 931279 . A ATG 30 LowQual DP=10;AF=0.2 GT:DP:GQ 0/1:10:30
##으로 시작하는 줄들은 메타데이터입니다.
INFO, FORMAT, FILTER 필드에 어떤 키가 있고 각각 무슨 의미인지를 미리 정의해둡니다.
#CHROM으로 시작하는 줄이 컬럼 헤더이고, 그 아래부터 실제 변이 레코드입니다.
변이 레코드 읽는 법
변이 한 줄을 왼쪽부터 읽으면 이렇습니다.
chr1 925952 rs1234567 C T 50 PASS DP=30;AF=0.5 GT:DP:GQ 0/1:30:99
- CHROM / POS: 어떤 염색체의 몇 번째 위치인지입니다. VCF는 1-based 좌표를 씁니다.
- ID: 알려진 변이면 dbSNP의 rs번호가 들어갑니다. 처음 발견된 변이나 미등록 변이는 .입니다.
- REF / ALT: 레퍼런스 염기와 대체 염기입니다. 이 두 컬럼이 핵심입니다.
SNV: REF=C ALT=T → C가 T로 바뀜
삽입: REF=A ALT=ATG → A 뒤에 TG가 삽입됨
결실: REF=ATG ALT=A → TG가 결실됨
삽입과 결실에서 앞에 공통 염기(앵커 염기)가 붙는 이유는 변이 위치를 명확히 고정하기 위해서입니다.
- QUAL: 이 변이가 진짜 변이일 가능성에 대한 점수입니다. 높을수록 신뢰도가 높습니다.
- FILTER: 품질 기준을 통과했는지입니다.
- PASS: 모든 필터를 통과한 고품질 변이
- 필터 이름(예: LowQual, LowDepth): 해당 조건에서 걸린 변이
- .: 필터를 아예 적용하지 않은 상태
분석에서 보통 PASS인 변이만 씁니다.
단, 종양 분석처럼 낮은 빈도의 변이를 찾아야 할 때는 필터에 걸린 변이도 다시 검토하기도 합니다.
INFO 필드
변이 전체에 대한 정보를 담습니다. KEY=VALUE 형태로 ;로 구분합니다.
자주 보는 키:
| 키 | 의미 |
| DP | 이 위치의 전체 리드 깊이 |
| AF | ALT allele 빈도 |
| MQ | 평균 매핑 품질 |
| FS | 가닥 편향 지표 (FisherStrand) |
| QD | QUAL을 깊이로 나눈 값 |
| ANN | SnpEff 주석 결과 |
| CSQ | VEP 주석 결과 |
SnpEff나 VEP로 기능 주석을 붙이면 ANN 또는 CSQ 필드에 이 변이가 어떤 유전자의 어떤 영역에 있는지, 아미노산이 어떻게 바뀌는지가 추가됩니다.
FORMAT / SAMPLE 필드
FORMAT은 샘플 필드의 구조를 정의하고, 그 오른쪽에 샘플별 값이 같은 순서로 옵니다.
FORMAT SAMPLE1 SAMPLE2
GT:DP:GQ 0/1:30:99 0/0:25:85
자주 보는 FORMAT 키:
| 키 | 의미 |
| GT | Genotype |
| DP | 이 샘플에서 해당 위치 깊이 |
| GQ | Genotype 품질 점수 |
| AD | REF와 ALT 각각의 리드 수 |
| AF | 이 샘플에서 ALT allele 빈도 |
GT(Genotype) 해석이 가장 중요합니다. 0은 REF, 1은 첫 번째 ALT를 의미합니다.
0/0 → 동형 레퍼런스 (변이 없음)
0/1 → 이형접합 (한쪽만 변이)
1/1 → 동형 변이 (양쪽 모두 변이)
./. → 미결정
0|1 → 위상 정보 포함 (| 로 구분, 하플로타입 정보)
AD로 VAF 계산:
AD=25,5 → REF 25개 리드, ALT 5개 리드
VAF = 5 / (25 + 5) = 16.7%
멀티샘플 VCF는 FORMAT 오른쪽에 샘플이 여러 개 붙습니다. 종양-정상 쌍(tumor-normal pair) 분석이나 가족 trio 분석에서 자주 씁니다.
BCF
BCF(Binary Call Format)는 VCF를 바이너리로 압축한 포맷입니다.
담고 있는 내용은 VCF와 완전히 동일합니다.
VCF 대신 BCF를 쓰는 이유는 두 가지입니다.
속도: 대용량 VCF 파일을 처리할 때 BCF가 훨씬 빠릅니다. 특히 수천 개 샘플이 들어있는 멀티샘플 VCF는 파일 크기가 수십~수백 GB에 달하는데, 이런 파일을 텍스트로 읽으면 속도가 매우 느립니다.
인덱싱: bcftools index 또는 tabix로 인덱스를 생성하면 특정 게놈 구간의 변이만 빠르게 꺼낼 수 있습니다. VCF도 bgzip 압축 + tabix 인덱스를 붙이면 같은 기능이 가능합니다.
실무에서는 VCF도 거의 항상 bgzip으로 압축해서 .vcf.gz 형태로 씁니다. tabix 인덱스(.tbi)를 함께 두면 BCF와 비슷한 수준의 접근 속도를 얻을 수 있습니다.
sample.vcf.gz ← bgzip 압축 VCF
sample.vcf.gz.tbi ← tabix 인덱스
VCF와 BCF 비교
| VCF | BCF | |
| 형식 | 텍스트 | 바이너리 |
| 직접 읽기 | 가능 | 불가 (bcftools view로 변환) |
| 용량 | 큼 | 작음 |
| 처리 속도 | 느림 | 빠름 |
| 주요 용도 | 소규모, 확인, 공유 | 대규모 코호트, 빠른 처리 |
한 줄 요약
VCF는 변이 탐지 결과를 담는 포맷으로, 어디서 어떤 변이가 발견됐는지와 그 품질 정보를 저장합니다. BCF는 VCF를 바이너리로 압축한 버전으로 대용량 데이터 처리에 유리합니다.
'BI&Programming-Tools > File Formats' 카테고리의 다른 글
| [바이오 빅데이터 파일 포맷] GFF3 / GTF (0) | 2026.06.20 |
|---|---|
| [바이오 빅데이터 파일 포맷] gVCF (0) | 2026.06.20 |
| [바이오 빅데이터 파일 포맷] SAM / BAM / CRAM (0) | 2026.06.18 |
| [바이오 빅데이터 파일 포맷] FASTQ (0) | 2026.06.17 |
| [바이오 빅데이터 파일 포맷] FASTA (0) | 2026.06.17 |
