178강과 179강이 집단 둘을 다뤘습니다. 이제 셋 이상입니다.
가장 먼저 떠오르는 답은 짝을 세 번 비교하는 것입니다. 그런데 178강 문제 4에서 여러 번 보면 오류율이 오른다고 했고, 여기서 그 값을 직접 잽니다.
| 집단 수 | 짝의 수 |
|---|---|
집단이 열이면 짝이 마흔다섯 개입니다. 각각을 로 검정하면 없는 차이를 반드시 찾습니다.
그래서 물음을 바꿉니다. "이 두 집단이 같습니까"를 여러 번 묻는 대신 "모든 집단이 같습니까"를 한 번 묻습니다.
이름이 분산분석인데 비교하는 것은 평균입니다. 그 어긋난 이름이 이 강의의 핵심 아이디어를 담고 있으며, 문제 2에서 풉니다.
문제. 짝 비교를 반복합니다.
(1) 집단 수에 따른 실제 오류율을 재세요.
(2) 독립이라 가정한 값과 견주세요.
(3) 물음을 어떻게 바꿔야 하는지 정리하세요.
생각의 실마리. 모든 집단이 같은 분포에서 나오게 두면 어떤 기각도 잘못된 기각입니다. 하나라도 유의하게 나올 비율을 세면 됩니다.
풀이. (1) 집단당 개로 만 번씩 되풀이합니다.
| 집단 수 | 짝의 수 | 하나라도 유의할 비율 | 독립이면 |
|---|---|---|---|
집단이 셋이면 를 겨냥했는데 실제로는 입니다. 두 배가 넘습니다.
열이면 로 세 번 중 두 번꼴입니다. 참 차이가 하나도 없는데 거의 언제나 무언가를 찾아냅니다.
(2) 오른쪽 열은 검정이 서로 독립일 때의 값입니다.
실제 값이 그보다 낮습니다. 짝끼리 같은 집단을 나눠 쓰기 때문에 검정들이 서로 얽혀 있습니다. A와 B를 비교한 결과와 A와 C를 비교한 결과가 A를 공유하므로 완전히 독립일 수 없습니다.
그래도 목표를 크게 넘습니다. 상관이 있다고 문제가 사라지지는 않습니다.
(3) 물음을 바꿉니다.
| 무엇을 묻는가 | 귀무가설 |
|---|---|
| 짝마다 따로 | 이 두 집단의 평균이 같다 |
| 한 번에 | 모든 집단의 평균이 같다 |
아래 물음에 답하는 것이 분산분석입니다. 검정을 한 번만 하므로 오류율이 한 번어치입니다.
이 문제에서 배우는 것. "여러 번 검정했으니 보정하면 된다"는 대응이 순서가 뒤집힌 것입니다. 보정은 이미 잘못 세운 물음을 사후에 깁는 것이고, 먼저 할 일은 무엇을 묻고 싶은지 한 문장으로 적는 것입니다. "이 처리들 사이에 차이가 있는가"라면 분산분석이 그 물음이고, "A가 B보다 나은가"가 진짜 물음이면 처음부터 그 하나만 검정하면 됩니다. 실무에서 지표 여러 개를 늘어놓고 유의한 것을 찾는 관행이 문제인 이유가 여기 있는데, 물음이 없는 상태에서 검정만 반복하기 때문입니다.
바로 확인 1.
확인 1-1. 검산에서 집단이 셋일 때의 실제 오류율을 쓰세요.
답. 이며 목표 의 두 배가 넘습니다.
확인 1-2. 실제 값이 독립 가정보다 낮은 이유를 쓰세요.
답. 짝끼리 같은 집단을 나눠 써서 검정이 서로 얽혀 있기 때문입니다.
확인 1-3. 분산분석의 귀무가설을 쓰세요.
답. 모든 집단의 평균이 같다는 것입니다.
문제. 통계량을 만듭니다.
(1) 제곱합을 둘로 나누세요.
(2) 를 계산하고 값을 구하세요.
(3) 평균 차이가 커지면 무엇이 변하는지 확인하세요.
생각의 실마리. 평균이 다르면 집단 사이의 흩어짐이 커집니다. 그것을 집단 안의 흩어짐과 견주면, 우연으로 설명되는 폭인지 알 수 있습니다.
풀이. (1) 세 집단을 봅니다.
| 집단 | 값 | 평균 | 크기 |
|---|---|---|---|
| A | |||
| B | |||
| C |
전체 평균은 입니다.
| 무엇의 흩어짐 | 제곱합 | 자유도 | 평균제곱 |
|---|---|---|---|
| 집단 사이 | |||
| 집단 안 | |||
| 전체 |
으로 정확히 갈라집니다. 제곱합이 이렇게 나뉘는 것이 분산분석의 뼈대이며, 이 항등식은 각 관측을 전체 평균으로부터의 거리와 집단 평균으로부터의 거리로 쪼갠 것입니다.
(2) 두 평균제곱의 비를 봅니다.
자유도는 와 이고 값은 입니다. 기각에 필요한 는 이므로 크게 넘습니다.
귀무가설이 참이면 두 평균제곱이 둘 다 오차분산을 추정합니다. 그래서 비가 근처여야 하고, 평균이 다르면 분자만 커집니다.
(3) 그 사실을 직접 확인합니다. B의 평균만 옮깁니다.
| B를 얼마나 올리는가 | 집단 사이 | 집단 안 | |
|---|---|---|---|
집단 안이 으로 한 번도 안 변합니다. 집단을 통째로 옮겨도 안쪽 흩어짐은 그대로이기 때문입니다.
그래서 가 평균 차이만 잡아냅니다. 분산의 비를 보는데 재는 것은 평균이며, 이것이 이름과 하는 일이 어긋나 보이는 이유입니다.
이 문제에서 배우는 것. 분산분석은 178강의 검정과 다른 도구가 아니라 같은 아이디어의 확장입니다. 가 "차이를 우연의 폭으로 나눈 것"이었는데, 는 "집단 사이의 흩어짐을 집단 안의 흩어짐으로 나눈 것"입니다. 실제로 집단이 둘이면 가 정확히 성립하며, 심화 1에서 확인합니다. 그리고 이 제곱합 분해가 S8 02단원 회귀분석의 뼈대와 같은 구조입니다. 184강에서 를 정의할 때 같은 식이 다시 나오는데, 집단 평균 대신 회귀선을 넣은 것뿐입니다.
바로 확인 2.
확인 2-1. 제곱합의 분해를 식으로 쓰세요.
답. 전체 제곱합이 집단 사이 제곱합과 집단 안 제곱합의 합입니다.
확인 2-2. 검산에서 와 값과 기각 기준을 쓰세요.
답. 는 이고 는 이며 기준은 입니다.
확인 2-3. 집단을 옮겨도 집단 안이 안 변하는 이유를 쓰세요.
답. 통째로 옮기면 집단 평균도 같이 옮겨 안쪽 거리가 그대로이기 때문입니다.
문제. 분산분석을 검사합니다.
(1) 집단 수를 늘려 가며 오류율을 재세요.
(2) 가정을 정리하세요.
(3) 분산이 다를 때를 확인하세요.
생각의 실마리. 문제 1에서 짝 비교가 무너졌습니다. 한 번에 묻는 방법이 정말 지키는지 같은 방식으로 잽니다.
풀이. (1) 집단당 개로 만 번씩 되풀이합니다.
| 집단 수 | 분산분석 오류율 | 짝 비교 오류율 | 목표 |
|---|---|---|---|
분산분석은 집단이 몇 개든 를 지킵니다. 짝 비교는 집단이 늘수록 나빠지며, 이것이 한 번에 묻는 이유입니다.
(2) 그런데 분산분석도 가정이 있습니다.
| 가정 | 어디서 본 문제인가 |
|---|---|
| 각 집단이 정규 | 179강 문제 1 |
| 모든 집단의 분산이 같음 | 178강 문제 2 |
| 관측이 서로 독립 | 173강 문제 3의 군집 |
둘째 줄이 웰치로 풀렸던 문제입니다. 여기서 다시 나옵니다.
(3) 평균은 모두 같고 표준편차만 다르게 둡니다.
| 세 집단의 표준편차 | 크기 배치 | 검정 오류율 | 목표 |
|---|---|---|---|
둘째 줄이 중요합니다. 크기가 같아도 분산이 세 배 다르면 로 목표를 넘습니다. 178강에서 집단이 둘일 때는 크기가 같으면 버텼는데, 집단이 늘면 그 보호가 약해집니다.
크기까지 어긋나면 크게 무너집니다. 작은 집단의 분산이 크면 로 다섯 배가 되고, 반대면 로 너무 조심스러워집니다.
178강 문제 2의 방향과 정확히 같습니다. 분산이 다를 이유가 있으면 웰치의 분산분석을 씁니다.
이 문제에서 배우는 것. 집단이 늘어나면 가정 위반의 대가가 커집니다. 두 집단일 때는 크기만 맞춰도 등분산 위반을 견뎠는데, 세 집단부터는 그것으로 부족합니다. 그리고 실무의 실험에서 집단마다 크기가 다른 것이 오히려 보통입니다. 대조군을 크게 두거나, 중도 탈락이 처리마다 다르거나, 관측 자료를 그룹으로 나눈 경우가 전부 그렇습니다. 그래서 크기가 다르면 분산이 같은지부터 걱정해야 하고, 걱정될 때 검정으로 확인하는 대신 178강 문제 2의 결론대로 처음부터 웰치 쪽을 쓰는 것이 낫습니다.
바로 확인 3.
확인 3-1. 검산에서 집단이 여섯일 때 두 방법의 오류율을 쓰세요.
답. 분산분석은 이고 짝 비교는 입니다.
확인 3-2. 검산에서 크기가 같고 분산이 세 배 다를 때의 오류율을 쓰세요.
답. 이며 집단이 둘일 때와 달리 목표를 넘습니다.
확인 3-3. 오류율이 가장 나빴던 배치와 값을 쓰세요.
답. 작은 집단의 분산이 큰 경우이며 입니다.
문제. 사후 비교를 합니다.
(1) 짝마다 와 를 구하세요.
(2) 본페로니와 홀름으로 보정하세요.
(3) 보정이 실제로 지키는지 확인하세요.
생각의 실마리. 가 유의하다는 것은 모두 같지는 않다는 뜻뿐입니다. 어느 짝이 다른지는 따로 물어야 합니다.
풀이. (1) 문제 2의 세 집단에서 짝마다 봅니다. 분모에는 집단 안의 평균제곱 를 씁니다.
| 짝 | 평균 차이 | 보정 없는 | |
|---|---|---|---|
| A vs B | |||
| A vs C | |||
| B vs C |
모든 집단의 자료를 써서 분모를 만드는 것이 두 집단만 쓰는 것보다 낫습니다. 자유도가 이 아니라 가 되어 추정이 안정됩니다.
셋을 각각 로 보면 문제 1의 문제가 그대로 돌아옵니다.
(2) 보정합니다.
| 짝 | 보정 없음 | 본페로니 | 홀름 |
|---|---|---|---|
| A vs B | |||
| A vs C | |||
| B vs C |
본페로니는 전부 을 곱합니다. 홀름은 작은 것부터 을 곱하므로 언제나 본페로니보다 작거나 같습니다.
B vs C에서 차이가 납니다. 와 이며, 홀름 쪽이 더 자주 기각합니다.
(3) 두 보정이 실제로 를 지키는지 확인합니다. 집단 셋이 모두 같은 분포이며 만 번 되풀이했습니다.
| 무엇으로 | 하나라도 유의할 비율 | 목표 |
|---|---|---|
| 보정 없음 | ||
| 본페로니 | ||
| 홀름 |
두 보정의 값이 정확히 같습니다.
"하나라도 기각하는가"는 가장 작은 값이 을 넘는지로만 정해지고, 홀름의 첫 단계 기준이 본페로니와 같기 때문입니다. 홀름의 이득은 첫 기각 뒤에 나타나며, 위 표의 B vs C가 그 자리입니다.
둘 다 보다 낮습니다. 검정들이 서로 얽혀 있어 본페로니의 부등식이 여유를 남기기 때문입니다.
이 문제에서 배우는 것. 가 유의하지 않았는데 짝 비교로 넘어가면 안 됩니다. 그것이 문제 1로 되돌아가는 일이며, 한 번에 묻기로 한 결정을 무르는 것입니다. 반대로 가 유의했다고 어느 한 짝이 반드시 유의한 것도 아닙니다. 는 모든 짝의 정보를 합쳐 보므로, 어느 하나로는 부족한 증거가 셋을 합치면 충분해질 수 있습니다. 그래서 사후 비교에서 아무것도 안 나오는 결과가 모순이 아니며, 그럴 때 보고할 것은 **"차이는 있으나 어느 짝인지 특정할 힘이 없었습니다"**입니다.
바로 확인 4.
확인 4-1. 사후 비교의 분모에 무엇을 쓰는지와 이유를 쓰세요.
답. 집단 안의 평균제곱이며 모든 자료를 써서 자유도가 커지기 때문입니다.
확인 4-2. 본페로니와 홀름의 곱하는 값을 쓰세요.
답. 본페로니는 전부 이고 홀름은 작은 것부터 입니다.
확인 4-3. 검산에서 세 방법의 전체 오류율을 쓰세요.
답. , , 입니다.
문제. 효과 크기와 설계를 다룹니다.
(1) 표본 크기와 의 관계를 확인하세요.
(2) 효과 크기를 계산하세요.
(3) 집단 수가 검출력에 미치는 영향을 확인하세요.
생각의 실마리. 178강 문제 4에서 가 표본 크기에 끌려다녔습니다. 도 같은지 봅니다.
풀이. (1) 세 집단의 평균을 , , 으로 고정하고 크기만 늘립니다.
| 집단당 크기 | 평균의 참 차이 | 평균 | 유의 비율 | 에타제곱 |
|---|---|---|---|---|
참 차이는 그대로인데 가 에서 로 오릅니다. 유의 비율도 에서 이 됩니다.
에타제곱만 반대로 갑니다. 에서 로 내려가면서 참값에 붙습니다.
작은 표본에서 에타제곱이 부풀어 있습니다. 우연한 차이도 집단 사이 제곱합에 들어가기 때문이며, 178강 문제 5의 코헨 와 같은 편향입니다.
(2) 문제 2의 자료에서 계산합니다.
에타제곱은 이고 편향을 고친 오메가제곱은 입니다.
| 에타제곱의 크기 | 흔히 부르는 말 |
|---|---|
| 작다 | |
| 중간 | |
| 크다 |
분자에서 우연이 만들 몫을 빼는 것이 보정의 전부입니다.
(3) 집단을 몇 개로 나눌지도 설계입니다. 총 표본 명을 고정하고, 양 끝 집단의 차이를 로 고정합니다.
| 집단 수 | 집단당 크기 | 가장 먼 두 집단의 차이 | 유의 비율 |
|---|---|---|---|
같은 사람 수, 같은 양 끝 차이인데 검출력이 에서 로 떨어집니다.
두 가지가 함께 작동합니다. 가운데 집단들이 차이를 희석하고, 집단당 크기도 줄어듭니다.
나눌 수 있다고 나누는 것이 아니라 물음이 나눌 수를 정합니다.
이 문제에서 배우는 것. "용량을 여섯 단계로 나눠 보자"는 결정이 통계적으로 공짜가 아닙니다. 세밀하게 나누면 반응의 모양을 볼 수 있지만 각 단계를 구별할 힘은 줄어듭니다. 반대로 두 단계로만 나누면 힘은 세지만 모양을 못 봅니다. 어느 쪽이 옳은지는 물음이 정하는데, "효과가 있는가"라면 두 단계가 낫고 "얼마부터 효과가 있는가"라면 여러 단계가 필요합니다. 그리고 여러 단계로 나눌 때는 집단 비교가 아니라 회귀가 더 나은 도구인 경우가 많으며, 그것이 184강부터의 이야기입니다.
바로 확인 5.
확인 5-1. 검산에서 표본이 커질 때 와 에타제곱의 방향을 쓰세요.
답. 는 에서 로 오르고 에타제곱은 에서 로 내려갑니다.
확인 5-2. 검산에서 문제 2 자료의 에타제곱과 오메가제곱을 쓰세요.
답. 과 입니다.
확인 5-3. 검산에서 총 표본이 같을 때 집단 개와 개의 검출력을 쓰세요.
답. 와 입니다.
| 무엇을 묻는가 | 무엇을 쓰는가 |
|---|---|
| 두 집단이 같은가 | 검정 |
| 셋 이상이 모두 같은가 | 분산분석 |
| 어느 짝이 다른가 | 보정한 사후 비교 |
| 분산이 다를 것 같다 | 웰치의 분산분석 |
| 정규가 아닐 것 같다 | 크러스컬-월리스 |
| 제곱합 | 자유도 | 무엇을 담는가 |
|---|---|---|
| 집단 사이 | 평균들의 흩어짐 | |
| 집단 안 | 오차의 흩어짐 | |
| 전체 | 둘의 합 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 짝을 여러 번 비교합니다 | 집단 셋이면 오류율이 입니다 |
| 가 유의하니 다 다르다고 봅니다 | 어느 짝인지는 따로 봅니다 |
| 가 유의하지 않은데 짝을 봅니다 | 한 번에 묻기로 한 결정을 무릅니다 |
| 크기가 다른데 등분산을 믿습니다 | 오류율이 다섯 배까지 갑니다 |
| 가 크니 차이가 크다고 봅니다 | 표본이 크면 저절로 커집니다 |
| 집단을 잘게 나눕니다 | 검출력이 통째로 떨어집니다 |
문제 6. 검산에서 집단이 셋과 열일 때의 짝 비교 오류율을 쓰세요.
답. 와 입니다.
문제 7. 실제 오류율이 독립 가정보다 낮은 이유를 쓰세요.
답. 짝끼리 같은 집단을 나눠 써서 검정이 서로 얽혀 있기 때문입니다.
문제 8. 제곱합의 분해를 식으로 쓰세요.
답. 전체 제곱합이 집단 사이 제곱합과 집단 안 제곱합의 합입니다.
문제 9. 검산에서 세 집단의 세 제곱합을 쓰세요.
답. , , 입니다.
문제 10. 검산에서 와 값과 기각 기준을 쓰세요.
답. 과 이고 기준은 입니다.
문제 11. 집단을 통째로 옮겨도 집단 안이 안 변하는 이유를 쓰세요.
답. 집단 평균도 같이 옮겨 안쪽 거리가 그대로이기 때문입니다.
문제 12. 검산에서 집단이 여섯일 때 두 방법의 오류율을 쓰세요.
답. 분산분석은 이고 짝 비교는 입니다.
문제 13. 검산에서 오류율이 가장 나빴던 분산과 크기 배치를 쓰세요.
답. 표준편차 에 크기 이며 입니다.
문제 14. 사후 비교의 분모에 무엇을 쓰는지와 이유를 쓰세요.
답. 집단 안의 평균제곱이며 모든 자료를 써서 자유도가 커지기 때문입니다.
문제 15. 본페로니와 홀름의 곱하는 값을 쓰세요.
답. 본페로니는 전부 이고 홀름은 작은 것부터 입니다.
문제 16. 검산에서 두 보정의 전체 오류율이 같은 이유를 쓰세요.
답. 하나라도 기각하는가는 가장 작은 의 기준으로만 정해지고 둘이 같기 때문입니다.
문제 17. 검산에서 문제 2 자료의 에타제곱과 오메가제곱을 쓰세요.
답. 과 입니다.
문제 18. 검산에서 총 표본이 같을 때 집단 개와 개의 검출력을 쓰세요.
답. 와 입니다.
심화 1. 집단이 둘일 때 와 의 관계를 정리하세요.
같은 검정입니다. 분포의 첫 자유도가 일 때 분포의 제곱이 되기 때문입니다.
| 무엇이 대응하는가 | ||
|---|---|---|
| 자유도 | 과 | |
| 기각 기준 | 근처 | 근처 |
| 방향 | 알 수 있습니다 | 없습니다 |
셋째 줄이 잃는 것입니다. 는 제곱이라 어느 쪽이 큰지 말하지 않습니다. 그래서 집단이 둘이면 를 쓰는 편이 낫습니다.
그리고 이것이 가 언제나 양측인 이유입니다. 178강 심화 3의 단측검정이 분산분석에는 없습니다.
심화 2. 웰치의 분산분석을 정리하세요.
문제 3에서 분산이 다르면 무너졌습니다. 178강의 웰치를 집단 여럿으로 늘린 것이 있습니다.
| 무엇이 바뀌는가 | 어떻게 |
|---|---|
| 집단 평균의 가중 | 분산이 작은 집단에 무게를 더 줍니다 |
| 분모 | 합동하지 않습니다 |
| 자유도 | 정수가 아닙니다 |
175강의 가중치와 같은 발상입니다. 정보를 많이 담은 관측에 무게를 더 주며, 거기서는 뽑힐 확률이었고 여기서는 정밀도입니다.
분산이 같아도 손해가 거의 없습니다. 그래서 178강 문제 2의 결론이 여기서도 그대로이며, 기본값을 웰치로 두는 것이 낫습니다.
심화 3. 크러스컬-월리스 검정을 정리하세요.
179강의 순위 검정을 집단 여럿으로 늘린 것입니다.
값 대신 순위로 같은 제곱합을 만듭니다. 집단 사이의 흩어짐을 재는 구조가 문제 2와 똑같습니다.
| 무엇을 얻는가 | 무엇을 잃는가 |
|---|---|
| 이상치에 강합니다 | 정규에서 조금 손해입니다 |
| 분포 모양에 안 걸립니다 | 모양이 같아야 합니다 |
오른쪽 아래가 179강 문제 3의 함정 그대로입니다. 분산이 다르면 크러스컬-월리스도 무너지며, 순위로 도망가도 같은 문제가 따라옵니다.
심화 4. 이원 분산분석을 정리하세요.
지금까지는 나누는 기준이 하나였습니다. 둘이면 제곱합이 더 쪼개집니다.
| 항 | 무엇을 묻는가 |
|---|---|
| SS_ | A의 수준끼리 다른가 |
| SS_ | B의 수준끼리 다른가 |
| SS_ | A의 효과가 B에 따라 달라지는가 |
셋째 줄이 교호작용이며 가장 흥미로운 항입니다. 약이 남녀에게 다르게 듣는지, 광고가 연령대마다 다르게 먹히는지가 전부 여기입니다.
칸마다 크기가 같으면 세 항이 서로 독립입니다. 다르면 서로 얽혀 어느 순서로 넣느냐에 따라 제곱합이 달라지며, 187강의 다중공선성과 같은 문제입니다.
186강에서 교호작용을 회귀로 다시 다룹니다. 더미변수의 곱으로 쓰면 같은 것이 됩니다.
심화 5. 반복측정 분산분석을 정리하세요.
178강 문제 3의 짝짓기를 여러 시점으로 늘린 것입니다.
| 무엇을 하는가 | 왜 |
|---|---|
| 사람마다의 차이를 따로 뺍니다 | 짝짓기의 이득을 얻습니다 |
| 오차 제곱합이 줄어듭니다 | 의 분모가 작아집니다 |
| 구형성을 가정합니다 | 시점 간 차이의 분산이 같아야 합니다 |
셋째 줄이 이 방법의 약점입니다. 시점이 가까울수록 상관이 높은 것이 보통인데, 구형성은 모든 짝의 차이가 같은 분산을 갖는다고 요구합니다.
깨지면 자유도를 줄여 보정합니다. 그리스 문자 엡실론을 곱해 자유도를 낮추는 방식이며, 178강 웰치가 자유도를 줄인 것과 같은 발상입니다.
요즘은 혼합효과 모형을 더 씁니다. 사람마다의 차이를 모수가 아니라 확률변수로 두는 방식이며, 결측이 있어도 버팁니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 범주형 결과 | 카이제곱 | 181강 |
| 여러 비교 | 보정 전반 | 182강 |
| 표본 설계 | 검정력 계산 | 183강 |
| 회귀 | 제곱합 분해와 R^ | 184강 |
넷째 줄이 이 강의의 진짜 자리입니다. 분산분석은 설명변수가 범주형인 회귀이며, 제곱합 분해가 그대로 의 정의가 됩니다.
문제 5의 에타제곱 이 그대로 입니다. 186강에서 더미변수를 배우면 이 강의를 회귀 한 줄로 다시 쓸 수 있게 됩니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 에프 통계량 | 두 평균제곱의 비입니다 | |
| 제곱합 | 편차의 제곱을 더한 것입니다 | |
| 평균제곱 | 제곱합을 자유도로 나눈 것입니다 | |
| 집단 수 | 나눈 집단의 개수입니다 | |
| 전체 크기 | 모든 관측의 수입니다 | |
| \eta^ | 에타제곱 | 집단이 설명하는 몫입니다 |
| \omega^ | 오메가제곱 | 편향을 고친 에타제곱입니다 |
| 사후 비교 | post hoc | 뒤에 어느 짝인지 봅니다 |
| 본페로니 | Bonferroni | 비교 수를 곱합니다 |
| 홀름 | Holm | 순서대로 줄여 가며 곱합니다 |
| 웰치의 분산분석 | Welch's ANOVA | 분산을 합치지 않습니다 |
| 크러스컬-월리스 | Kruskal-Wallis | 순위로 하는 분산분석입니다 |
| 교호작용 | interaction | 한 요인의 효과가 다른 요인에 따라 다릅니다 |
| 구형성 | sphericity | 시점 간 차이의 분산이 같습니다 |
다음은 181강 카이제곱 독립성 검정입니다. 여기까지가 결과가 수인 자료였습니다.
평균도 순위도 못 씁니다. 합격과 불합격, 클릭과 이탈, 세 가지 등급처럼 셀 수만 있는 자료가 실무에 아주 많습니다. 181강은 167강에서 만든 교차표로 돌아가 기대도수와 관측도수의 거리를 재는 법을 다루고, 그것이 왜 카이제곱 분포를 따르는지를 확인합니다.
import numpy as np
rng = np.random.default_rng(20260917)
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 gammaln(z):
g = [676.5203681218851, -1259.1392167224028, 771.32342877765313,
-176.61502916214059, 12.507343278686905, -0.13857109526572012,
9.9843695780195716e-6, 1.5056327351493116e-7]
if z < 0.5:
return np.log(np.pi / np.sin(np.pi * z)) - gammaln(1.0 - z)
z -= 1.0
x = 0.99999999999980993
for i, gi in enumerate(g):
x += gi / (z + i + 1.0)
t = z + 7.5
return 0.5 * np.log(2 * np.pi) + (z + 0.5) * np.log(t) - t + np.log(x)
def betacf(a, b, x):
c, d = 1.0, 1.0 - (a + b) * x / (a + 1.0)
d = 1.0 / (1e-300 if abs(d) < 1e-300 else d)
h = d
for m in range(1, 400):
num = m * (b - m) * x / ((a + 2 * m - 1) * (a + 2 * m))
d = 1.0 + num * d
c = 1.0 + num / c
d = 1.0 / (1e-300 if abs(d) < 1e-300 else d)
c = 1e-300 if abs(c) < 1e-300 else c
h *= d * c
num = -(a + m) * (a + b + m) * x / ((a + 2 * m) * (a + 2 * m + 1))
d = 1.0 + num * d
c = 1.0 + num / c
d = 1.0 / (1e-300 if abs(d) < 1e-300 else d)
c = 1e-300 if abs(c) < 1e-300 else c
de = d * c
h *= de
if abs(de - 1.0) < 1e-14:
break
return h
def betainc(a, b, x):
if x <= 0.0:
return 0.0
if x >= 1.0:
return 1.0
lb = gammaln(a) + gammaln(b) - gammaln(a + b)
if x < (a + 1.0) / (a + b + 2.0):
return np.exp(a * np.log(x) + b * np.log(1.0 - x) - lb) * betacf(a, b, x) / a
return 1.0 - np.exp(b * np.log(1.0 - x) + a * np.log(x) - lb) * betacf(b, a, 1.0 - x) / b
def f_sf(f, d1, d2):
if f <= 0.0:
return 1.0
return betainc(0.5 * d2, 0.5 * d1, d2 / (d2 + d1 * f))
def t_p2(t, df):
return betainc(0.5 * df, 0.5, df / (df + t * t))
def fcrit(d1, d2, alpha=0.05):
lo, hi = 0.0, 200.0
for _ in range(200):
mid = 0.5 * (lo + hi)
if f_sf(mid, d1, d2) > alpha:
lo = mid
else:
hi = mid
return 0.5 * (lo + hi)
def tcrit(df, alpha=0.05):
lo, hi = 0.0, 60.0
for _ in range(200):
mid = 0.5 * (lo + hi)
if t_p2(mid, df) > alpha:
lo = mid
else:
hi = mid
return 0.5 * (lo + hi)
# --- 문제 1: 짝을 여러 번 비교하면 안 되는 이유 --------------------------
print(" 집단이 셋이면 짝을 세 번 비교하면 될 것 같습니다")
print(" 179강 예고에서 그러면 안 된다고 했습니다. 실제로 재 봅니다")
R1, n1 = 40000, 15
print(" 모든 집단이 같은 분포에서 나옵니다. 참 차이는 전부 0 입니다")
print(" %s %s %s %s" % (pw("집단 수", 10), rw("짝의 수", 10),
rw("하나라도 유의할 비율", 24), rw("독립이면", 12)))
tc1 = tcrit(2 * n1 - 2)
for k in [2, 3, 4, 6, 10]:
G = rng.normal(0, 1, (R1, k, n1))
m = G.mean(2)
v = G.var(2, ddof=1)
any_hit = np.zeros(R1, dtype=bool)
for i in range(k):
for j in range(i + 1, k):
t = (m[:, i] - m[:, j]) / np.sqrt((v[:, i] + v[:, j]) / n1)
any_hit |= np.abs(t) > tc1
npair = k * (k - 1) // 2
print(" %s %10d %24.4f %12.4f"
% (pw("%d" % k, 10), npair, float(any_hit.mean()), 1.0 - 0.95 ** npair))
print(" 집단이 셋이면 0.05 를 겨냥했는데 실제로는 0.12 근처가 됩니다")
print(" 열이면 세 번 중 두 번꼴로 없는 차이를 찾습니다")
print(" 독립이라 가정한 값보다는 낮습니다. 짝끼리 같은 집단을 나눠 쓰기 때문입니다")
print(" 한 번에 묻는 물음으로 바꿔야 합니다")
print(" %s %s" % (pw("무엇을 묻는가", 26), rw("귀무가설", 30)))
for a, b in [("짝마다 따로", "이 두 집단의 평균이 같다"),
("한 번에", "모든 집단의 평균이 같다")]:
print(" %s %s" % (pw(a, 26), rw(b, 30)))
print(" 아래 물음에 답하는 것이 분산분석입니다")
# --- 문제 2: 분산으로 평균을 비교하기 ------------------------------------
print(" 평균을 비교하는데 이름이 분산분석입니다")
g1 = np.array([23.0, 25.0, 21.0, 24.0, 22.0])
g2 = np.array([28.0, 31.0, 27.0, 30.0, 29.0])
g3 = np.array([25.0, 26.0, 24.0, 27.0, 23.0])
gs = [g1, g2, g3]
N = sum(len(g) for g in gs)
k = len(gs)
grand = np.concatenate(gs).mean()
print(" 세 집단을 봅니다")
print(" %s %s %s %s" % (pw("집단", 8), rw("값", 26), rw("평균", 10), rw("크기", 8)))
for nm, g in zip(["A", "B", "C"], gs):
print(" %s %s %10.4f %8d"
% (pw(nm, 8), rw(" ".join("%g" % v for v in g), 26), float(g.mean()), len(g)))
print(" 전체 평균은 %.4f 입니다" % grand)
SSB = sum(len(g) * (g.mean() - grand) ** 2 for g in gs)
SSW = sum(((g - g.mean()) ** 2).sum() for g in gs)
SST = ((np.concatenate(gs) - grand) ** 2).sum()
print(" %s %s %s %s" % (pw("무엇의 흩어짐", 22), rw("제곱합", 12),
rw("자유도", 10), rw("평균제곱", 12)))
print(" %s %12.4f %10d %12.4f"
% (pw("집단 사이", 22), SSB, k - 1, SSB / (k - 1)))
print(" %s %12.4f %10d %12.4f"
% (pw("집단 안", 22), SSW, N - k, SSW / (N - k)))
print(" %s %12.4f %10d" % (pw("전체", 22), SST, N - 1))
print(" 집단 사이와 집단 안을 더하면 전체가 됩니다. %.4f + %.4f = %.4f"
% (SSB, SSW, SSB + SSW))
F = (SSB / (k - 1)) / (SSW / (N - k))
print(" F = 집단 사이의 평균제곱 / 집단 안의 평균제곱 = %.4f 입니다" % F)
print(" 자유도는 %d 와 %d 이고 p 값은 %.6f 입니다" % (k - 1, N - k, f_sf(F, k - 1, N - k)))
print(" 기각에 필요한 F 는 %.4f 입니다" % fcrit(k - 1, N - k))
print(" 평균 차이가 커지면 분자만 커집니다")
print(" %s %s %s %s" % (pw("B 를 얼마나 올리는가", 24), rw("집단 사이", 14),
rw("집단 안", 12), rw("F", 10)))
for shift in [0.0, 2.0, 5.0, 10.0]:
hs = [g1, g2 - 29.0 + 25.0 + shift, g3]
gm = np.concatenate(hs).mean()
b = sum(len(g) * (g.mean() - gm) ** 2 for g in hs)
w = sum(((g - g.mean()) ** 2).sum() for g in hs)
print(" %s %14.4f %12.4f %10.4f"
% (pw("%.1f" % shift, 24), b, w, (b / (k - 1)) / (w / (N - k))))
print(" 집단 안은 안 변합니다. 집단을 통째로 옮겨도 안쪽 흩어짐은 그대로이기 때문입니다")
print(" 그래서 F 가 평균 차이만 잡아냅니다. 이것이 분산으로 평균을 비교하는 방식입니다")
# --- 문제 3: 오류율이 정말 지켜지는가 ------------------------------------
print(" 분산분석이 실제로 0.05 를 지키는지 확인합니다")
R3, n3 = 40000, 12
print(" %s %s %s %s" % (pw("집단 수", 10), rw("분산분석 오류율", 18),
rw("짝 비교 오류율", 18), rw("목표", 10)))
for kk in [3, 4, 6]:
G = rng.normal(0, 1, (R3, kk, n3))
m = G.mean(2)
gm = G.reshape(R3, -1).mean(1)
b = n3 * ((m - gm[:, None]) ** 2).sum(1)
w = ((G - m[:, :, None]) ** 2).sum((1, 2))
Fv = (b / (kk - 1)) / (w / (kk * n3 - kk))
fc = fcrit(kk - 1, kk * n3 - kk)
tc = tcrit(2 * n3 - 2)
v = G.var(2, ddof=1)
hit = np.zeros(R3, dtype=bool)
for i in range(kk):
for j in range(i + 1, kk):
t = (m[:, i] - m[:, j]) / np.sqrt((v[:, i] + v[:, j]) / n3)
hit |= np.abs(t) > tc
print(" %s %18.4f %18.4f %10.2f"
% (pw("%d" % kk, 10), float((Fv > fc).mean()), float(hit.mean()), 0.05))
print(" 분산분석은 집단이 몇 개든 0.05 를 지킵니다")
print(" 짝 비교는 집단이 늘수록 나빠집니다. 이것이 한 번에 묻는 이유입니다")
print(" 분산분석도 가정이 있습니다")
print(" %s %s" % (pw("가정", 22), rw("178강과 179강의 어느 자리인가", 34)))
for a, b in [("각 집단이 정규", "179강 문제 1"),
("모든 집단의 분산이 같음", "178강 문제 2"),
("관측이 서로 독립", "173강 문제 3의 군집")]:
print(" %s %s" % (pw(a, 22), rw(b, 34)))
print(" 둘째 줄이 웰치로 풀렸던 문제입니다. 여기서 다시 나옵니다")
print(" 분산이 다르면 F 검정이 무너집니다")
R4, n4 = 20000, 10
print(" 집단 셋의 평균은 모두 같고 표준편차만 다르게 둡니다")
print(" %s %s %s %s" % (pw("세 집단의 표준편차", 24), rw("크기 배치", 16),
rw("F 검정 오류율", 16), rw("목표", 10)))
cases = [((1.0, 1.0, 1.0), (10, 10, 10)), ((1.0, 1.0, 3.0), (10, 10, 10)),
((3.0, 1.0, 1.0), (5, 15, 15)), ((1.0, 1.0, 3.0), (5, 15, 15))]
for sds, ns in cases:
Ntot = sum(ns)
b = np.zeros(R4)
w = np.zeros(R4)
ms = []
tot = np.zeros(R4)
for sd, nn in zip(sds, ns):
G = rng.normal(0.0, sd, (R4, nn))
ms.append((G.mean(1), nn, G))
tot += G.sum(1)
gm = tot / Ntot
for mm, nn, G in ms:
b += nn * (mm - gm) ** 2
w += ((G - mm[:, None]) ** 2).sum(1)
Fv = (b / 2.0) / (w / (Ntot - 3))
fc = fcrit(2, Ntot - 3)
print(" %s %s %16.4f %10.2f"
% (pw("%.0f %.0f %.0f" % sds, 24), rw("%d %d %d" % ns, 16),
float((Fv > fc).mean()), 0.05))
print(" 크기가 같아도 분산이 세 배 다르면 0.0762 로 목표를 넘습니다")
print(" 두 집단일 때 크기가 같으면 버텼던 것과 다릅니다. 집단이 늘면 보호가 약해집니다")
print(" 크기까지 어긋나면 크게 무너집니다. 작은 집단의 분산이 크면 0.2421 이 됩니다")
print(" 반대로 큰 집단의 분산이 크면 0.0377 로 너무 조심스러워집니다")
print(" 분산이 다를 이유가 있으면 웰치의 분산분석을 씁니다")
# --- 문제 4: 어느 집단이 다른가 -----------------------------------------
print(" F 가 유의해도 어느 집단이 다른지는 모릅니다")
print(" 문제 2 의 세 집단에서 짝마다 봅니다")
print(" %s %s %s %s" % (pw("짝", 10), rw("평균 차이", 12), rw("t", 10),
rw("보정 없는 p", 14)))
pairs = [("A vs B", g1, g2), ("A vs C", g1, g3), ("B vs C", g2, g3)]
MSW = SSW / (N - k)
raw = []
for nm, x, y in pairs:
d = float(x.mean() - y.mean())
t = d / np.sqrt(MSW * (1.0 / len(x) + 1.0 / len(y)))
p = t_p2(t, N - k)
raw.append((nm, d, t, p))
print(" %s %12.4f %10.4f %14.6f" % (pw(nm, 10), d, t, p))
print(" 셋을 각각 0.05 로 보면 문제 1 의 문제가 그대로 돌아옵니다")
print(" 보정 방법마다 기준이 다릅니다")
print(" %s %s %s %s" % (pw("짝", 10), rw("보정 없음", 12), rw("본페로니", 12),
rw("홀름", 12)))
ps = sorted([(p, nm) for nm, d, t, p in raw])
holm = {}
run = 0.0
for i, (p, nm) in enumerate(ps):
val = min(1.0, p * (3 - i))
run = max(run, val)
holm[nm] = run
for nm, d, t, p in raw:
print(" %s %12.6f %12.6f %12.6f"
% (pw(nm, 10), p, min(1.0, p * 3), holm[nm]))
print(" 본페로니는 전부 3 을 곱합니다. 홀름은 작은 것부터 3, 2, 1 을 곱합니다")
print(" 홀름이 언제나 본페로니보다 작거나 같아 더 자주 기각합니다")
print(" 둘 다 전체 오류율을 0.05 아래로 지킵니다")
print(" 실제로 지켜지는지 확인합니다")
R5, n5, k5 = 20000, 12, 3
G = rng.normal(0, 1, (R5, k5, n5))
m5 = G.mean(2)
w5 = ((G - m5[:, :, None]) ** 2).sum((1, 2))
MS5 = w5 / (k5 * n5 - k5)
pv = []
for i in range(k5):
for j in range(i + 1, k5):
t = (m5[:, i] - m5[:, j]) / np.sqrt(MS5 * (2.0 / n5))
pv.append(np.array([t_p2(x, k5 * n5 - k5) for x in t]))
P = np.stack(pv, axis=1)
Ps = np.sort(P, axis=1)
print(" 집단 셋이 모두 같은 분포이며 2 만 번 되풀이했습니다")
print(" %s %s %s" % (pw("무엇으로", 20), rw("하나라도 유의할 비율", 24), rw("목표", 10)))
print(" %s %24.4f %10.2f" % (pw("보정 없음", 20), float((P < 0.05).any(1).mean()), 0.05))
print(" %s %24.4f %10.2f"
% (pw("본페로니", 20), float((P * 3 < 0.05).any(1).mean()), 0.05))
hm = np.maximum.accumulate(np.minimum(1.0, Ps * np.array([3, 2, 1])), axis=1)
print(" %s %24.4f %10.2f" % (pw("홀름", 20), float((hm < 0.05).any(1).mean()), 0.05))
print(" 보정 없이는 목표를 크게 넘고 두 보정은 목표 아래로 들어옵니다")
print(" 두 보정의 값이 정확히 같습니다. 하나라도 기각하는가는")
print(" 가장 작은 p 값이 0.05/3 을 넘는지로만 정해지고 그 기준이 둘 다 같기 때문입니다")
print(" 홀름의 이득은 첫 기각 뒤에 나타납니다. 위 표의 B vs C 가 0.005285 대 0.003523 입니다")
# --- 문제 5: 효과 크기와 설계 -------------------------------------------
print(" F 가 크다는 것이 차이가 크다는 뜻은 아닙니다")
print(" 178강 문제 4 와 같은 이야기가 여기서도 나옵니다")
print(" %s %s %s %s %s" % (pw("집단당 크기", 12), rw("평균의 참 차이", 16),
rw("평균 F", 12), rw("유의 비율", 12), rw("에타제곱", 12)))
for nn in [5, 20, 80, 320]:
A = rng.normal(0.0, 1.0, (4000, nn))
B = rng.normal(0.3, 1.0, (4000, nn))
C = rng.normal(0.6, 1.0, (4000, nn))
Gs = np.stack([A, B, C], axis=1)
mm = Gs.mean(2)
gm = Gs.reshape(4000, -1).mean(1)
b = nn * ((mm - gm[:, None]) ** 2).sum(1)
w = ((Gs - mm[:, :, None]) ** 2).sum((1, 2))
Fv = (b / 2.0) / (w / (3 * nn - 3))
eta = b / (b + w)
print(" %s %16.1f %12.4f %12.4f %12.4f"
% (pw("%d" % nn, 12), 0.6, float(Fv.mean()), float((Fv > fcrit(2, 3 * nn - 3)).mean()),
float(eta.mean())))
print(" 참 차이는 그대로인데 F 와 유의 비율만 오릅니다")
print(" 에타제곱은 크기가 커질수록 참값으로 내려갑니다. 작은 표본에서 부풀어 있습니다")
print(" 효과 크기를 정리합니다")
eta2 = SSB / SST
print(" 문제 2 의 자료에서 에타제곱은 %.4f 입니다" % eta2)
om2 = (SSB - (k - 1) * MSW) / (SST + MSW)
print(" 편향을 고친 오메가제곱은 %.4f 입니다" % om2)
print(" %s %s" % (pw("에타제곱의 크기", 18), rw("흔히 부르는 말", 18)))
for v, nm in [(0.01, "작다"), (0.06, "중간"), (0.14, "크다")]:
print(" %s %s" % (pw("%.2f" % v, 18), rw(nm, 18)))
print(" 집단을 몇 개로 나눌지도 설계입니다")
print(" 같은 총 표본 120 명을 몇 집단으로 나누는지에 따라 검출력이 달라집니다")
print(" %s %s %s %s" % (pw("집단 수", 10), rw("집단당 크기", 14),
rw("가장 먼 두 집단의 차이", 24), rw("유의 비율", 12)))
for kk in [2, 3, 4, 6]:
nn = 120 // kk
sh = np.linspace(0.0, 0.8, kk)
Gs = np.stack([rng.normal(s, 1.0, (8000, nn)) for s in sh], axis=1)
mm = Gs.mean(2)
gm = Gs.reshape(8000, -1).mean(1)
b = nn * ((mm - gm[:, None]) ** 2).sum(1)
w = ((Gs - mm[:, :, None]) ** 2).sum((1, 2))
Fv = (b / (kk - 1)) / (w / (kk * nn - kk))
print(" %s %14d %24.1f %12.4f"
% (pw("%d" % kk, 10), nn, 0.8, float((Fv > fcrit(kk - 1, kk * nn - kk)).mean())))
print(" 양 끝의 차이를 0.8 로 고정했는데 집단을 잘게 나눌수록 검출력이 떨어집니다")
print(" 가운데 집단들이 차이를 희석하고 집단당 크기도 줄기 때문입니다")
print(" 나눌 수 있다고 나누는 것이 아니라 물음이 나눌 수를 정합니다")
# 집단이 셋이면 짝을 세 번 비교하면 될 것 같습니다
# 179강 예고에서 그러면 안 된다고 했습니다. 실제로 재 봅니다
# 모든 집단이 같은 분포에서 나옵니다. 참 차이는 전부 0 입니다
# 집단 수 짝의 수 하나라도 유의할 비율 독립이면
# 2 1 0.0496 0.0500
# 3 3 0.1212 0.1426
# 4 6 0.2053 0.2649
# 6 15 0.3676 0.5367
# 10 45 0.6284 0.9006
# 집단이 셋이면 0.05 를 겨냥했는데 실제로는 0.12 근처가 됩니다
# 열이면 세 번 중 두 번꼴로 없는 차이를 찾습니다
# 독립이라 가정한 값보다는 낮습니다. 짝끼리 같은 집단을 나눠 쓰기 때문입니다
# 한 번에 묻는 물음으로 바꿔야 합니다
# 무엇을 묻는가 귀무가설
# 짝마다 따로 이 두 집단의 평균이 같다
# 한 번에 모든 집단의 평균이 같다
# 아래 물음에 답하는 것이 분산분석입니다
# 평균을 비교하는데 이름이 분산분석입니다
# 세 집단을 봅니다
# 집단 값 평균 크기
# A 23 25 21 24 22 23.0000 5
# B 28 31 27 30 29 29.0000 5
# C 25 26 24 27 23 25.0000 5
# 전체 평균은 25.6667 입니다
# 무엇의 흩어짐 제곱합 자유도 평균제곱
# 집단 사이 93.3333 2 46.6667
# 집단 안 30.0000 12 2.5000
# 전체 123.3333 14
# 집단 사이와 집단 안을 더하면 전체가 됩니다. 93.3333 + 30.0000 = 123.3333
# F = 집단 사이의 평균제곱 / 집단 안의 평균제곱 = 18.6667 입니다
# 자유도는 2 와 12 이고 p 값은 0.000207 입니다
# 기각에 필요한 F 는 3.8853 입니다
# 평균 차이가 커지면 분자만 커집니다
# B 를 얼마나 올리는가 집단 사이 집단 안 F
# 0.0 13.3333 30.0000 2.6667
# 2.0 40.0000 30.0000 8.0000
# 5.0 130.0000 30.0000 26.0000
# 10.0 413.3333 30.0000 82.6667
# 집단 안은 안 변합니다. 집단을 통째로 옮겨도 안쪽 흩어짐은 그대로이기 때문입니다
# 그래서 F 가 평균 차이만 잡아냅니다. 이것이 분산으로 평균을 비교하는 방식입니다
# 분산분석이 실제로 0.05 를 지키는지 확인합니다
# 집단 수 분산분석 오류율 짝 비교 오류율 목표
# 3 0.0499 0.1229 0.05
# 4 0.0508 0.2016 0.05
# 6 0.0498 0.3617 0.05
# 분산분석은 집단이 몇 개든 0.05 를 지킵니다
# 짝 비교는 집단이 늘수록 나빠집니다. 이것이 한 번에 묻는 이유입니다
# 분산분석도 가정이 있습니다
# 가정 178강과 179강의 어느 자리인가
# 각 집단이 정규 179강 문제 1
# 모든 집단의 분산이 같음 178강 문제 2
# 관측이 서로 독립 173강 문제 3의 군집
# 둘째 줄이 웰치로 풀렸던 문제입니다. 여기서 다시 나옵니다
# 분산이 다르면 F 검정이 무너집니다
# 집단 셋의 평균은 모두 같고 표준편차만 다르게 둡니다
# 세 집단의 표준편차 크기 배치 F 검정 오류율 목표
# 1 1 1 10 10 10 0.0486 0.05
# 1 1 3 10 10 10 0.0762 0.05
# 3 1 1 5 15 15 0.2421 0.05
# 1 1 3 5 15 15 0.0377 0.05
# 크기가 같아도 분산이 세 배 다르면 0.0762 로 목표를 넘습니다
# 두 집단일 때 크기가 같으면 버텼던 것과 다릅니다. 집단이 늘면 보호가 약해집니다
# 크기까지 어긋나면 크게 무너집니다. 작은 집단의 분산이 크면 0.2421 이 됩니다
# 반대로 큰 집단의 분산이 크면 0.0377 로 너무 조심스러워집니다
# 분산이 다를 이유가 있으면 웰치의 분산분석을 씁니다
# F 가 유의해도 어느 집단이 다른지는 모릅니다
# 문제 2 의 세 집단에서 짝마다 봅니다
# 짝 평균 차이 t 보정 없는 p
# A vs B -6.0000 -6.0000 0.000062
# A vs C -2.0000 -2.0000 0.068655
# B vs C 4.0000 4.0000 0.001762
# 셋을 각각 0.05 로 보면 문제 1 의 문제가 그대로 돌아옵니다
# 보정 방법마다 기준이 다릅니다
# 짝 보정 없음 본페로니 홀름
# A vs B 0.000062 0.000187 0.000187
# A vs C 0.068655 0.205965 0.068655
# B vs C 0.001762 0.005285 0.003523
# 본페로니는 전부 3 을 곱합니다. 홀름은 작은 것부터 3, 2, 1 을 곱합니다
# 홀름이 언제나 본페로니보다 작거나 같아 더 자주 기각합니다
# 둘 다 전체 오류율을 0.05 아래로 지킵니다
# 실제로 지켜지는지 확인합니다
# 집단 셋이 모두 같은 분포이며 2 만 번 되풀이했습니다
# 무엇으로 하나라도 유의할 비율 목표
# 보정 없음 0.1201 0.05
# 본페로니 0.0442 0.05
# 홀름 0.0442 0.05
# 보정 없이는 목표를 크게 넘고 두 보정은 목표 아래로 들어옵니다
# 두 보정의 값이 정확히 같습니다. 하나라도 기각하는가는
# 가장 작은 p 값이 0.05/3 을 넘는지로만 정해지고 그 기준이 둘 다 같기 때문입니다
# 홀름의 이득은 첫 기각 뒤에 나타납니다. 위 표의 B vs C 가 0.005285 대 0.003523 입니다
# F 가 크다는 것이 차이가 크다는 뜻은 아닙니다
# 178강 문제 4 와 같은 이야기가 여기서도 나옵니다
# 집단당 크기 평균의 참 차이 평균 F 유의 비율 에타제곱
# 5 0.6 1.6816 0.1040 0.1848
# 20 0.6 2.9424 0.3653 0.0888
# 80 0.6 8.2622 0.9350 0.0643
# 320 0.6 29.9748 1.0000 0.0587
# 참 차이는 그대로인데 F 와 유의 비율만 오릅니다
# 에타제곱은 크기가 커질수록 참값으로 내려갑니다. 작은 표본에서 부풀어 있습니다
# 효과 크기를 정리합니다
# 문제 2 의 자료에서 에타제곱은 0.7568 입니다
# 편향을 고친 오메가제곱은 0.7020 입니다
# 에타제곱의 크기 흔히 부르는 말
# 0.01 작다
# 0.06 중간
# 0.14 크다
# 집단을 몇 개로 나눌지도 설계입니다
# 같은 총 표본 120 명을 몇 집단으로 나누는지에 따라 검출력이 달라집니다
# 집단 수 집단당 크기 가장 먼 두 집단의 차이 유의 비율
# 2 60 0.8 0.9922
# 3 40 0.8 0.8952
# 4 30 0.8 0.7752
# 6 20 0.8 0.5897
# 양 끝의 차이를 0.8 로 고정했는데 집단을 잘게 나눌수록 검출력이 떨어집니다
# 가운데 집단들이 차이를 희석하고 집단당 크기도 줄기 때문입니다
# 나눌 수 있다고 나누는 것이 아니라 물음이 나눌 수를 정합니다