같은 문제가 벌써 세 번 나왔습니다. 178강 문제 4, 180강 문제 1, 181강 심화 5입니다.
효과가 하나도 없어도 스무 번 검정하면 의 확률로 무언가가 유의하게 나옵니다. 180강에서 본페로니와 홀름으로 막았는데, 그것으로 부족한 자리가 있습니다.
| 자리 | 검정 수의 규모 |
|---|---|
| 유전체 연관 분석 | 만 개 위치 |
| A/B 대시보드 | 지표 × 세그먼트 |
| 이미지 특징 선별 | 수천 개 특징 |
만 개를 본페로니로 보정하면 기준이 입니다. 진짜 효과도 그 문턱을 못 넘습니다.
그래서 이 강의는 보정 방법을 하나 더 배우는 강의가 아닙니다. 무엇을 지킬 것인지를 바꾸는 강의이며, 그 결정이 방법을 정합니다.
문제. 오류의 정의를 정합니다.
(1) 세 가지 목표를 구분하세요.
(2) 검정 수에 따른 오류율과 본페로니 기준을 계산하세요.
생각의 실마리. "틀렸다"에 여러 뜻이 있습니다. 하나라도 틀리면 안 되는 상황과 틀린 것이 좀 섞여도 되는 상황이 다릅니다.
풀이. (1) 셋을 구분합니다.
| 무엇을 지키는가 | 이름 | 뜻 |
|---|---|---|
| 하나라도 틀릴 확률 | FWER | 잘못된 기각이 하나라도 나올 확률 |
| 틀린 것의 몫 | FDR | 기각한 것 중 잘못된 것의 비율 |
| 하나하나의 오류 | PCER | 검정마다 따로 를 지킴 |
셋째 줄이 보정을 안 하는 것입니다. 검정마다는 맞는데 전체가 무너집니다.
가 잘못된 기각의 수이고 이 전체 기각의 수입니다. FWER는 확률이고 FDR는 비율의 기댓값이라 종류가 다른 양입니다.
(2) 검정 수를 늘려 봅니다.
| 검정 수 | 보정 없을 때 | 본페로니 기준 |
|---|---|---|
스무 번이면 이미 이고 백 번이면 입니다.
기준을 검정 수로 나누면 지켜집니다. 대신 그 기준이 번 검정에서 까지 내려가며, 아무것도 못 찾게 됩니다.
이 문제에서 배우는 것. "보정을 해야 하는가"는 잘못된 질문이고 "무엇을 지킬 것인가"가 맞는 질문입니다. 신약 승인처럼 하나라도 틀리면 안 되는 자리에서는 FWER를 지켜야 하고, 유전체에서 후보 유전자를 추리는 것처럼 다음 단계에서 검증할 목록을 뽑는 자리에서는 FDR가 맞습니다. 후자에서 FWER를 고집하면 후보가 하나도 안 남고, 전자에서 FDR로 만족하면 승인된 약의 퍼센트가 가짜입니다. 같은 자료에 같은 방법을 쓰는 것이 아니라 같은 목적에 같은 방법을 씁니다.
바로 확인 1.
확인 1-1. FWER와 FDR를 각각 한 문장으로 쓰세요.
답. 잘못된 기각이 하나라도 날 확률과 기각한 것 중 잘못된 것의 비율입니다.
확인 1-2. 검산에서 검정이 스무 번일 때 보정 없는 오류율을 쓰세요.
답. 입니다.
확인 1-3. 검산에서 검정이 만 번일 때 본페로니 기준을 쓰세요.
답. 입니다.
문제. 보정을 계산합니다.
(1) 값 여덟 개에 세 보정을 적용하세요.
(2) 각각이 몇 개를 기각하는지 세세요.
생각의 실마리. 180강에서 본페로니와 홀름을 봤습니다. BH는 곱하는 값이 다릅니다. 순위로 나눈 값을 곱합니다.
풀이. (1) 값 여덟 개를 작은 것부터 늘어놓습니다.
| 순위 | 값 | 본페로니 | 홀름 | BH | BH 기준선 |
|---|---|---|---|---|---|
본페로니는 전부 을 곱합니다. 이 가 되어 기각을 놓칩니다.
홀름은 순으로 곱합니다. 이 이 되며 조금 낫지만 여전히 못 넘습니다.
BH는 순위로 나눈 값을 곱합니다. 라 기각됩니다.
마지막 열이 BH를 보는 다른 방법입니다. 각 를 이라는 기울어진 기준선과 견주며, 기준선 아래에 있는 가장 큰 순위까지 전부 기각합니다.
(2) 에서 몇 개를 기각하는지 셉니다.
| 무엇으로 | 에서 기각한 수 |
|---|---|
| 보정 없음 | |
| 본페로니 | |
| 홀름 | |
| BH |
BH가 가장 많이 기각합니다. 대신 지키는 것이 다릅니다.
이 문제에서 배우는 것. 홀름과 BH는 계산이 비슷해 보이는데 지키는 것이 완전히 다릅니다. 홀름은 곱하는 값이 에서 시작해 줄어들고 BH는 로 줄어드는데, 이 사소해 보이는 차이가 FWER를 지키느냐 FDR를 지키느냐를 가릅니다. 그래서 논문이나 보고서에 "다중비교 보정을 했습니다"라고만 적으면 정보가 없고, 어떤 보정으로 무엇을 지켰는지 적어야 합니다. 홀름 보정된 와 BH 보정된 는 이름은 같아도 뜻이 다른 숫자입니다.
바로 확인 2.
확인 2-1. 세 보정이 곱하는 값을 각각 쓰세요.
답. , , 입니다.
확인 2-2. 검산에서 의 세 보정값을 쓰세요.
답. , , 입니다.
확인 2-3. 검산에서 네 방법이 기각한 수를 쓰세요.
답. , , , 입니다.
문제. 모의로 확인합니다.
(1) 참인 효과가 하나도 없을 때를 재세요.
(2) 참이 섞여 있을 때를 재세요.
생각의 실마리. FDR가 FWER보다 느슨하다면 언제 얼마나 느슨한지가 궁금합니다. 참인 효과의 수를 바꿔 가며 잽니다.
풀이. (1) 개 검정이 모두 귀무가설이며 만 번 되풀이했습니다.
| 무엇으로 | 하나라도 기각할 비율 | 목표 |
|---|---|---|
| 보정 없음 | ||
| 본페로니 | ||
| 홀름 | ||
| BH |
BH도 으로 지킵니다.
참이 하나도 없으면 두 목표가 같아지기 때문입니다. 기각한 것이 있으면 그것은 전부 잘못된 기각이므로, 이고 FDR가 곧 입니다.
(2) 참이 섞이면 달라집니다. 개 중 참인 효과의 수를 바꿉니다.
| 참인 효과의 수 | 무엇으로 | 잘못된 기각의 평균 | 찾아낸 참의 평균 | FDR |
|---|---|---|---|---|
| 본페로니 | ||||
| 홀름 | ||||
| BH | ||||
| 본페로니 | ||||
| 홀름 | ||||
| BH | ||||
| 본페로니 | ||||
| 홀름 | ||||
| BH | ||||
| 본페로니 | ||||
| 홀름 | ||||
| BH |
참이 개일 때 본페로니는 개를 찾고 BH는 개를 찾습니다.
BH가 잘못된 기각을 더 합니다. 대 이며, 평균 개가 가짜입니다.
그런데 BH의 FDR가 으로 목표 아래입니다. 가짜 개가 전체 기각 개 중의 몫이므로 비율로는 작습니다.
FWER 방법의 FDR가 참이 늘수록 내려갑니다. 에서 까지 가는데, 필요 이상으로 조심스럽다는 뜻입니다.
이 문제에서 배우는 것. 참인 효과가 많을수록 FWER 방법이 아까워집니다. 참이 개일 때 본페로니의 FDR가 인데, 이것은 허용된 의 퍼센트만 쓰고 있다는 뜻입니다. 그 대가로 개 중 개만 찾았습니다. 유전체나 특징 선별처럼 참이 많을 것으로 기대되는 자리에서 이 손실이 특히 크며, 그래서 그 분야가 BH를 표준으로 씁니다. 반대로 참이 이나 개뿐인 자리에서는 세 방법의 차이가 작으므로, 손해를 감수하고 FWER를 지키는 것이 합리적입니다.
바로 확인 3.
확인 3-1. 참이 하나도 없을 때 두 목표가 같아지는 이유를 쓰세요.
답. 기각한 것이 전부 잘못된 기각이라 비율이 이기 때문입니다.
확인 3-2. 검산에서 참이 개일 때 본페로니와 BH가 찾은 수를 쓰세요.
답. 과 입니다.
확인 3-3. 검산에서 참이 개일 때 본페로니의 FDR를 쓰세요.
답. 이며 허용치의 극히 일부만 씁니다.
문제. 독립 가정을 검사합니다.
(1) 상관을 넣어 가며 오류율을 재세요.
(2) 순열로 기준을 만들어 견주세요.
생각의 실마리. 지금까지 검정들이 서로 독립이었습니다. 실무에서는 같은 사람의 여러 지표, 이웃한 유전자 위치처럼 얽혀 있는 것이 보통입니다.
풀이. (1) 개 검정이 같은 요인을 공유하게 만듭니다.
| 검정 간 상관 | 보정 없음 | 본페로니 | BH |
|---|---|---|---|
상관이 커지면 보정 없이도 오류율이 에서 로 내려갑니다.
검정들이 같이 움직여 실질적인 검정 수가 줄어들기 때문입니다. 상관이 이면 개가 사실상 하나이고, 오류율도 가 됩니다.
본페로니는 어느 상관에서도 목표를 지킵니다. 대신 까지 내려가 점점 더 보수적이 됩니다. 상관이 큰데 검정 수로 나누면 없는 검정까지 세고 있는 셈입니다.
(2) 순열로 기준을 만듭니다. 179강 문제 4의 순열 검정을 여러 검정으로 늘립니다.
| 어떻게 하는가 | 무엇을 얻는가 |
|---|---|
| 라벨을 섞어 전체를 다시 검정 | 가장 작은 의 분포 |
| 그 분포의 퍼센트 지점 | 상관을 반영한 기준 |
| 실제 를 그 기준과 견줌 | 정확한 FWER 보정 |
가장 작은 의 분포를 직접 만드는 것이 전부입니다. 라벨을 섞으면 검정들 사이의 상관은 그대로 남고 효과만 사라지므로, 상관이 자료에서 자동으로 반영됩니다.
개 검정에서 가장 작은 의 퍼센트 지점을 찾습니다.
| 검정 간 상관 | 순열 기준 | 본페로니 기준 |
|---|---|---|
상관이 이면 둘이 거의 같고 상관이 면 순열 기준이 배 느슨합니다.
같은 오류율을 지키면서 더 많이 찾을 수 있다는 뜻입니다.
이 문제에서 배우는 것. 본페로니가 "안전하다"는 말은 오류율 쪽에서만 맞습니다. 검정이 얽혀 있을수록 실제 오류율이 목표에서 멀어지고, 그만큼 찾을 수 있었던 것을 못 찾습니다. 그리고 이 손실은 보이지 않습니다. 잘못된 기각은 나중에 재현이 안 되어 드러나는데, 못 찾은 것은 아무 흔적도 남기지 않습니다. 순열 기준이 계산은 무거워도 이 문제를 정확히 푸는 유일한 방법이며, 유전체 분석이 순열 기반 기준을 표준으로 쓰는 이유입니다.
바로 확인 4.
확인 4-1. 검정 간 상관이 커지면 보정 없는 오류율이 어떻게 되는지 검산 값과 함께 쓰세요.
답. 내려갑니다. 에서 이 됩니다.
확인 4-2. 검산에서 상관이 일 때 본페로니의 실제 오류율을 쓰세요.
답. 으로 목표보다 훨씬 낮습니다.
확인 4-3. 검산에서 상관이 일 때 순열 기준과 본페로니 기준을 쓰세요.
답. 과 입니다.
문제. 보정의 전제를 검사합니다.
(1) 비교의 수를 셀 수 있는 경우를 가르세요.
(2) 눈으로 고를 때 어떻게 되는지 재세요.
(3) 설계로 막는 방법을 세우세요.
생각의 실마리. 문제 2의 모든 계산이 을 안다는 전제 위에 있습니다. 그 전제가 깨지면 계산 전체가 뜻을 잃습니다.
풀이. (1) 비교의 수를 셀 수 있는지 봅니다.
| 어떻게 정했는가 | 보정이 뜻을 갖는가 |
|---|---|
| 미리 검정 목록을 적음 | 갖습니다 |
| 자료를 보고 눈에 띄는 것만 | 안 갖습니다 |
| 여러 세그먼트를 다 훑음 | 센 수만큼만 |
| 멈출 때까지 계속 봄 | 셀 수가 없습니다 |
둘째 줄과 넷째 줄이 실무에서 가장 흔한 실패입니다.
(2) 눈으로 고르면 어떻게 되는지 잽니다. 효과가 하나도 없는 개 지표에서 가장 좋은 것만 골라 보고합니다.
| 무엇으로 | 아래일 비율 |
|---|---|
| 아무 지표 하나를 미리 정함 | |
| 가장 좋은 것을 골라 보고 | |
| 고른 뒤 본페로니 보정 |
골라서 보고하면 입니다. 문제 1의 와 같은 값이며, 고르는 행위 자체가 번의 검정입니다.
고르고 나서 보정하면 지켜집니다. 문제는 고른 사실을 안 적을 때입니다. 보고서에 지표가 하나만 실리면 독자는 번 봤다는 것을 알 수 없습니다.
(3) 설계로 막습니다.
| 설계 | 무엇을 얻는가 |
|---|---|
| 주 지표 하나를 미리 정함 | 보정이 필요 없습니다 |
| 부 지표는 탐색으로 표시 | 확인이 아니라 가설 생성 |
| 계층으로 나눠 순서대로 | 앞이 통과해야 뒤를 봄 |
| 미리 등록해 공개 | 나중에 못 바꿉니다 |
셋째 줄의 계층 검정을 확인합니다. 세 지표를 순서대로 보되 앞이 막히면 뒤를 안 봅니다.
| 어디까지 | 기각할 비율 | 목표 |
|---|---|---|
| 첫째만 | ||
| 둘째까지 | ||
| 셋째까지 |
어디서 멈추든 잘못된 기각이 하나라도 날 확률이 를 안 넘습니다.
순서를 미리 정하는 것만으로 보정 없이 전체 오류율이 지켜집니다. 첫째가 막히면 뒤를 안 보므로 둘째와 셋째가 오류에 기여할 기회 자체가 없습니다.
대신 첫째가 막히면 둘째가 아무리 강해도 못 씁니다. 그것이 대가이며, 순서를 잘 정하는 것이 설계의 일이 됩니다.
마지막으로 고를 때의 기준을 정리합니다.
| 상황 | 무엇을 쓰는가 |
|---|---|
| 확인 목적이고 검정이 적음 | 홀름 |
| 탐색 목적이고 검정이 많음 | BH |
| 검정끼리 상관이 큼 | 순열 기준 |
| 주 지표가 정해짐 | 보정 없이 그 하나 |
| 순서가 자연스러움 | 계층 검정 |
178강 문제 2의 결론이 여기서도 같습니다. 자료를 보고 고르면 안 됩니다.
이 문제에서 배우는 것. 보정은 정직하게 센 비교의 수에만 작동하는 도구입니다. 그래서 다중비교 문제의 진짜 해법이 통계가 아니라 기록입니다. 무엇을 볼지 미리 적고, 몇 개를 봤는지 세고, 고른 사실을 밝히는 것이 보정보다 앞섭니다. 그리고 이것이 177강 문제 5의 되먹임과 이어집니다. 대시보드를 매일 들여다보는 조직에서는 아무도 검정을 하지 않는데 검정이 매일 수천 번 일어나며, 그 수를 셀 방법이 없습니다. 그럴 때 할 수 있는 일은 보정이 아니라 눈에 띈 것을 새 실험으로 확인하는 절차를 두는 것입니다.
바로 확인 5.
확인 5-1. 검산에서 가장 좋은 지표를 골라 보고할 때의 비율을 쓰세요.
답. 이며 번 검정한 것과 같습니다.
확인 5-2. 계층 검정이 보정 없이 오류율을 지키는 이유를 쓰세요.
답. 앞이 막히면 뒤를 안 보므로 뒤가 오류에 기여할 기회가 없습니다.
확인 5-3. 계층 검정의 대가를 쓰세요.
답. 첫째가 막히면 둘째가 아무리 강해도 못 씁니다.
| 무엇을 지키는가 | 방법 | 언제 |
|---|---|---|
| FWER | 본페로니 | 계산이 간단해야 할 때 |
| FWER | 홀름 | 언제나 본페로니보다 낫습니다 |
| FWER | 순열 기준 | 검정끼리 상관이 클 때 |
| FDR | BH | 탐색이고 검정이 많을 때 |
| 없음 | 주 지표 하나 | 확인 실험 |
| 곱하는 값 | 지키는 것 |
|---|---|
| FWER | |
| FWER | |
| FDR |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 보정을 할지 말지를 고민합니다 | 무엇을 지킬지를 먼저 정합니다 |
| 홀름과 BH를 같은 것으로 봅니다 | 지키는 대상이 다릅니다 |
| 검정이 많으니 무조건 본페로니 | 탐색이면 아무것도 안 남습니다 |
| 상관이 큰데 검정 수로 나눕니다 | 없는 검정까지 셉니다 |
| 고른 뒤 그 사실을 안 적습니다 | 독자가 을 셀 수 없습니다 |
| 보정으로 대시보드를 막으려 합니다 | 셀 수 없는 비교는 못 막습니다 |
문제 6. FWER와 FDR를 각각 한 문장으로 쓰세요.
답. 잘못된 기각이 하나라도 날 확률과 기각한 것 중 잘못된 것의 비율입니다.
문제 7. 검산에서 검정이 스무 번일 때 보정 없는 오류율을 쓰세요.
답. 입니다.
문제 8. 검산에서 검정이 만 번일 때 본페로니 기준을 쓰세요.
답. 입니다.
문제 9. 세 보정이 곱하는 값을 각각 쓰세요.
답. , , 입니다.
문제 10. 검산에서 의 세 보정값을 쓰세요.
답. , , 입니다.
문제 11. 검산에서 네 방법이 기각한 수를 쓰세요.
답. , , , 입니다.
문제 12. 참이 하나도 없을 때 두 목표가 같아지는 이유를 쓰세요.
답. 기각한 것이 전부 잘못된 기각이라 비율이 이기 때문입니다.
문제 13. 검산에서 참이 개일 때 본페로니와 BH가 찾은 수를 쓰세요.
답. 과 입니다.
문제 14. 검산에서 참이 개일 때 본페로니와 BH의 FDR를 쓰세요.
답. 과 입니다.
문제 15. 검산에서 상관이 일 때 본페로니의 실제 오류율을 쓰세요.
답. 으로 목표보다 훨씬 낮습니다.
문제 16. 검산에서 상관이 일 때 순열 기준과 본페로니 기준을 쓰세요.
답. 과 입니다.
문제 17. 검산에서 가장 좋은 지표를 골라 보고할 때의 비율을 쓰세요.
답. 입니다.
문제 18. 계층 검정이 보정 없이 오류율을 지키는 이유를 쓰세요.
답. 앞이 막히면 뒤를 안 보므로 뒤가 오류에 기여할 기회가 없습니다.
심화 1. BH가 왜 FDR를 지키는지 정리하세요.
BH의 기준선이 기울어진 직선인 것에 이유가 있습니다.
**번째까지 기각한다면 기각 수가 **입니다. 그중 잘못된 것의 기댓값이 귀무가설의 수 곱하기 문턱이므로, 문턱을 으로 두면 비율이 아래로 눌립니다.
| 조건 | 무엇이 보장되는가 |
|---|---|
| 독립 | FDR |
| 양의 의존 | FDR |
| 임의의 의존 | 로 낮춰야 함 |
셋째 줄이 BY 보정입니다. 이면 라 기준이 다섯 배 엄격해집니다.
실무에서는 대개 둘째 줄로 봅니다. 같은 방향으로 얽힌 검정은 양의 의존을 만족하며, 문제 4의 공통 요인 구조가 그 예입니다.
심화 2. 값과 국소 FDR를 정리하세요.
BH 보정된 값을 값이라 부릅니다.
**"이것을 기각하면 그때까지의 기각 중 몇 퍼센트가 가짜인가"**를 뜻합니다. 값과 뜻이 완전히 다른데 표기가 비슷해 자주 혼동됩니다.
| 무엇 | 무엇에 대한 진술인가 |
|---|---|
| 값 | 이 검정 하나 |
| 값 | 이것까지 기각한 목록 전체 |
| 국소 FDR | 이 검정 하나가 가짜일 확률 |
셋째 줄이 실무에서 가장 원하는 값인데 계산이 어렵습니다. 전체 값 분포에서 귀무가설의 비율을 추정해야 하며, 그 추정이 흔들리면 값 전체가 흔들립니다.
심화 3. 귀무가설의 비율을 추정하는 법을 정리하세요.
BH는 모두 귀무가설이라고 보고 을 곱합니다. 실제로는 일부만 귀무이므로 더 느슨해도 됩니다.
큰 값은 거의 다 귀무가설에서 옵니다. 로 두고 그보다 큰 의 수를 세면 을 추정할 수 있습니다.
| 의 추정 | BH의 개선 |
|---|---|
| 원래 BH | |
| 기준이 두 배 느슨 | |
| 기준이 열 배 느슨 |
참이 많을수록 이득이 큽니다. 문제 3에서 참이 개일 때 BH의 FDR가 이었는데, 허용치의 절반만 쓰고 있다는 뜻이고 을 반영하면 그 여유를 쓸 수 있습니다.
대신 추정이 틀리면 보장이 깨집니다. 그래서 확인 목적에는 안 쓰고 탐색에만 씁니다.
심화 4. 여러 결과를 하나로 합치는 법을 정리하세요.
지표가 여럿일 때 보정 대신 하나로 합치는 길도 있습니다.
| 방법 | 어떻게 |
|---|---|
| 복합 지표 | 여러 지표를 하나의 점수로 |
| 전역 검정 | 모든 지표를 한 번에 |
| 계층 구조 | 묶음 단위로 먼저 |
첫째 줄이 임상시험의 복합 종말점입니다. 사망, 재입원, 재발 중 하나라도 일어나면 사건으로 세며, 검정이 하나가 됩니다.
대신 해석이 어려워집니다. 복합 지표가 개선되었을 때 어느 성분이 개선된 것인지 모르며, 가벼운 성분이 무거운 성분을 가릴 수 있습니다.
셋째 줄이 유전체에서 표준입니다. 개별 위치 대신 유전자 단위나 경로 단위로 먼저 검정하면 이 만에서 수천으로 줄어듭니다.
심화 5. 재현으로 확인하는 법을 정리하세요.
문제 5에서 셀 수 없는 비교는 못 막는다고 했습니다. 다른 자료로 확인하면 셀 필요가 없습니다.
| 단계 | 무엇을 하는가 |
|---|---|
| 탐색 자료 | 느슨한 기준으로 후보를 뽑습니다 |
| 확인 자료 | 후보만 미리 정해 검정합니다 |
| 보정 | 확인 단계의 후보 수로만 합니다 |
둘째 줄의 은 후보의 수뿐입니다. 탐색에서 몇 번 봤든 상관없으며, 확인 자료를 안 봤다는 것이 전제입니다.
162강 문제 2의 누출과 정확히 같은 구조입니다. 확인 자료를 미리 들여다보면 그것이 탐색 자료가 되어 버리며, 분할을 먼저 하고 절대 안 보는 것이 유일한 보장입니다.
이것이 다중비교 문제의 가장 정직한 해법입니다. 통계적 보정이 아니라 새 자료로 확인하는 것이며, 재현 위기가 화두가 된 이후 표준이 되어 가고 있습니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 표본 설계 | 보정을 반영한 크기 계산 | 183강 |
| 변수 선택 | 여러 변수의 계수 검정 | 189강 |
| 특징 선별 | 수천 개 특징의 유의성 | S9 |
| 모형 비교 | 여러 모형의 성능 검정 | S9 |
첫째 줄이 183강의 주제와 직접 이어집니다. 보정하면 기준이 엄격해지므로 같은 검출력을 내려면 표본이 더 필요하며, 그 계산을 설계 단계에서 해야 합니다.
둘째 줄이 189강에서 되풀이됩니다. 설명변수가 개인 회귀에서 계수마다 값을 보는 것이 번의 검정이며, 변수 선택 절차 전체가 다중비교의 한 형태입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 검정 수 | 몇 번 물었는지입니다 | |
| 잘못된 기각의 수 | 귀무가설인데 기각한 수입니다 | |
| 전체 기각의 수 | 기각한 전부입니다 | |
| FWER | 전체 오류율 | 잘못된 기각이 하나라도 날 확률입니다 |
| FDR | 거짓 발견율 | 기각한 것 중 잘못된 것의 비율입니다 |
| 본페로니 | Bonferroni | 검정 수를 곱합니다 |
| 홀름 | Holm | 순서대로 줄여 가며 곱합니다 |
| BH | Benjamini-Hochberg | 순위로 나눈 값을 곱합니다 |
| BY | Benjamini-Yekutieli | 임의의 의존에서도 지킵니다 |
| 값 | q-value | BH로 보정한 값입니다 |
| \pi_ | 파이 제로 | 귀무가설인 검정의 비율입니다 |
| 순열 기준 | permutation threshold | 가장 작은 의 분포로 정한 기준입니다 |
| 계층 검정 | hierarchical testing | 앞이 통과해야 뒤를 봅니다 |
| 미리 등록 | preregistration | 볼 것을 미리 적어 둡니다 |
다음은 183강 검정력과 표본 크기 산정입니다. 여기까지가 자료를 받은 뒤의 이야기였습니다.
178강 문제 5에서 유의하지 않은 결과가 효과가 작다는 뜻일 수도 못 쟀다는 뜻일 수도 있다고 했습니다. 둘을 가르려면 얼마나 잴 힘이 있었는지를 알아야 하고, 그것은 자료를 보기 전에 계산됩니다. 183강은 그 계산을 세우고, 이 단원의 모든 보정과 설계 결정이 표본 크기로 어떻게 번역되는지를 다루며 01단원을 맺습니다.
import numpy as np
rng = np.random.default_rng(20260919)
def pw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return str(s) + " " * max(k, 0)
def rw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return " " * max(k, 0) + str(s)
def erf(x):
a = abs(float(x))
if a > 6.0:
return 1.0 if x > 0 else -1.0
t, ssum, kk = 1.0, 1.0, 0
while True:
kk += 1
t *= 2.0 * a * a / (2.0 * kk + 1.0)
ssum += t
if t < 1e-18 * ssum:
break
v = 2.0 * a / np.sqrt(np.pi) * np.exp(-a * a) * ssum
return v if x > 0 else -v
def p2(z):
return 1.0 - erf(abs(float(z)) / np.sqrt(2.0))
def p2v(z):
return np.array([p2(x) for x in np.asarray(z).ravel()]).reshape(np.shape(z))
def holm(P):
m = P.shape[1]
o = np.argsort(P, axis=1)
Ps = np.take_along_axis(P, o, axis=1)
adj = np.maximum.accumulate(
np.minimum(1.0, Ps * (m - np.arange(m))), axis=1)
out = np.empty_like(P)
np.put_along_axis(out, o, adj, axis=1)
return out
def bh(P):
m = P.shape[1]
o = np.argsort(P, axis=1)
Ps = np.take_along_axis(P, o, axis=1)
raw = Ps * m / (np.arange(m) + 1.0)
adj = np.minimum.accumulate(np.minimum(1.0, raw[:, ::-1]), axis=1)[:, ::-1]
out = np.empty_like(P)
np.put_along_axis(out, o, adj, axis=1)
return out
# --- 문제 1: 무엇을 지키려는가 -----------------------------------------
print(" 180강과 181강에서 같은 문제가 두 번 나왔습니다")
print(" 여러 번 물으면 없는 것도 찾습니다. 무엇을 지킬지부터 정합니다")
print(" %s %s %s" % (pw("무엇을 지키는가", 22), rw("이름", 12), rw("뜻", 34)))
for a, b, c in [("하나라도 틀릴 확률", "FWER", "잘못된 기각이 하나라도 나올 확률"),
("틀린 것의 몫", "FDR", "기각한 것 중 잘못된 것의 비율"),
("하나하나의 오류", "PCER", "검정마다 따로 0.05 를 지킴")]:
print(" %s %s %s" % (pw(a, 22), rw(b, 12), rw(c, 34)))
print(" 셋째 줄이 보정을 안 하는 것입니다. 검정마다는 맞는데 전체가 무너집니다")
print(" 검정 수가 늘면 하나라도 틀릴 확률이 이렇게 오릅니다")
print(" %s %s %s" % (pw("검정 수", 12), rw("보정 없을 때", 16), rw("본페로니 기준", 16)))
for m in [1, 5, 20, 100, 1000, 20000]:
print(" %s %16.6f %16.10f"
% (pw("%d" % m, 12), 1.0 - 0.95 ** m, 0.05 / m))
print(" 스무 번이면 이미 0.64 이고 백 번이면 거의 확실합니다")
print(" 기준을 검정 수로 나누면 지켜지는데 그 기준이 아주 작아집니다")
print(" 유전체나 A/B 대시보드는 검정 수가 만 단위입니다")
print(" %s %s" % (pw("자리", 26), rw("검정 수의 규모", 20)))
for a, b in [("유전체 연관 분석", "50 만 개 위치"),
("A/B 대시보드", "지표 x 세그먼트"),
("이미지 특징 선별", "수천 개 특징"),
("설문 문항 간 상관", "문항 수의 제곱")]:
print(" %s %s" % (pw(a, 26), rw(b, 20)))
print(" 이런 자리에서 본페로니는 아무것도 못 찾게 만듭니다")
print(" 그래서 지킬 대상을 바꾸는 것이 182강의 핵심입니다")
# --- 문제 2: 전체 오류율을 지키는 보정 ----------------------------------
print(" 전체 오류율을 지키는 두 방법을 견줍니다")
P0 = np.array([0.001, 0.008, 0.020, 0.030, 0.045, 0.200, 0.400, 0.900])
m = len(P0)
print(" p 값 여덟 개를 작은 것부터 늘어놓습니다")
hp = holm(P0[None, :])[0]
bhp = bh(P0[None, :])[0]
print(" %s %s %s %s %s %s"
% (pw("순위", 8), rw("p 값", 12), rw("본페로니", 12), rw("홀름", 12),
rw("BH", 12), rw("BH 기준선", 12)))
for i in range(m):
print(" %s %12.6f %12.6f %12.6f %12.6f %12.6f"
% (pw("%d" % (i + 1), 8), P0[i], min(1.0, P0[i] * m), hp[i], bhp[i],
0.05 * (i + 1) / m))
print(" 본페로니는 전부 8 을 곱합니다. 0.008 이 0.064 가 되어 기각을 놓칩니다")
print(" 홀름은 8, 7, 6 순으로 곱해 0.008 이 0.056 이 됩니다. 조금 낫습니다")
print(" BH 는 각 p 를 순위로 나눠 곱합니다. 0.008 이 0.032 라 기각됩니다")
print(" %s %s" % (pw("무엇으로", 16), rw("0.05 에서 기각한 수", 22)))
for nm, v in [("보정 없음", P0), ("본페로니", np.minimum(1.0, P0 * m)),
("홀름", hp), ("BH", bhp)]:
print(" %s %22d" % (pw(nm, 16), int((v < 0.05).sum())))
print(" BH 가 가장 많이 기각합니다. 대신 지키는 것이 다릅니다")
# --- 문제 3: 두 목표가 실제로 다른가 -------------------------------------
print(" 참이 하나도 없을 때는 두 목표가 같습니다")
R3, M3 = 20000, 20
Z = rng.normal(0, 1, (R3, M3))
P = p2v(Z)
print(" 20 개 검정이 모두 귀무가설이며 2 만 번 되풀이했습니다")
print(" %s %s %s" % (pw("무엇으로", 16), rw("하나라도 기각할 비율", 24), rw("목표", 10)))
for nm, A in [("보정 없음", P), ("본페로니", np.minimum(1.0, P * M3)),
("홀름", holm(P)), ("BH", bh(P))]:
print(" %s %24.4f %10.2f" % (pw(nm, 16), float((A < 0.05).any(1).mean()), 0.05))
print(" 참이 하나도 없으면 FDR 을 지키는 것이 FWER 을 지키는 것과 같아집니다")
print(" 기각한 것이 있으면 그것은 전부 잘못된 기각이기 때문입니다")
print(" 참이 섞여 있으면 달라집니다")
R4, M4 = 20000, 100
print(" 100 개 중 참인 효과가 몇 개냐에 따라 세 방법을 봅니다")
print(" %s %s %s %s %s"
% (pw("참인 효과의 수", 16), rw("무엇으로", 12), rw("잘못된 기각의 평균", 22),
rw("찾아낸 참의 평균", 20), rw("FDR", 10)))
for ntrue in [0, 5, 20, 50]:
mu = np.zeros(M4)
mu[:ntrue] = 3.5
Zx = rng.normal(mu, 1.0, (R4, M4))
Px = p2v(Zx)
for nm, A in [("본페로니", np.minimum(1.0, Px * M4)), ("홀름", holm(Px)), ("BH", bh(Px))]:
R = A < 0.05
V = R[:, ntrue:].sum(1)
S = R[:, :ntrue].sum(1) if ntrue > 0 else np.zeros(R4)
tot = V + S
fdr = np.where(tot > 0, V / np.maximum(tot, 1), 0.0).mean()
print(" %s %s %22.4f %20.4f %10.4f"
% (pw("%d" % ntrue if nm == "본페로니" else "", 16), rw(nm, 12),
float(V.mean()), float(S.mean()), float(fdr)))
print(" BH 는 잘못된 기각이 더 많은 대신 참을 훨씬 많이 찾아냅니다")
print(" 참이 20 개일 때 본페로니는 10.13 개를 찾고 BH 는 16.12 개를 찾습니다")
print(" 그리고 BH 의 FDR 이 0.05 아래로 지켜집니다. 이것이 BH 가 지키는 것입니다")
# --- 문제 4: 검정끼리 상관이 있으면 -------------------------------------
print(" 지금까지는 검정들이 서로 독립이었습니다")
R5, M5 = 20000, 50
print(" 50 개 검정이 같은 요인을 공유해 서로 상관되게 만듭니다")
print(" %s %s %s %s" % (pw("검정 간 상관", 14), rw("보정 없음", 14),
rw("본페로니", 14), rw("BH", 12)))
for rho in [0.0, 0.3, 0.6, 0.9]:
com = rng.normal(0, 1, (R5, 1))
idio = rng.normal(0, 1, (R5, M5))
Zc = np.sqrt(rho) * com + np.sqrt(1.0 - rho) * idio
Pc = p2v(Zc)
print(" %s %14.4f %14.4f %12.4f"
% (pw("%.1f" % rho, 14), float((Pc < 0.05).any(1).mean()),
float((np.minimum(1.0, Pc * M5) < 0.05).any(1).mean()),
float((bh(Pc) < 0.05).any(1).mean())))
print(" 상관이 커지면 보정 없이도 오류율이 오히려 내려갑니다")
print(" 검정들이 같이 움직여 실질적인 검정 수가 줄어들기 때문입니다")
print(" 본페로니는 어느 상관에서도 목표를 지킵니다. 대신 점점 더 보수적이 됩니다")
print(" 순열로 만들면 상관을 자료가 알아서 담습니다")
print(" 179강 문제 4 의 순열 검정을 여러 검정으로 늘립니다")
print(" %s %s" % (pw("어떻게 하는가", 26), rw("무엇을 얻는가", 26)))
for a, b in [("라벨을 섞어 전체를 다시 검정", "가장 작은 p 의 분포"),
("그 분포의 5 퍼센트 지점", "상관을 반영한 기준"),
("실제 p 를 그 기준과 견줌", "정확한 FWER 보정")]:
print(" %s %s" % (pw(a, 26), rw(b, 26)))
print(" 순열 기준이 본페로니보다 얼마나 느슨한지 재 봅니다")
R6, M6 = 4000, 50
print(" 상관 0.6 인 50 개 검정에서 가장 작은 p 의 5 퍼센트 지점을 찾습니다")
for rho in [0.0, 0.6, 0.9]:
com = rng.normal(0, 1, (R6, 1))
idio = rng.normal(0, 1, (R6, M6))
Zc = np.sqrt(rho) * com + np.sqrt(1.0 - rho) * idio
Pc = p2v(Zc)
thr = float(np.quantile(Pc.min(1), 0.05))
print(" 상관 %.1f 이면 기준이 %.6f 이고 본페로니는 %.6f 입니다"
% (rho, thr, 0.05 / M6))
print(" 상관이 0 이면 둘이 거의 같고 상관이 크면 순열 기준이 훨씬 느슨합니다")
print(" 같은 오류율을 지키면서 더 많이 찾을 수 있다는 뜻입니다")
# --- 문제 5: 무엇을 미리 정해야 하는가 -----------------------------------
print(" 보정은 비교의 수를 알아야 합니다")
print(" %s %s" % (pw("어떻게 정했는가", 26), rw("보정이 뜻을 갖는가", 24)))
for a, b in [("미리 검정 목록을 적음", "갖습니다"),
("자료를 보고 눈에 띄는 것만", "안 갖습니다"),
("여러 세그먼트를 다 훑음", "센 수만큼만"),
("멈출 때까지 계속 봄", "셀 수가 없습니다")]:
print(" %s %s" % (pw(a, 26), rw(b, 24)))
print(" 둘째 줄과 넷째 줄이 실무에서 가장 흔한 실패입니다")
print(" 눈으로 고르면 어떻게 되는지 재 봅니다")
R7, M7 = 20000, 20
Zg = rng.normal(0, 1, (R7, M7))
Pg = p2v(Zg)
best = Pg.min(1)
print(" 효과가 하나도 없는 20 개 지표에서 가장 좋은 것만 골라 보고합니다")
print(" %s %s" % (pw("무엇으로", 26), rw("0.05 아래일 비율", 22)))
print(" %s %22.4f" % (pw("아무 지표 하나를 미리 정함", 26), float((Pg[:, 0] < 0.05).mean())))
print(" %s %22.4f" % (pw("가장 좋은 것을 골라 보고", 26), float((best < 0.05).mean())))
print(" %s %22.4f" % (pw("고른 뒤 본페로니 보정", 26),
float((np.minimum(1.0, best * M7) < 0.05).mean())))
print(" 고르고 나서 보정하면 지켜집니다. 문제는 고른 사실을 안 적을 때입니다")
print(" 보고서에 지표가 하나만 실리면 독자는 20 번 봤다는 것을 알 수 없습니다")
print(" 주 지표를 하나 정하는 것이 가장 강한 대책입니다")
print(" %s %s" % (pw("설계", 26), rw("무엇을 얻는가", 26)))
for a, b in [("주 지표 하나를 미리 정함", "보정이 필요 없습니다"),
("부 지표는 탐색으로 표시", "확인이 아니라 가설 생성"),
("계층으로 나눠 순서대로", "앞이 통과해야 뒤를 봄"),
("미리 등록해 공개", "나중에 못 바꿉니다")]:
print(" %s %s" % (pw(a, 26), rw(b, 26)))
print(" 셋째 줄의 계층 검정을 확인합니다")
R8 = 20000
Z8 = rng.normal(0, 1, (R8, 3))
P8 = p2v(Z8)
gate = P8[:, 0] < 0.05
step = gate & (P8[:, 1] < 0.05)
step2 = step & (P8[:, 2] < 0.05)
print(" 세 지표를 순서대로 보되 앞이 막히면 뒤를 안 봅니다")
print(" %s %s %s" % (pw("어디까지", 16), rw("기각할 비율", 14), rw("목표", 10)))
print(" %s %14.4f %10.2f" % (pw("첫째만", 16), float(gate.mean()), 0.05))
print(" %s %14.4f %10.2f" % (pw("둘째까지", 16), float(step.mean()), 0.05))
print(" %s %14.4f %10.2f" % (pw("셋째까지", 16), float(step2.mean()), 0.05))
print(" 어디서 멈추든 잘못된 기각이 하나라도 날 확률이 0.05 를 안 넘습니다")
print(" 순서를 미리 정하는 것만으로 보정 없이 전체 오류율이 지켜집니다")
print(" 대신 첫째가 막히면 둘째가 아무리 강해도 못 씁니다. 그것이 대가입니다")
print(" 고를 때의 기준을 정리합니다")
print(" %s %s" % (pw("상황", 28), rw("무엇을 쓰는가", 22)))
for a, b in [("확인 목적이고 검정이 적음", "홀름"),
("탐색 목적이고 검정이 많음", "BH"),
("검정끼리 상관이 큼", "순열 기준"),
("주 지표가 정해짐", "보정 없이 그 하나"),
("순서가 자연스러움", "계층 검정")]:
print(" %s %s" % (pw(a, 28), rw(b, 22)))
print(" 178강 문제 2 의 결론이 여기서도 같습니다. 자료를 보고 고르면 안 됩니다")
# 180강과 181강에서 같은 문제가 두 번 나왔습니다
# 여러 번 물으면 없는 것도 찾습니다. 무엇을 지킬지부터 정합니다
# 무엇을 지키는가 이름 뜻
# 하나라도 틀릴 확률 FWER 잘못된 기각이 하나라도 나올 확률
# 틀린 것의 몫 FDR 기각한 것 중 잘못된 것의 비율
# 하나하나의 오류 PCER 검정마다 따로 0.05 를 지킴
# 셋째 줄이 보정을 안 하는 것입니다. 검정마다는 맞는데 전체가 무너집니다
# 검정 수가 늘면 하나라도 틀릴 확률이 이렇게 오릅니다
# 검정 수 보정 없을 때 본페로니 기준
# 1 0.050000 0.0500000000
# 5 0.226219 0.0100000000
# 20 0.641514 0.0025000000
# 100 0.994079 0.0005000000
# 1000 1.000000 0.0000500000
# 20000 1.000000 0.0000025000
# 스무 번이면 이미 0.64 이고 백 번이면 거의 확실합니다
# 기준을 검정 수로 나누면 지켜지는데 그 기준이 아주 작아집니다
# 유전체나 A/B 대시보드는 검정 수가 만 단위입니다
# 자리 검정 수의 규모
# 유전체 연관 분석 50 만 개 위치
# A/B 대시보드 지표 x 세그먼트
# 이미지 특징 선별 수천 개 특징
# 설문 문항 간 상관 문항 수의 제곱
# 이런 자리에서 본페로니는 아무것도 못 찾게 만듭니다
# 그래서 지킬 대상을 바꾸는 것이 182강의 핵심입니다
# 전체 오류율을 지키는 두 방법을 견줍니다
# p 값 여덟 개를 작은 것부터 늘어놓습니다
# 순위 p 값 본페로니 홀름 BH BH 기준선
# 1 0.001000 0.008000 0.008000 0.008000 0.006250
# 2 0.008000 0.064000 0.056000 0.032000 0.012500
# 3 0.020000 0.160000 0.120000 0.053333 0.018750
# 4 0.030000 0.240000 0.150000 0.060000 0.025000
# 5 0.045000 0.360000 0.180000 0.072000 0.031250
# 6 0.200000 1.000000 0.600000 0.266667 0.037500
# 7 0.400000 1.000000 0.800000 0.457143 0.043750
# 8 0.900000 1.000000 0.900000 0.900000 0.050000
# 본페로니는 전부 8 을 곱합니다. 0.008 이 0.064 가 되어 기각을 놓칩니다
# 홀름은 8, 7, 6 순으로 곱해 0.008 이 0.056 이 됩니다. 조금 낫습니다
# BH 는 각 p 를 순위로 나눠 곱합니다. 0.008 이 0.032 라 기각됩니다
# 무엇으로 0.05 에서 기각한 수
# 보정 없음 5
# 본페로니 1
# 홀름 1
# BH 2
# BH 가 가장 많이 기각합니다. 대신 지키는 것이 다릅니다
# 참이 하나도 없을 때는 두 목표가 같습니다
# 20 개 검정이 모두 귀무가설이며 2 만 번 되풀이했습니다
# 무엇으로 하나라도 기각할 비율 목표
# 보정 없음 0.6431 0.05
# 본페로니 0.0502 0.05
# 홀름 0.0502 0.05
# BH 0.0513 0.05
# 참이 하나도 없으면 FDR 을 지키는 것이 FWER 을 지키는 것과 같아집니다
# 기각한 것이 있으면 그것은 전부 잘못된 기각이기 때문입니다
# 참이 섞여 있으면 달라집니다
# 100 개 중 참인 효과가 몇 개냐에 따라 세 방법을 봅니다
# 참인 효과의 수 무엇으로 잘못된 기각의 평균 찾아낸 참의 평균 FDR
# 0 본페로니 0.0498 0.0000 0.0489
# 홀름 0.0499 0.0000 0.0489
# BH 0.0551 0.0000 0.0501
# 5 본페로니 0.0469 2.5427 0.0149
# 홀름 0.0481 2.5562 0.0151
# BH 0.2226 3.2557 0.0477
# 20 본페로니 0.0411 10.1273 0.0039
# 홀름 0.0450 10.3490 0.0042
# BH 0.7299 16.1198 0.0406
# 50 본페로니 0.0251 25.3899 0.0010
# 홀름 0.0351 27.0516 0.0013
# BH 1.1701 44.4908 0.0250
# BH 는 잘못된 기각이 더 많은 대신 참을 훨씬 많이 찾아냅니다
# 참이 20 개일 때 본페로니는 10.13 개를 찾고 BH 는 16.12 개를 찾습니다
# 그리고 BH 의 FDR 이 0.05 아래로 지켜집니다. 이것이 BH 가 지키는 것입니다
# 지금까지는 검정들이 서로 독립이었습니다
# 50 개 검정이 같은 요인을 공유해 서로 상관되게 만듭니다
# 검정 간 상관 보정 없음 본페로니 BH
# 0.0 0.9240 0.0488 0.0505
# 0.3 0.8083 0.0435 0.0462
# 0.6 0.5158 0.0270 0.0324
# 0.9 0.1923 0.0076 0.0214
# 상관이 커지면 보정 없이도 오류율이 오히려 내려갑니다
# 검정들이 같이 움직여 실질적인 검정 수가 줄어들기 때문입니다
# 본페로니는 어느 상관에서도 목표를 지킵니다. 대신 점점 더 보수적이 됩니다
# 순열로 만들면 상관을 자료가 알아서 담습니다
# 179강 문제 4 의 순열 검정을 여러 검정으로 늘립니다
# 어떻게 하는가 무엇을 얻는가
# 라벨을 섞어 전체를 다시 검정 가장 작은 p 의 분포
# 그 분포의 5 퍼센트 지점 상관을 반영한 기준
# 실제 p 를 그 기준과 견줌 정확한 FWER 보정
# 순열 기준이 본페로니보다 얼마나 느슨한지 재 봅니다
# 상관 0.6 인 50 개 검정에서 가장 작은 p 의 5 퍼센트 지점을 찾습니다
# 상관 0.0 이면 기준이 0.001031 이고 본페로니는 0.001000 입니다
# 상관 0.6 이면 기준이 0.002215 이고 본페로니는 0.001000 입니다
# 상관 0.9 이면 기준이 0.008581 이고 본페로니는 0.001000 입니다
# 상관이 0 이면 둘이 거의 같고 상관이 크면 순열 기준이 훨씬 느슨합니다
# 같은 오류율을 지키면서 더 많이 찾을 수 있다는 뜻입니다
# 보정은 비교의 수를 알아야 합니다
# 어떻게 정했는가 보정이 뜻을 갖는가
# 미리 검정 목록을 적음 갖습니다
# 자료를 보고 눈에 띄는 것만 안 갖습니다
# 여러 세그먼트를 다 훑음 센 수만큼만
# 멈출 때까지 계속 봄 셀 수가 없습니다
# 둘째 줄과 넷째 줄이 실무에서 가장 흔한 실패입니다
# 눈으로 고르면 어떻게 되는지 재 봅니다
# 효과가 하나도 없는 20 개 지표에서 가장 좋은 것만 골라 보고합니다
# 무엇으로 0.05 아래일 비율
# 아무 지표 하나를 미리 정함 0.0505
# 가장 좋은 것을 골라 보고 0.6343
# 고른 뒤 본페로니 보정 0.0485
# 고르고 나서 보정하면 지켜집니다. 문제는 고른 사실을 안 적을 때입니다
# 보고서에 지표가 하나만 실리면 독자는 20 번 봤다는 것을 알 수 없습니다
# 주 지표를 하나 정하는 것이 가장 강한 대책입니다
# 설계 무엇을 얻는가
# 주 지표 하나를 미리 정함 보정이 필요 없습니다
# 부 지표는 탐색으로 표시 확인이 아니라 가설 생성
# 계층으로 나눠 순서대로 앞이 통과해야 뒤를 봄
# 미리 등록해 공개 나중에 못 바꿉니다
# 셋째 줄의 계층 검정을 확인합니다
# 세 지표를 순서대로 보되 앞이 막히면 뒤를 안 봅니다
# 어디까지 기각할 비율 목표
# 첫째만 0.0511 0.05
# 둘째까지 0.0026 0.05
# 셋째까지 0.0001 0.05
# 어디서 멈추든 잘못된 기각이 하나라도 날 확률이 0.05 를 안 넘습니다
# 순서를 미리 정하는 것만으로 보정 없이 전체 오류율이 지켜집니다
# 대신 첫째가 막히면 둘째가 아무리 강해도 못 씁니다. 그것이 대가입니다
# 고를 때의 기준을 정리합니다
# 상황 무엇을 쓰는가
# 확인 목적이고 검정이 적음 홀름
# 탐색 목적이고 검정이 많음 BH
# 검정끼리 상관이 큼 순열 기준
# 주 지표가 정해짐 보정 없이 그 하나
# 순서가 자연스러움 계층 검정
# 178강 문제 2 의 결론이 여기서도 같습니다. 자료를 보고 고르면 안 됩니다