RNA-seq 정규화란? — 읽은 수를 '비교 가능한 값'으로 바꾸는 법 (정량·정규화·DESeq2 완전 정리)

TL;DR — 시퀀싱한 read를 유전체에 정렬하고 나면, 유전자마다 몇 번 읽혔는지(raw count)를 셉니다. 그런데 이 날 카운트는 그대로 비교하면 안 됩니다. 샘플마다 시퀀싱 깊이가 다르고, 유전자마다 길이가 달라 긴 유전자가 더 많이 읽히기 때문입니다.
그래서 정규화(normalization)를 합니다. CPM은 깊이만, RPKM·FPKM은 깊이+길이, TPM은 깊이+길이를 보정하되 샘플 간 비교에 더 일관적입니다(열 합이 항상 같아 '비율'이 됨). 한 줄 요약 — 한 샘플 안에서 유전자끼리 비교하면 TPM, 조건 간 차등발현(DE)이면 raw count + DESeq2입니다.
가장 흔한 실수가 여기 있습니다 — DESeq2·edgeR 같은 DE 도구엔 정규화한 값(TPM·FPKM)이 아니라 '날 정수 카운트(raw count)'를 넣어야 합니다. 이 도구들은 자체 정규화(DESeq2의 median-of-ratios, edgeR의 TMM)로 깊이뿐 아니라 조성 편향까지 잡는데, TPM을 미리 넣으면 그 통계 모델이 깨집니다.
🔗 관련 글 · 같은 RNA-seq 파이프라인: SAM/BAM 정렬 결과 · DESeq2 차등발현 분석(실전)
1. 정렬 다음 단계 — 읽은 수를 센다
정렬까지 끝났다면, 다음은 '어느 유전자가 몇 번 읽혔나'를 세는 일입니다.
- 유전자 카운팅 — BAM (정렬 결과)을 받아 유전자마다 read 수를 셉니다(featureCounts·HTSeq). 결과는 유전자 × 샘플 정수 행렬(counts matrix)입니다.
- 정렬 없이 바로 — Salmon·kallisto는 전사체에 빠르게 대응시키는 유사정렬(pseudo-alignment) 방식으로, 추정 카운트 + TPM + 유효 길이를 한 번에 냅니다.
참고로 RNA는 인트론이 잘려 있어 엑손과 엑손을 건너뛰는 read가 생기므로, 정렬엔 그걸 처리하는 스플라이스 인지(splice-aware) 정렬기(STAR·HISAT2)를 씁니다. (DNA용 BWA는 이 점프를 처리하지 못합니다.)
이렇게 얻은 날 카운트(raw count)가 모든 분석의 출발점입니다. 그런데 이걸 그대로 비교하면 안 됩니다.
2. 왜 날 카운트는 못 비교하나 — 두 가지 편향
날 카운트에는 '생물학적 차이'가 아닌 두 가지 기술적 편향이 섞여 있습니다.
- ① 시퀀싱 깊이(라이브러리 크기) — 더 깊게 시퀀싱한 샘플은 모든 유전자에서 read가 많습니다. 그러니 샘플끼리(between-sample) 비교하려면 깊이를 맞춰야 합니다.
- ② 유전자 길이 — 전장을 읽는 프로토콜에서 긴 유전자는 read가 더 많이 잡힙니다. 그러니 한 샘플 안에서 서로 다른 유전자(within-sample)를 비교하려면 길이를 맞춰야 합니다.
핵심은 — '무엇을 비교하느냐'에 따라 필요한 보정이 다르다는 것. 이게 지표 선택의 전부입니다.
3. 깊이만 보정 — CPM
가장 단순한 보정이 백만당 카운트(CPM, counts per million)입니다.
CPM = (유전자 카운트 ÷ 총 매핑 read 수) × 10⁶
총 read로 나눠 깊이(라이브러리 크기)만 맞춥니다. 길이는 보정하지 않으므로, 같은 샘플 안에서 길이가 다른 유전자끼리 비교하는 데는 부족합니다.
4. 길이까지 보정 — RPKM과 FPKM
길이까지 나눈 게 RPKM (Mortazavi 외 2008)과 FPKM (Trapnell 외 2010)입니다.
RPKM = 10⁹ × C ÷ (N × L) — C = 유전자 read 수, N = 총 read, L = 길이(bp). 즉 CPM ÷ 길이(kb).
- RPKM (reads per kilobase per million) — read를 셉니다(단일말단 시절 표기).
- FPKM (fragments per kilobase per million) — fragment를 셉니다. 양말단(paired-end)에서 한 fragment의 두 read를 이중으로 세지 않으려는 것일 뿐, 아이디어는 RPKM과 같습니다.
즉 RPKM ≈ FPKM (read냐 fragment냐 차이). 둘 다 깊이+길이를 보정합니다.

