3강 / 20강

품질 점수 — 글자 하나가 확률 하나

Phred 점수와 ASCII · 그리고 이 자료의 품질이 여섯 가지뿐인 이유

품질 점수 — 글자 하나가 확률 하나
E 는 글자가 아니라 숫자 36이고, 36은 오류 확률 0.00025입니다. 품질 줄은 처음부터 끝까지 확률의 나열이에요.

FASTQ 의 네 번째 줄은 서열과 글자 수가 똑같습니다. 서열의 i번째 염기에 대해, 품질 줄의 i번째 글자가 "이 염기가 틀렸을 확률"을 담고 있기 때문입니다.

Phred 점수 Q = −10 · log₁₀ P
Q 20 → 100번에 1번 틀림 · Q 30 → 1,000번에 1번 · Q 40 → 10,000번에 1번

그 숫자를 파일에 넣을 때는 ASCII 문자 한 글자로 바꿉니다. Illumina 는 Q + 33 번째 문자를 씁니다 (Phred+33).

문자 ! " # $ … 5 … A … E … I Q 0 1 2 3 … 20 … 32 … 36 … 40

그래서 # 은 Q2, E 는 Q36 입니다.

문자 → 숫자 → 확률. ord(c) - 33 한 줄이 전부입니다.
Python 브라우저에서 실행
직접 세어 보면 이 자료의 정체가 드러납니다.
Python 브라우저에서 실행

여섯 가지뿐입니다

Q2 · Q14 · Q21 · Q27 · Q32 · Q36. 그 사이 값은 하나도 없습니다.

이것은 고장이 아니라 설계입니다. Illumina 는 2014년 무렵부터 품질 점수 뭉치기(quality score binning)를 씁니다 — 40가지 점수를 8개 칸으로 몰아넣는 것이죠. 파일 크기가 크게 줄고, downstream 결과는 거의 안 바뀐다는 것이 그들의 주장입니다.

얻는 것

품질 줄이 잘 압축됩니다. 같은 글자가 반복되니까요. 이 자료도 78%가 Q36 한 값입니다.

잃는 것

Q36 이라고 적힌 염기들의 실제 품질은 Q34~Q40 으로 제각각이었을 텐데, 그 구분이 영영 사라졌습니다.

그리고 Q2 는 특별합니다. Illumina 는 "이 염기는 아예 믿지 말라"는 뜻으로 Q2(#)를 씁니다. 1강에서 본 read 끝의 ##### 가 그것이었죠.

오른쪽 그림은 자료가 아니라 예시입니다 — 뭉치기 전 모양을 짐작해 본 것뿐이에요.
Python 브라우저에서 실행

🎮 품질 변환기

문자 · Q · 오류 확률 사이를 오가며 감을 잡으세요.

품질 변환기 — 문자와 확률 사이
불러오는 중…
🤔 확인 문제
품질 문자 # 의 Phred 점수와 뜻은?
🤔 확인 문제
이 자료의 품질 점수가 여섯 가지뿐인 이유는?
🤔 확인 문제
Phred 점수를 산술 평균 내는 것이 엄밀히 틀린 이유는?