군마다 시료가 셋뿐일 때: t-검정을 limma로 바꾸면서 알게 된 것
3 대 3에서는 Mann-Whitney로 p < 0.05가 나올 수 없고, t-검정은 표준편차 두 배 차이도 절반 넘게 놓칩니다. limma는 보정 통과 목록을 두 배로 늘리지만 거짓 비율을 낮추지는 않습니다. 정답을 아는 가상 실험과 논문 네 편으로 정리했습니다.
오믹스 실험에서는 군마다 시료 세 개(3 대 3)로 비교하는 일이 흔합니다. 이 글은 그 조건에서 통계가 해 줄 수 있는 것과 못 하는 것, 그리고 저희가 기본 검정을 바꾸면서도 바꾸지 않은 것을 정리했습니다.
근거는 공개된 논문과 가상 데이터로 돌린 시뮬레이션뿐이며, 시뮬레이션 스크립트와 출력은 공개해 두었습니다. 고객 자료는 쓰지 않았습니다. (English version: Three Samples per Group)
저울 세 번 이야기
몸무게를 세 번 쟀더니 60.1, 60.3, 59.9 kg이 나왔다고 해 보겠습니다. 흔들림이 작아 보입니다. 그런데 그 세 번이 우연히 비슷했던 것인지, 정말 이 저울이 늘 그만큼만 흔들리는지는 세 번만으로는 알 수 없습니다. 다음 세 번은 58, 61, 63이 나올 수도 있습니다.
t-검정은 「두 군의 평균 차이」를 「군 안의 흔들림」으로 나눈 값입니다. 시료가 셋이면 그 흔들림을 거의 모르는 채로 나누는 셈입니다. 단백체 통계 논문은 이렇게 적습니다 [1].
"proteins exhibiting a large fold change are often declared non-significant because of a large sample variance, while at the same time small observed fold changes might be declared statistically significant, because of a small sample variance."
크게 변한 것은 놓치고, 조금 변한 것은 우연히 흔들림이 작게 나와 「유의」로 잡힙니다. 3 대 3 실험의 결과표를 읽을 때 먼저 떠올려야 할 사실입니다.
1. 비모수 검정은 처음부터 0.05를 넘을 수 없다
「시료가 적고 분포를 모르니 비모수(Mann-Whitney)로 하자」는 말을 자주 듣습니다. 3 대 3에서는 이 길이 아예 막혀 있습니다.
여섯 개를 셋씩 나누는 방법은 C(6,3) = 20가지뿐입니다. 아무리 깔끔하게 갈려도(한 군이 1·2·3등, 다른 군이 4·5·6등) 양측 p 값은 2/20 = 0.10이 가장 작습니다.
| 군당 시료 | 나누는 방법 | 나올 수 있는 가장 작은 p (양측) |
|---|---|---|
| 3 | 20 | 0.100 |
| 4 | 70 | 0.029 |
| 5 | 252 | 0.008 |
데이터가 어떻든 p < 0.05는 나오지 않습니다. 3 대 3에서는 t 계열 검정만 쓸 수 있습니다.
2. 검정력: 큰 차이도 절반은 놓친다
3 대 3 양측 t-검정(유의수준 0.05)으로 실제로 있는 차이를 잡아낼 확률입니다. 효과크기 d는 「평균 차이가 군 안 표준편차의 몇 배인가」입니다.
| 효과크기 d | 잡아낼 확률 |
|---|---|
| 1 (표준편차만큼 차이) | 16% |
| 2 | 46% |
| 3 | 78% |
평균이 군 안 표준편차의 두 배나 차이 나도 절반 넘게 놓칩니다. 그러니 「유의하지 않았다」를 「차이가 없다」로 읽으면 안 됩니다. 반대로 80% 확률로 잡으려면 군당 시료가 d=1에서 약 17개, d=1.5에서 약 9개 필요합니다.
3. 그래서 p 값만으로 고르지 말라는 권고
MAQC 컨소시엄은 마이크로어레이 데이터로 이 문제를 크게 검토한 뒤 권고를 냈습니다 [2] (굵은 글씨는 강조를 위해 추가).
"Reports of DEG list instability in the literature are often a direct consequence of comparing DEG lists derived from a simple t-statistic when the sample size is small and variability in variance estimation is large. Therefore, the practice of using P alone for gene selection should be discouraged."
"Using FC and P together balances reproducibility, specificity, and sensitivity. Control of specificity and sensitivity can be accomplished with a P criterion, while reproducibility is enhanced with an FC criterion."
"FC-ranking should be used in combination with a non-stringent P threshold to select a DEG list that is reproducible, specific, and sensitive, and a joint rule is recommended as a baseline practice."
많이 쓰는 「p < 0.05 그리고 변화 2배 이상」 같은 기준이 이 권고에 해당합니다.
다만 반론도 있다
배수(FC) 기준을 덧붙이는 방식에는 분명한 약점이 있습니다 [3].
"The disadvantage of an ad-hoc FC criterion is that it does not take into account error variance and therefore offers no statistical confidence about future results."
이 논문(NanoString 연구, 돌연변이 생쥐 6마리 대 대조군 12마리)은 보통 t-검정(p < 0.01)에 1.5배 기준을 붙여 49개를 골랐는데, 그중 20개는 *"in reality most likely not DE"*였다고 보고합니다 [3]. 배수 기준은 거짓을 줄여 주지만, 얼마나 줄였는지는 알려 주지 않습니다.
4. 가상 실험: 정답을 아는 데이터로 직접 재 보기
실제 데이터에서는 무엇이 진짜 차이인지 모릅니다. 그래서 정답을 정해 둔 가상 데이터를 만들어 봤습니다.
- 대사체 400개 중 40개만 진짜로 변함(2.8배, log2 변화량 ±1.5)
- 군당 시료 3개, 대사체마다 군 안 표준편차가 다름(로그정규분포, log2 척도 중앙값 0.5)
- 같은 실험을 500번 반복한 평균, Student t-검정 대 limma(
eBayes기본값)
| 기준 | 검정 | 고른 수 | 그중 거짓 | 거짓 비율 | 잡은 진짜 (40개 중) |
|---|---|---|---|---|---|
| p < 0.05만 | t-검정 | 46.1 | 18.0 | 39% | 28.1 |
| limma | 51.2 | 19.0 | 37% | 32.2 | |
| p < 0.05 그리고 2배 이상 | t-검정 | 33.3 | 5.9 | 18% | 27.5 |
| limma | 42.1 | 10.8 | 26% | 31.3 | |
| 다중검정 보정(BH 5%) | t-검정 | 6.9 | 0.4 | 6% | 6.5 |
| limma | 16.1 | 0.9 | 6% | 15.1 |
이 표에서 읽을 것
- p 값만으로 고르면 고른 것의 40% 가까이가 우연입니다. 거짓 18개는 「변하지 않는 대사체 360개 × 0.05 = 18개」에서 예상되는 그대로입니다.
- 2배 기준을 붙이면 거짓이 18개에서 6개로 줄어듭니다. MAQC 권고가 말한 효과가 가상 데이터에서도 그대로 나옵니다.
- limma는 진짜를 더 잡지만(27.5→31.3) 거짓도 늘어납니다(5.9→10.8). 흔들림을 모아서 추정하다 보니, 원래 흔들림이 큰 대사체도 흔들림이 작아 보이게 되고, 그런 대사체가 2배 기준을 우연히 넘기 때문으로 보입니다. 2배 기준과 함께 쓰면 거짓 비율은 오히려 올라갑니다(18%→26%).
- 다중검정 보정을 통과하는 수는 limma가 두 배 이상입니다(6.9→16.1). 그러면서도 그 안의 거짓 비율은 6%로 같습니다. 3 대 3 t-검정에서는 보정 후 거의 남지 않는 일이 흔한데, limma를 쓰면 보정을 통과한 목록을 실제로 얻을 수 있습니다.
5. 왜 limma는 보정 후에도 살아남나
t-검정은 대사체 하나하나의 흔들림을 그 대사체의 시료 여섯 개만으로 잽니다. limma는 「대사체들의 흔들림은 대체로 비슷한 범위에 있다」는 점을 이용해, 전체 대사체에서 얻은 정보를 각 대사체의 추정에 조금씩 빌려 줍니다(분산 축소, moderated t). 흔들림을 우연히 아주 작게 잰 대사체가 과하게 유의해지는 일이 줄고, 검정에 쓰는 자유도도 늘어납니다.
단백체 논문은 3 대 3 세포주 비교(단백질 8,625개, FDR 1%)에서 이렇게 보고합니다 [4].
"t test identified a single significant DEP after correction for multiple testing (1% FDR), whereas 21 DEPs were identified using ROTS. DEqMS and Limma generated 201 and 120 DEPs respectively"
같은 논문은 또 하나의 차이를 짚습니다 [4].
"all these methods calculate pooled variances for each protein using all samples in all sample groups, whereas t test use only the samples in the two groups compared."
정답을 아는 단백체 벤치마크로 같은 경향을 직접 잰 글도 있습니다: limma vs DEqMS at small n (영문).
그런데 대사체는 변수가 적다
위 DEqMS 사례는 단백질이 8,625개였습니다. 변수가 적은 패널에서는 분산 축소가 자동으로 이득이 되지 않습니다. 유전자 558개를 잰 Vaes 등의 NanoString 연구에서는, 배수 기준에 대한 limma의 moderated 검정(TREAT)이 같은 p 기준에서 평범한 t 기반 검정보다 오히려 거짓 발견이 많았고, 전체 성능(AUC)은 차이가 없었습니다 [3]. 저자들은 그 이유로 측정값의 노이즈가 크지 않았던 점과 패널이 작은 점을 들며 이렇게 적었습니다 [3].
"some of the gene-wise variances may be shrunk (or blasted) by too large a factor when applying TREAT on our NanoString data, as the hierarchical Bayesian model is expecting a few outlier variances."
대사체는 정량되는 화합물이 수백 개인 경우가 많습니다. 그래서 「limma가 무조건 낫다」고 말할 수 없고, 자기 데이터로 직접 비교해 봐야 합니다. 저희도 바꾸기 전에 그렇게 비교했습니다.
6. 그래서 저희는 이렇게 정했습니다
바꾼 것: 군 비교 검정을 t-검정에서 limma(moderated t, 비교하는 두 군의 시료만 사용)로. 이유는 두 가지입니다.
- 다중검정 보정을 통과하는 결과가 생긴다. 3 대 3에서 보정 후 거의 남지 않는 일은 흔한데, limma로 바꾸면 보정을 통과한 목록을 함께 드릴 수 있습니다.
- 많이 쓰는 도구도 그쪽으로 가고 있다. MetaboAnalystR 개발판이 2026년 7월에 t-검정 기본값(
Ttests.Anal)을 limma로 바꿨습니다(커밋 e028f54). 최신 정식 배포판(v4.2.0)은 아직 일반 t-검정입니다.
바꾸지 않은 것: 「p < 0.05 그리고 2배 이상」 기준. MAQC 권고대로 배수 기준은 거짓을 확실히 줄여 줍니다.
하지 않기로 한 말: 「더 정확해졌다」. 위 가상 실험처럼, 2배 기준과 함께 쓸 때 limma의 거짓 비율은 t-검정보다 낮지 않습니다. 저희가 얻은 것은 「더 많이 찾는 것」과 「보정 통과 목록」이지, 「거짓이 줄어든 것」이 아닙니다.
적용 범위: 새 과제부터. 기본값이 바뀔 때마다 지난 결과를 다시 계산하면 같은 실험의 숫자가 두 벌이 됩니다.
7. 3 대 3 결과를 보고할 때 넣으면 좋은 문장
- 「군당 3개 시료로 수행한 탐색적 분석입니다. 유의 목록은 후속 검증을 위한 후보입니다.」
- 「차이가 전혀 없더라도 이 기준을 우연히 통과할 것으로 예상되는 수는 약 ○개입니다.」 (군 라벨을 섞어 다시 계산하면 구할 수 있습니다)
- 「다중검정 보정(BH) 결과를 함께 표기했습니다.」
- 「유의하지 않은 항목을 ‘변화 없음’으로 해석하지 마십시오(검정력이 낮습니다).」
마무리
3 대 3 실험에서 가장 큰 통계적 결정은 어떤 검정을 쓰느냐가 아니라 시료를 몇 개 모으느냐입니다. 검정을 바꾸면 목록의 길이는 달라지지만, 셋으로 흔들림을 잴 수 없다는 사실은 그대로입니다. 위에서 인용한 MAQC 권고도 같은 말로 이어집니다: "Sensitivity can also be improved by … increased sample sizes." [2]
그래서 저희는 검정을 바꾸면서도 이 문장을 결과와 함께 드리기로 했습니다. 「이 목록은 후보입니다. 몇 개는 우연일 수 있고, 그게 몇 개쯤인지도 함께 적어 드립니다.」
재현
three_vs_three.R을 돌리면 1·2·4절의 숫자가 약 20초 만에 그대로 나옵니다(R 4.3.3, limma 3.58.1). 가상 실험 조건: 대사체 400개(진짜 변화 40개, log2 ±1.5, 증가·감소 번갈아), 군당 3개, 대사체별 군 안 표준편차는 log2 척도 중앙값 0.5·sdlog 0.6인 로그정규분포, 500회 반복, seed 1.
참고문헌
- Kammers K, Cole RN, Tiengwe C, Ruczinski I. Detecting Significant Changes in Protein Abundance. EuPA Open Proteomics 2015;7:11–19. doi:10.1016/j.euprot.2015.02.002
- Shi L, Jones WD, Jensen RV, et al. The balance of reproducibility, sensitivity, and specificity of lists of differentially expressed genes in microarray studies. BMC Bioinformatics 2008;9(Suppl 9):S10. doi:10.1186/1471-2105-9-S9-S10
- Vaes E, Khan M, Mombaerts P. Statistical analysis of differential gene expression relative to a fold change threshold on NanoString data of mouse odorant receptor genes. BMC Bioinformatics 2014;15:39. doi:10.1186/1471-2105-15-39
- Zhu Y, Orre LM, Zhou Tran Y, Mermelekas G, Johansson HJ, Malyutina A, Anders S, Lehtiö J. DEqMS: A Method for Accurate Variance Estimation in Differential Protein Expression Analysis. Molecular & Cellular Proteomics 2020;19:1047–1057. doi:10.1074/mcp.TIR119.001646
인용한 문장은 모두 해당 논문 본문과 글자 그대로 대조했습니다. 인용문 속 굵은 글씨는 강조를 위해 추가한 것입니다.
관련 글
Three Samples per Group: What We Learned Switching from the t-Test to limma
10월 28일 · 10 min read
Proteomicslimma vs DEqMS for Proteomics — When to Use Which (Measured at n=3 on Known Ratios)
5월 27일 · 13 min read
BioinformaticsBest Bioinformatics Tools in 2026, Installed and Timed: What I Actually Ran This Month
10월 14일 · 7 min read
ProteomicsMissing Values in Proteomics: Six Imputation Methods Scored Against a Known Answer
10월 10일 · 10 min read