5. 샘플 간 비교엔 TPM
RPKM·FPKM엔 약점이 있습니다 — 샘플마다 값의 총합(열 합)이 달라, 샘플끼리 비교할 때 기준이 흔들립니다. 이를 고친 게 TPM (transcripts per million)입니다. 비결은 나누는 순서입니다.
- 먼저 길이로 나눈다 → RPK = 카운트 ÷ 길이(kb)
- 그다음 그 샘플의 모든 RPK 합으로 나눠 × 10⁶ → TPM
RPKM/FPKM이 '깊이 먼저, 길이 나중'이라면 TPM은 '길이 먼저, 깊이 나중'입니다. 효과가 큽니다 — 모든 샘플에서 TPM 열 합이 항상 10⁶로 같아져, 각 값이 '백만 전사체 중 몇 개'라는 비율이 됩니다. 그래서 샘플 간 비교는 FPKM보다 TPM이 일관적입니다(Wagner 외 2012).
6. 가장 중요한 함정 — DE엔 raw count를 넣어라
여기서 학생이 가장 많이 틀립니다. 차등발현(DE) 분석 도구 DESeq2·edgeR엔 정규화한 값이 아니라 '날 정수 카운트(raw count)'를 넣어야 합니다.
- 왜? 이 도구들은 카운트를 음이항분포(negative binomial)로 모델링하고, 내부에서 자체 정규화를 합니다 — DESeq2는 median-of-ratios (크기 인자), edgeR는 TMM. TPM·FPKM처럼 미리 정규화한 값을 넣으면, 더 이상 정수도 아니고 모델이 가정하는 평균–분산 관계가 깨져 통계가 무너집니다.
- 무엇이 더 좋은가 — median-of-ratios·TMM은 깊이뿐 아니라 조성 편향(composition bias)까지 잡습니다. 소수의 초고발현 유전자가 read를 독식하면 나머지가 상대적으로 적게 잡히는데, 단순 CPM (총합 스케일링)으론 이걸 못 잡습니다. 그래서 DE에선 CPM이 아니라 median-of-ratios·TMM이 정석입니다(Love 외 2014; Robinson 외 2010).
⚠️ 흔한 오해 정리 — ❌ "TPM으로 정규화한 뒤 DESeq2에 넣는다"(모델이 깨짐) · ❌ "edgeR TMM이 유전자 길이까지 보정한다"(아니다 — TMM은 깊이+조성만; 길이는 같은 유전자를 두 조건에서 비교할 때 상쇄되어 DE엔 불필요).

7. 어떤 질문엔 어떤 값을 쓰나
정리하면 질문이 지표를 정합니다.
| 질문 | 무엇을 보정? | 권장 |
|---|---|---|
| 한 샘플 안에서 "유전자 A가 B보다 높나?" | 유전자 길이 | TPM (또는 FPKM) |
| 조건 간 "유전자 A가 차등발현됐나?" | 깊이+조성 | raw count + DESeq2·edgeR |
| 시각화(히트맵·PCA·클러스터링) | 분산 안정화 | log₂(x+1) 또는 DESeq2 VST·rlog |
DESeq2의 VST·rlog는 저(低)카운트 유전자에서 분산이 평균에 끌려가는 문제를 완화하는 시각화·탐색용 변환입니다(DE 검정 자체는 raw 카운트 모델 그대로). 차등발현 시각화·농축분석으로 이어집니다.
💡 한 가지 더 — "샘플 간 비교엔 TPM"도 상대적 우위일 뿐입니다. 샘플 간 총 RNA 양·조성이 크게 다르면 TPM조차 정량 비교가 안전하지 않습니다(Zhao 외 2020). 엄밀한 조건 간 정량·DE는 결국 raw count + DESeq2입니다.

