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번
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 점수와 뜻은?해설
# 은 ASCII 35 이므로 Q = 35 − 33 = 2 입니다. 오류 확률 63% — 사실상 무작위죠. Illumina 는 이것을 read segment quality control indicator 로 씁니다.🤔 확인 문제
이 자료의 품질 점수가 여섯 가지뿐인 이유는?
해설 quality score binning 입니다. NextSeq·NovaSeq 세대의 기본 동작이고, 2강에서 본
NS500424(NextSeq) 와 아귀가 맞습니다 — 메타데이터의 HiSeq 2000 이었다면 이런 모양이 안 나옵니다.🤔 확인 문제
Phred 점수를 산술 평균 내는 것이 엄밀히 틀린 이유는?
해설 Q10 과 Q30 의 진짜 평균 오류율은 (0.1+0.001)/2 = 5.05% 이고 그것은 Q13 쯤입니다. 산술 평균은 Q20(1%)이라고 말하죠 — 다섯 배 낙관적입니다.