ANOVA·다중비교·FDR
이 토픽을 마치면
세 집단 이상을 비교할 때 전체 질문과 개별 쌍 비교를 구분할 수 있습니다. 다중비교에서 family를 정의하고, p-value 보정이 효과크기와 연구설계의 문제를 대신하지 않는다는 점을 설명할 수 있습니다.
비교 횟수가 늘어나면 질문도 늘어난다
A, B, C 세 조건을 비교할 때 “모든 조건의 평균이 같은가?”라는 전체 질문과 “A와 B가 다른가?”라는 쌍별 질문은 다릅니다. 쌍별 비교를 여러 번 수행하면 우연히 극단적인 결과를 얻을 기회가 누적될 수 있습니다.
ANOVA는 여러 평균을 한 번에 비교하는 모형적 질문의 한 형태입니다. 전체 검정이 유의하다는 결과는 적어도 하나의 차이가 있을 가능성을 말하지만, 어느 쌍이 어떻게 다른지 모두 알려주지는 않습니다. 후속 비교와 multiplicity 관리가 별도로 필요합니다.
Family를 먼저 정의하기
다중성 조정의 시작은 보정 함수가 아니라 family입니다. 이번 연구에서 함께 해석할 가설의 묶음이 무엇인지, outcome·시간·조건·유전자 집합을 어떻게 묶을지 사전에 기록합니다. family의 범위를 넓히거나 좁히는 선택은 결과의 해석 범위를 바꿉니다.
FDR은 여러 검정에서 기대되는 false discovery의 비율을 관리하려는 기준입니다. family-wise error와 같은 목표가 아니며, 어떤 기준을 선택할지는 연구 목적과 오류 비용에 달려 있습니다.
Python 보정 API의 역할
statsmodels의 multiple testing API는 p-value 배열과 보정 방법을 받아 보정 결과를 반환합니다. API는 가설의 family를 만들지 않고, 어떤 비교가 의미 있는지 판단하지 않습니다.
from statsmodels.stats.multitest import multipletests
raw_p = [0.001, 0.012, 0.031, 0.20]reject, adjusted_p, _, _ = multipletests( raw_p, method="fdr_bh", alpha=0.05)이 예시의 배열은 교육용 숫자이며 실제 연구 결과가 아닙니다. raw_p의 각 위치가 어떤 사전 정의된 가설을 뜻하는지 별도 manifest에 연결해야 합니다. 보정된 p-value가 작다고 해서 효과크기가 큰 것은 아닙니다.
탐색과 확인을 분리하기
많은 조건과 outcome을 살펴보는 탐색 단계에서는 여러 비교가 자연스럽게 생깁니다. 이때 발견된 패턴을 후속 확인 질문으로 기록하고, 처음부터 정한 primary family와 같은 수준의 확인적 증거로 포장하지 않습니다. 보정은 탐색을 금지하는 절차가 아니라, 발견의 범위와 오류 위험을 투명하게 표현하는 절차입니다.
각 가설에는 비교 대상, outcome, 분석 단위, 방향, family ID를 붙입니다. 같은 raw p-value 배열이라도 family가 다르면 보정 결과와 해석 범위가 달라질 수 있습니다. 따라서 결과만 복사하지 않고 가설 manifest와 보정 방법·alpha를 함께 보존합니다.
결과를 표로 읽기
| hypothesis_id | estimate | raw_p | adjusted_p | family_id | interpretation |
|---|---|---|---|---|---|
| H01 | ... | ... | ... | F01 | effect와 uncertainty 확인 |
표의 reject는 해당 보정 기준에서의 판정일 뿐, 효과의 생물학적 중요성을 뜻하지 않습니다. 효과크기와 구간이 없다면 후속 판단에 필요한 정보가 부족한 상태입니다.
연구 질문으로 돌아가 해석하기
다중성 조정은 여러 가설을 함께 볼 때 오류 기준을 관리하는 도구입니다. 작은 보정 p-value가 생물학적 중요성이나 인과를 확정하지 않습니다. 각 결과의 효과크기, 불확실성, 측정 단위와 family 정의를 함께 보고합니다.
전체 검정과 후속 비교의 관계
전체 검정에서 차이 신호가 보였다고 해도, 후속 쌍별 비교의 수와 family를 따로 정해야 합니다. 후속 비교의 결과가 전체 검정의 결과와 같은 질문에 답한다고 가정하지 않습니다. 전체 검정은 전반적인 차이의 존재를 묻고, 쌍별 비교는 어떤 조건 사이에서 어느 방향의 차이를 탐색하는지 묻습니다.
모든 outcome과 시간점에 같은 보정 기준을 적용할지, primary outcome과 secondary outcome을 구분할지는 계획 단계에서 정합니다. 결과를 본 뒤 family를 바꾸면 보정된 숫자가 있어도 전체 오류 관리의 의미를 설명하기 어렵습니다.
보고서에는 원래 p-value와 보정 방법, family ID를 함께 남깁니다. 보정된 결과만 제공하면 독자가 어떤 가설 묶음에서 계산됐는지 확인할 수 없습니다. 보정은 분석의 투명성을 높이는 기록과 함께 사용해야 합니다.
자주 생기는 실패와 점검법
- 여러 쌍 비교를 단일 검정처럼 보고하지 않습니다.
- family를 결과를 본 뒤 유리하게 바꾸지 않습니다.
- FDR과 family-wise error를 같은 기준으로 쓰지 않습니다.
- 보정 p-value만 보고 효과크기를 생략하지 않습니다.
- 전체 ANOVA 결과가 특정 쌍의 방향과 크기를 자동으로 알려준다고 쓰지 않습니다.
핵심 정리
- 전체 비교 질문과 쌍별 비교 질문은 다릅니다.
- 다중성 관리에는 먼저 family를 정의해야 합니다.
- FDR은 오류 관리 기준이며 효과의 크기나 중요성을 말하지 않습니다.
- API는 보정 계산을 수행하지만 가설의 의미를 결정하지 않습니다.
다음 토픽으로
다음 편에서는 효과·변동·탈락을 고려해 전향적으로 검정력과 표본수를 계획합니다.
참고 자료
- statsmodels multiple testing API: https://www.statsmodels.org/stable/generated/statsmodels.stats.multitest.multipletests.html
- ASA p-value statement: https://www.amstat.org/asa/files/pdfs/p-valuestatement.pdf
- SciPy statistics reference: https://docs.scipy.org/doc/scipy/reference/stats.html
본 편의 가설 목록과 수치는 BioStatPy가 독립적으로 작성한 교육용 구성입니다.