8. 단일세포는 다르다 — 길이 보정을 하지 않는다
단일세포 RNA-seq에선 보정 공식이 바뀝니다. 대부분의 단일세포 기법(10x 등)은 3′ 말단만 읽는 3′-태그 방식이라, 전사체가 길든 짧든 한 개로 세집니다 → 유전자 길이 편향이 없습니다. 따라서 TPM·길이 정규화를 쓰지 않습니다(이때 TPM = CPM).
대신 세포별 깊이 정규화(CPM류 · Seurat의 LogNormalize)나 모델 기반 SCTransform (Hafemeister·Satija 2019)을 씁니다. (Seurat 실전 참고.) 전장을 읽는 Smart-seq2는 길이 편향이 있어 또 다릅니다.
9. 핵심 정리
- ✅ 정렬 뒤 유전자별 날 카운트(raw count)를 센다 → 그대로는 못 비교(깊이·길이 편향).
- ✅ CPM = 깊이만 · RPKM/FPKM = 깊이+길이(read vs fragment 차이) · TPM = 길이 먼저·깊이 나중 → 열 합이 항상 10⁶라 샘플 간 비교에 일관적.
- ✅ 질문이 지표를 정한다 — 샘플 내 유전자 비교 = TPM, 조건 간 DE = raw count + DESeq2·edgeR, 시각화 = log₂·VST.
- ⚠️ DE엔 정규화 값 금지 — DESeq2·edgeR는 raw 카운트 + 자체 정규화(median-of-ratios·TMM)로 깊이+조성까지 잡는다. TMM은 길이 보정 안 함.
- ✅ 단일세포(3′-태그)는 길이 편향이 없어 TPM 안 씀 → LogNormalize·SCTransform.
10. 다음 학습 추천
- 📊 DESeq2로 차등발현 분석하기 — raw count를 넣어 DE를 돌리는 바로 그 실전 (실전)
- 🔬 단일세포 RNA-seq란? — 정규화가 왜 달라지는지 (응용)
- 🧬 Seurat 단일세포 분석 — LogNormalize·SCTransform을 코드로 (실전)
References
- Mortazavi, A., et al. (2008). Mapping and quantifying mammalian transcriptomes by RNA-Seq (RPKM). Nature Methods, 5(7), 621–628.
- Trapnell, C., et al. (2010). Transcript assembly and quantification by RNA-Seq (FPKM/Cufflinks). Nature Biotechnology, 28(5), 511–515.
- Li, B., et al. (2010). RNA-Seq gene expression estimation with read mapping uncertainty (TPM 정의). Bioinformatics, 26(4), 493–500.
- Wagner, G. P., Kin, K., & Lynch, V. J. (2012). Measurement of mRNA abundance using RNA-seq data: RPKM measure is inconsistent among samples (TPM). Theory in Biosciences, 131(4), 281–285.
- Love, M. I., Huber, W., & Anders, S. (2014). Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biology, 15(12), 550.
- Robinson, M. D., McCarthy, D. J., & Smyth, G. K. (2010). edgeR. Bioinformatics, 26(1), 139–140. · Robinson, M. D., & Oshlack, A. (2010). A scaling normalization method (TMM). Genome Biology, 11(3), R25.
- Conesa, A., et al. (2016). A survey of best practices for RNA-seq data analysis. Genome Biology, 17, 13.
- Zhao, S., et al. (2020). Misuse of RPKM or TPM normalization when comparing across samples. RNA, 26(8), 903–909.
Pipette & Pipeline · A bio portfolio journal — bridging research, data, and industry.
'Bio Glossary > Bioinformatics 101' 카테고리의 다른 글
| RNA-seq 정량 단위 완전 정리 — TPM·RPKM·FPKM·CPM, 무엇을 언제 쓰나 (0) | 2026.06.18 |
|---|---|
| p-value와 FDR, 다중검정보정이란? — 왜 RNA-seq 결과는 'adjusted p-value'를 쓸까 (0) | 2026.06.14 |
| 변이 호출(variant calling)이란? — BAM에서 진짜 변이를 가려내 VCF로 (GATK·DeepVariant 완전 정리) (0) | 2026.06.02 |
| 서열 정렬(read alignment)이란? — 수억 개 read를 유전체에 맞추는 법 (BWA·MAPQ·정렬 도구 완전 정리) (0) | 2026.06.02 |
| VCF 파일이란? — 유전 변이 정보의 표준 포맷 (8컬럼·INFO·GT 완전 정리) (3) | 2026.05.29 |