실습 · 연습문제 1개
Holm 보정 구현하기 holm-correction
조건 개에 대한 주장을 동시에 할 때, Holm 절차는 가족별 오류율(적어도 하나가 거짓 양성일 확률)을 이하로 유지하면서 Bonferroni보다 많은 가설을 기각한다.
- p-value를 작은 순서로 정렬한다:
- 순서로 인지 확인한다. 만족하면 기각하고 다음으로 넘어간다.
- 처음 만족하지 못하는 순간 멈춘다. 그 뒤의 가설은 조건을 만족해도 기각하지 않는다(step-down 절차).
같은 결론을 보정된 p-value로도 표현할 수 있다. 정렬된 순서에서
이고, 인 가설을 기각한다. 앞 순위의 최댓값을 이어받는 부분()이 3단계의 "멈춤"을 표현한다.
holm(pvals, alpha=0.05)를 완성한다. 반환값은 (reject, p_adj)이고, 둘 다 입력과 같은 순서의 배열이다.
| 반환 | shape | 의미 |
|---|---|---|
reject |
(k,) bool |
기각하면 True |
p_adj |
(k,) float |
Holm 보정 p-value, 1을 넘지 않는다 |
예: holm([0.004, 0.014, 0.020, 0.200])의 p_adj는 [0.016, 0.042, 0.042, 0.2]이고 앞의 세 개를 기각한다.
힌트: np.argsort로 정렬 순서를 얻고, np.maximum.accumulate로 누적 최댓값을 구한 뒤, 정렬 순서를 되돌려 원래 위치에 넣는다.