177강까지가 자료를 믿을 수 있는지를 물었습니다. 이제 그 자료로 답을 만듭니다.
가장 많이 묻는 물음이고, 가장 많이 틀리는 물음입니다. 평균이 다르게 나오는 것은 언제나 그렇기 때문입니다. 같은 모집단에서 두 번 뽑아도 평균은 다릅니다.
그래서 물음을 바꿔야 합니다. "다릅니까"가 아니라 **"이만큼 다른 것이 우연으로 설명됩니까"**를 묻습니다.
| 무엇을 보는가 | 왜 |
|---|---|
| 차이의 크기 | 실제로 얼마나 다른지 |
| 흩어짐 | 우연이 만들 수 있는 폭 |
| 표본 크기 | 우연의 폭이 얼마나 좁은지 |
**셋을 한 숫자로 묶은 것이 **입니다. 152강에서 가설검정의 뼈대를 세웠는데, 이 강의는 그것을 실제 자료에 쓰는 자리입니다.
그리고 이 강의의 절반은 가 말하지 않는 것에 대한 것입니다. 유의하다는 말이 크다는 뜻이 아니고, 유의하지 않다는 말이 같다는 뜻이 아닙니다.
문제. 두 집단의 평균을 견줍니다.
(1) 통계량과 값을 구하세요.
(2) 같은 차이라도 판단이 달라지는 경우를 만드세요.
생각의 실마리. 평균 차이가 이라는 말만으로는 아무것도 알 수 없습니다. 이 큰지 작은지 잴 자가 필요하며, 그 자가 우연이 만들 수 있는 폭입니다.
풀이. (1) 두 집단을 봅니다.
| 집단 | 크기 | 평균 | 표준편차 |
|---|---|---|---|
| A | |||
| B |
평균 차이는 입니다. 이것을 차이의 표준오차로 나눕니다.
는 이고 자유도는 이며 양측 값은 입니다.
가 차이를 표준오차 단위로 잰 것입니다. 는 우연이 만들 폭의 거의 네 배이므로, 우연으로 보기 어렵습니다.
(2) 같은 차이라도 나머지가 바뀌면 판단이 뒤집힙니다.
| 상황 | 평균 차이 | 표준편차 | 값 | |
|---|---|---|---|---|
| 기준 | ||||
| 차이가 절반 | ||||
| 흩어짐이 두 배 | ||||
| 크기가 네 배 |
둘째 줄과 셋째 줄의 가 정확히 같습니다. 차이를 절반으로 줄이는 것과 흩어짐을 두 배로 늘리는 것이 에게는 같은 일입니다.
넷째 줄에서 크기를 네 배로 하면 가 두 배가 됩니다. 174강의 그대로이며, 값은 소수 여섯째 자리 아래로 내려가 으로 반올림됩니다.
이 문제에서 배우는 것. 차이의 크기만 보고하는 표는 아무 정보가 없습니다. "A가 B보다 높습니다"는 흩어짐과 표본 크기를 모르면 판단할 수 없으며, 실무 보고서가 자주 이 상태로 멈춥니다. 반대로 나 만 보고하는 것도 모자란데, 셋을 한 숫자로 뭉갠 뒤에는 되돌릴 수 없기 때문입니다. 문제 5에서 이 지점을 다시 다룹니다.
바로 확인 1.
확인 1-1. 통계량을 말로 쓰세요.
답. 평균 차이를 차이의 표준오차로 나눈 값입니다.
확인 1-2. 검산에서 문제 1의 자료의 와 값을 쓰세요.
답. 이고 값은 입니다.
확인 1-3. 검산에서 가 같아진 두 줄과 그 값을 쓰세요.
답. 차이가 절반인 경우와 흩어짐이 두 배인 경우이며 둘 다 입니다.
문제. 합동 의 가정을 검사합니다.
(1) 등분산이 깨질 때의 실제 오류율을 모의로 재세요.
(2) 웰치 검정의 자유도를 확인하세요.
생각의 실마리. 문제 1의 는 두 집단의 분산이 같다고 보고 합친 것입니다. 다르면 무엇이 잘못되는지 재 봅니다.
풀이. (1) 참 차이가 인 자료를 만들어 보다 자주 기각하는지 셉니다.
| 두 집단의 크기와 분산 | 합동 의 오류율 | 웰치 의 오류율 | 목표 | 누가 맞는가 |
|---|---|---|---|---|
| 같은 크기 같은 분산 | 둘 다 | |||
| 같은 크기 다른 분산 | 둘 다 | |||
| 작은 쪽이 분산 큼 | 웰치 | |||
| 큰 쪽이 분산 큼 | 웰치 |
둘째 줄이 중요합니다. 크기가 같으면 분산이 세 배 달라도 합동 가 버팁니다. 등분산 검정을 먼저 하라는 조언이 널리 퍼져 있는데, 크기가 같으면 필요가 없습니다.
셋째 줄에서 오류율이 입니다. 목표의 다섯 배이며, 없는 차이를 다섯 번에 한 번 넘게 있다고 말합니다.
넷째 줄은 반대 방향으로 틀립니다. 오류율이 로 너무 조심스러워 있는 차이도 못 잡습니다.
웰치 는 네 경우 모두 목표에 가깝습니다. 그래서 기본값을 웰치로 둡니다.
(2) 웰치는 분산을 합치지 않고 따로 씁니다.
이고 이며 분산이 다른 자료에서 재 봅니다.
| 무엇으로 | 자유도 | 양측 값 |
|---|---|---|
| 합동 | ||
| 웰치 |
자유도는 에서 으로 조금 줄었을 뿐인데 값이 네 배 가까이 다릅니다.
차이는 자유도가 아니라 분모에서 옵니다. 합동은 큰 집단의 큰 분산을 작은 집단에도 섞어 작은 집단의 평균까지 불안정하게 봅니다. 위 표의 넷째 줄과 같은 상황이며, 합동 가 너무 조심스러워 기각을 못 합니다.
이 문제에서 배우는 것. 가정을 먼저 검사하고 그 결과로 방법을 고르는 절차가 오히려 나쁩니다. 등분산 검정을 하고 통과하면 합동, 실패하면 웰치를 쓰는 두 단계 절차는 첫 단계의 오류가 둘째 단계로 새어 들어가 전체 오류율이 를 넘습니다. 웰치는 분산이 같아도 거의 손해가 없으므로, 검사하지 말고 처음부터 웰치를 쓰는 것이 간단하고 정확합니다. 이 원리는 뒤에서도 되풀이되는데, 선택을 자료로 하면 그 선택의 불확실성도 세야 합니다.
바로 확인 2.
확인 2-1. 검산에서 합동 의 오류율이 가장 나빴던 경우와 값을 쓰세요.
답. 작은 쪽의 분산이 큰 경우이며 로 목표의 다섯 배입니다.
확인 2-2. 크기가 같을 때 등분산 검정이 필요 없는 이유를 검산 값과 함께 쓰세요.
답. 분산이 세 배 달라도 오류율이 으로 목표에 가깝기 때문입니다.
확인 2-3. 검산에서 합동과 웰치의 값을 쓰고 왜 다른지 쓰세요.
답. 과 이며 합동이 큰 집단의 분산을 작은 집단에 섞기 때문입니다.
문제. 같은 대상을 두 번 잰 자료를 다룹니다.
(1) 짝을 무시할 때와 지을 때를 비교하세요.
(2) 짝이 없는데 짝지으면 어떻게 되는지 확인하세요.
생각의 실마리. 같은 사람을 전후로 재면 두 값이 서로 얽혀 있습니다. 사람마다의 차이가 두 값에 똑같이 들어 있으므로, 빼면 사라집니다.
풀이. (1) 참 효과가 이고 사람마다의 차이가 표준편차 인 자료입니다.
| 어떻게 보는가 | 자유도 | 양측 값 | |
|---|---|---|---|
| 따로 뽑은 것처럼 | |||
| 짝지어서 |
같은 자료인데 값이 과 입니다. 하나는 아무것도 못 찾고 하나는 강한 증거를 찾습니다.
이유는 분모에 있습니다.
| 무엇의 흩어짐인가 | 표준편차 |
|---|---|
| 각 관측 | |
| 사람 안의 차이 |
사람마다의 차이 가 뺄셈에서 통째로 사라집니다. 남는 것은 측정의 잡음뿐이라 흩어짐이 에서 로 줄고, 분모가 작아진 만큼 같은 효과가 또렷해집니다.
마지막 항이 짝짓기의 이득 전부입니다. 두 값의 상관이 높을수록 많이 빠집니다.
(2) 그러면 언제나 짝지으면 좋은지 확인합니다. 참 효과 을 두고 만 번씩 되풀이했습니다.
| 자료의 구조 | 따로 뽑은 것처럼 | 짝지어서 | 어느 쪽이 나은가 |
|---|---|---|---|
| 같은 사람을 전후로 | 짝지어서 | ||
| 서로 다른 사람 | 비슷 |
첫째 줄에서 검출력이 과 로 갈립니다. 짝이 있는데 무시하면 참 효과를 한 번도 못 잡습니다.
둘째 줄의 두 값은 사실상 같습니다. 짝이 없으면 뺄셈에서 사라질 것이 없으므로 흩어짐이 그대로이고, 손해는 자유도에서만 옵니다. 그 손해가 언제 커지는지 따로 봅니다.
| 집단당 크기 | 기각에 필요한 따로 | 짝지어서 | 검출력 따로 | 검출력 짝 |
|---|---|---|---|---|
자유도가 에서 로 절반이 되면 기각에 필요한 가 오릅니다. 크기가 면 에서 로 올라 검출력이 에서 로 떨어지고, 크기가 이면 차이가 거의 없습니다.
짝짓기는 설계에서 정하는 것이지 분석에서 고르는 것이 아닙니다.
이 문제에서 배우는 것. 자료의 구조를 잘못 읽으면 방법이 아무리 정확해도 답이 틀립니다. 첫째 줄의 과 가 그 폭이며, 이것은 계산 실수가 아니라 자료가 어떻게 만들어졌는지를 놓친 결과입니다. 177강에서 "이 행이 어떻게 생겼는가"를 첫 질문으로 두라고 했는데, 그 질문의 답이 어떤 검정을 쓸지까지 정합니다. 그리고 짝짓기의 이득이 상관에서 오므로, 전후 측정 간격이 길어 상관이 낮아지면 이득도 줄어듭니다.
바로 확인 3.
확인 3-1. 짝짓기가 무엇을 없애는지 쓰세요.
답. 대상마다 고정된 차이를 뺄셈에서 없앱니다.
확인 3-2. 검산에서 짝을 무시했을 때와 지었을 때의 값을 쓰세요.
답. 과 입니다.
확인 3-3. 짝이 없는데 짝지으면 무엇이 손해인지 검산 값과 함께 쓰세요.
답. 자유도가 절반이 되어 크기 에서 검출력이 에서 로 떨어집니다.
문제. 값의 뜻을 확인합니다.
(1) 흔한 오해를 정리하세요.
(2) 효과가 없을 때의 값 분포를 확인하세요.
(3) 표본 크기와 유의성의 관계를 확인하세요.
생각의 실마리. 값은 귀무가설을 참이라고 두고 계산한 확률입니다. 조건이 어느 쪽에 붙어 있는지가 오해의 전부입니다.
풀이. (1) 이 뜻하는 것을 가릅니다.
| 이 뜻하는 것 | 맞는가 |
|---|---|
| 귀무가설이 참일 확률이 | 아니오 |
| 대립가설이 참일 확률이 | 아니오 |
| 차이가 만큼 크다 | 아니오 |
| 귀무가설 아래에서 이만한 차이를 볼 확률 | 예 |
| 같은 실험을 하면 퍼센트 재현된다 | 아니오 |
조건의 방향이 반대입니다. 124강의 조건부확률에서 와 가 다르다고 한 것이 여기서 가장 비싸게 나타납니다.
(2) 효과가 정말 인 자료에서 값을 만 번 구했습니다.
| 값 구간 | 들어간 비율 | 기대 |
|---|---|---|
| ~ | ||
| ~ | ||
| ~ | ||
| ~ | ||
| ~ |
고른 분포입니다. 그래서 아래가 나올 확률이 정확히 이며, 효과가 없어도 스무 번에 한 번은 유의하게 나옵니다.
값이 작다는 것이 특별한 사건이 아닙니다. 여러 번 재면 반드시 나옵니다. 182강의 다중비교가 여기서 출발합니다.
같은 자료를 자라는 대로 여러 번 들여다봐도 같은 일이 일어납니다. 효과가 인 자료를 씩 늘려 가며 확인하고 유의하면 멈추는 방식입니다.
| 몇 번 들여다보는가 | 실제 오류율 | 목표 |
|---|---|---|
멈추는 규칙이 검정의 일부입니다. 심화 4에서 다시 다룹니다.
(3) 효과의 크기를 로 고정하고 표본만 늘립니다.
| 표본 크기 | 참 효과 | 평균 | 가 아래일 비율 |
|---|---|---|---|
효과는 처음부터 끝까지 인데 유의해질 확률만 에서 으로 오릅니다.
그래서 유의하다는 말이 크다는 뜻이 아닙니다. 충분히 크게 모으면 아무리 작은 차이도 유의해집니다. 177강 심화 4에서 큰 자료의 신뢰구간이 좁다는 것이 정확하다는 뜻이 아니라 정밀하다는 뜻이라고 했는데, 같은 이야기의 검정판입니다.
이 문제에서 배우는 것. 값은 자료와 가설에 대한 진술이 아니라 자료와 표본 크기에 대한 진술입니다. 그래서 값만 보고하는 논문과 대시보드가 위험합니다. 표본이 만인 A/B 테스트에서 은 차이가 있다는 것 말고 아무것도 말하지 않으며, 그 차이가 반올림 오차만 한 것일 수도 있습니다. 반대로 표본이 작으면 진짜 큰 효과도 유의하지 않게 나오는데, 이것은 효과가 없다는 뜻이 아니라 잴 힘이 없었다는 뜻입니다. 183강이 그 힘을 미리 계산하는 법을 다룹니다.
바로 확인 4.
확인 4-1. 값의 정의를 조건의 방향을 밝혀 쓰세요.
답. 귀무가설이 참일 때 이만한 자료를 볼 확률이며 반대 방향이 아닙니다.
확인 4-2. 검산에서 효과가 일 때 값의 분포를 쓰세요.
답. 다섯 구간에 각각 가까이 들어가는 고른 분포입니다.
확인 4-3. 검산에서 효과가 일 때 표본 과 의 유의 비율을 쓰세요.
답. 와 이며 효과는 그대로입니다.
문제. 유의성 말고 크기를 봅니다.
(1) 효과 크기를 정의하고 표본 크기와의 관계를 확인하세요.
(2) 신뢰구간이 무엇을 더 말하는지 정리하세요.
생각의 실마리. 문제 4에서 가 표본 크기에 끌려다녔습니다. 표본 크기에 안 끌려다니는 숫자가 필요합니다.
풀이. (1) 차이를 표준편차 단위로 잽니다.
문제 1의 자료에서 는 이고 는 입니다.
| 의 크기 | 흔히 부르는 말 |
|---|---|
| 작다 | |
| 중간 | |
| 크다 | |
| 아주 크다 |
참 효과 인 자료에서 표본만 늘려 봅니다.
| 표본 크기 | 의 평균 | 의 평균 | 를 로 | 헤지스 보정 뒤 |
|---|---|---|---|---|
는 에서 로 여덟 배가 되는데 는 에 머뭅니다.
작은 표본에서 가 조금 부풀어 있습니다. 크기 에서 인데, 가 참 표준편차를 조금 작게 잡기 때문입니다. 헤지스 보정이 그것을 되돌립니다.
보정 뒤 로 참값에 붙습니다. 표본이 을 넘으면 보정의 효과가 거의 없습니다.
(2) 그런데 하나도 부족합니다. 추정에 딸린 불확실성이 빠져 있습니다.
| 결과 | 차이의 추정 | 퍼센트 구간 | 무엇을 알 수 있나 |
|---|---|---|---|
| 유의, 좁음 | 크고 정밀합니다 | ||
| 유의, 넓음 | 방향만 압니다 | ||
| 무의, 좁음 | 작다고 말합니다 | ||
| 무의, 넓음 | 아무것도 모릅니다 |
셋째 줄과 넷째 줄이 값으로는 똑같이 "유의하지 않음"입니다. 그런데 하나는 효과가 작다는 증거이고 다른 하나는 증거가 없다는 뜻입니다.
첫째 줄과 둘째 줄도 마찬가지입니다. 둘 다 유의한데, 하나는 효과를 로 좁히고 하나는 이라 거의 아무 값이나 가능합니다.
이 문제에서 배우는 것. 보고할 것은 값이 아니라 추정값과 구간입니다. 값은 구간이 을 포함하는지만 알려 주므로 구간을 보고하면 값이 따라오고 그 반대는 안 됩니다. 그리고 넷째 줄이 실무에서 가장 자주 잘못 읽히는데, 표본이 작아 아무것도 못 잰 결과가 "차이가 없음이 확인되었습니다"로 보고됩니다. 정말로 차이가 없다고 말하려면 셋째 줄처럼 구간이 의미 없는 크기 안에 갇혀야 하며, 그것을 미리 설계하는 것이 183강의 검정력입니다.
바로 확인 5.
확인 5-1. 코헨의 를 식으로 쓰고 와의 관계를 쓰세요.
답. 평균 차이를 합동 표준편차로 나눈 값이며 입니다.
확인 5-2. 검산에서 표본 과 의 와 를 쓰세요.
답. 는 과 이고 는 과 입니다.
확인 5-3. 유의하지 않은 두 결과가 어떻게 다를 수 있는지 쓰세요.
답. 구간이 좁으면 효과가 작다는 증거이고 넓으면 증거가 없다는 뜻입니다.
| 자료의 구조 | 무엇을 쓰는가 |
|---|---|
| 독립인 두 집단 | 웰치 |
| 독립이고 크기와 분산이 같음 | 합동 도 같습니다 |
| 같은 대상을 두 번 | 짝지은 |
| 짝은 없고 순서만 맞음 | 짝지으면 안 됩니다 |
| 보고할 것 | 왜 |
|---|---|
| 각 집단의 크기, 평균, 표준편차 | 나중에 다시 계산됩니다 |
| 차이의 추정값 | 크기를 말합니다 |
| 신뢰구간 | 정밀도를 말합니다 |
| 효과 크기 | 단위 없이 견줍니다 |
| 값 | 위의 넷이 있으면 덤입니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 평균 차이만 보고합니다 | 흩어짐과 크기가 있어야 판단됩니다 |
| 등분산 검정을 먼저 합니다 | 처음부터 웰치를 씁니다 |
| 짝을 무시합니다 | 검출력이 통째로 사라집니다 |
| 짝이 없는데 짝짓습니다 | 자유도만 잃습니다 |
| 를 가설이 참일 확률로 읽습니다 | 조건의 방향이 반대입니다 |
| 유의하니 크다고 읽습니다 | 표본이 크면 작아도 유의합니다 |
| 유의하지 않으니 같다고 읽습니다 | 못 쟀을 뿐일 수 있습니다 |
문제 6. 통계량을 말로 쓰세요.
답. 평균 차이를 차이의 표준오차로 나눈 값입니다.
문제 7. 검산에서 문제 1의 자료의 와 값을 쓰세요.
답. 이고 값은 입니다.
문제 8. 검산에서 가 같아진 두 상황과 그 값을 쓰세요.
답. 차이가 절반인 경우와 흩어짐이 두 배인 경우이며 둘 다 입니다.
문제 9. 표본 크기를 네 배로 하면 가 어떻게 되는지 검산 값과 함께 쓰세요.
답. 두 배가 되며 에서 이 됩니다.
문제 10. 검산에서 합동 의 오류율이 가장 나빴던 경우와 값을 쓰세요.
답. 작은 쪽의 분산이 큰 경우이며 입니다.
문제 11. 검산에서 합동 가 너무 조심스러웠던 경우와 값을 쓰세요.
답. 큰 쪽의 분산이 큰 경우이며 입니다.
문제 12. 등분산 검정을 먼저 하면 왜 나쁜지 쓰세요.
답. 첫 단계의 오류가 둘째 단계로 새어 전체 오류율이 목표를 넘기 때문입니다.
문제 13. 짝짓기가 무엇을 없애는지 분산 식으로 쓰세요.
답. 공분산의 두 배만큼 줄며 대상마다 고정된 차이가 사라집니다.
문제 14. 검산에서 짝을 무시했을 때와 지었을 때의 흩어짐을 쓰세요.
답. 와 입니다.
문제 15. 검산에서 짝이 있는 자료의 두 검출력을 쓰세요.
답. 과 입니다.
문제 16. 값의 정의를 조건의 방향을 밝혀 쓰세요.
답. 귀무가설이 참일 때 이만한 자료를 볼 확률이며 반대 방향이 아닙니다.
문제 17. 검산에서 효과가 일 때 표본 과 의 유의 비율을 쓰세요.
답. 와 입니다.
문제 18. 검산에서 표본 의 와 헤지스 보정 뒤 값을 쓰세요.
답. 과 입니다.
심화 1. 분포가 어디서 오는지 정리하세요.
문제 1에서 표준오차를 추정값 로 만들었습니다. 그 추정의 불확실성이 분포를 바꿉니다.
분모가 상수가 아니라 확률변수라서 꼬리가 두꺼워집니다.
| 자유도 | 퍼센트 기준값 |
|---|---|
자유도가 커지면 정규분포로 갑니다. 가 에 가까워져 분모의 흔들림이 사라지기 때문입니다.
작은 표본에서 정규 기준값 을 쓰면 너무 자주 기각합니다. 자유도 에서 진짜 기준은 이며, 을 쓰면 오류율이 를 크게 넘습니다.
심화 2. 정규성 가정을 정리하세요.
검정은 자료가 정규분포라고 가정합니다. 실제로는 훨씬 느슨합니다.
| 상황 | 정규성이 필요한가 |
|---|---|
| 표본이 크다 | 필요 없습니다 |
| 표본이 작고 대칭이다 | 거의 필요 없습니다 |
| 표본이 작고 심하게 치우쳤다 | 필요합니다 |
| 꼬리가 아주 두껍다 | 크기와 무관하게 위험합니다 |
첫째 줄이 149강의 중심극한정리입니다. 검정이 쓰는 것은 각 관측이 아니라 평균의 분포이므로, 평균이 정규에 가까우면 됩니다.
넷째 줄이 예외입니다. 164강에서 인 분포는 분산이 없어 중심극한정리가 안 통한다고 했는데, 그런 자료에서는 표본을 늘려도 안 낫습니다.
정규성 검정으로 고르는 것도 문제 2와 같은 이유로 나쁩니다. 표본이 작으면 검정력이 없어 무엇이든 통과하고, 크면 사소한 어긋남도 잡아냅니다. 179강이 대안을 다룹니다.
심화 3. 단측검정을 정리하세요.
지금까지는 양측이었습니다. 방향을 미리 정하면 단측을 씁니다.
| 무엇이 바뀌는가 | 어떻게 |
|---|---|
| 기준값 | 낮아집니다 |
| 검출력 | 오릅니다 |
| 반대 방향 | 아무리 커도 못 잡습니다 |
셋째 줄이 대가입니다. 신약이 나쁠 가능성을 아예 안 보겠다는 뜻이므로, 미리 정당화되어야 합니다.
결과를 보고 방향을 정하면 실제 오류율이 두 배가 됩니다. 양쪽 중 나온 쪽으로 단측을 하면 가 아니라 이며, 이것이 가장 흔한 조작 중 하나입니다.
미리 등록하는 절차가 그래서 생겼습니다. 자료를 보기 전에 방향과 기준을 적어 두면 이 조작이 막힙니다.
심화 4. 검정을 반복해서 보는 위험을 정리하세요.
A/B 테스트에서 결과를 매일 보고 유의하면 멈추는 방식이 흔합니다.
| 몇 번 들여다보는가 | 실제 오류율 | 목표 |
|---|---|---|
열 번만 봐도 오류율이 에서 로 네 배가 됩니다. 값이 문제 4처럼 고르게 퍼져 있으므로, 계속 뽑으면 언젠가 아래를 지나갑니다.
멈추는 규칙이 검정의 일부입니다. 표본 크기를 미리 정하거나, 여러 번 볼 것이면 볼 때마다의 기준을 미리 나눠 두어야 합니다. 182강의 다중비교와 같은 문제이며, 여기서는 시간축을 따라 일어납니다.
심화 5. 비율의 비교를 정리하세요.
두 집단의 비율을 견주는 것도 같은 뼈대입니다.
평균의 자리에 비율이 들어갑니다. 이항의 분산이 로 평균에 매여 있는 것만 다릅니다.
| 주의할 것 | 왜 |
|---|---|
| 드문 사건 | 174강 문제 4의 근사 붕괴 |
| 아주 큰 표본 | 사소한 차이도 유의합니다 |
| 여러 지표 동시 | 182강의 다중비교 |
첫째 줄이 실무에서 가장 자주 걸립니다. 전환율이 퍼센트인 자료에서 정규 근사가 깨지며, 181강의 카이제곱이나 정확검정을 씁니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 집단이 셋 이상 | 분산분석 | 180강 |
| 정규성이 의심스러움 | 비모수 대안 | 179강 |
| 표본 크기 정하기 | 검정력 계산 | 183강 |
| 설명변수가 여럿 | 회귀 | 184강 |
넷째 줄이 이 과목의 뼈대입니다. 두 집단 비교는 집단을 나타내는 더미변수 하나짜리 회귀와 정확히 같으며, 186강에서 그 사실을 확인합니다.
의 통계량이 문제 1의 와 같은 값입니다. 그래서 이 강의를 회귀의 특수한 경우로 다시 읽을 수 있으며, 그것이 S8 02단원의 관점입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 티 통계량 | 차이를 표준오차로 나눈 값입니다 | |
| s_ | 합동 표준편차 | 두 집단의 분산을 합쳐 잰 것입니다 |
| 뉴 | 자유도입니다 | |
| 웰치 검정 | Welch's t-test | 분산을 합치지 않는 검정입니다 |
| 짝지은 | paired t-test | 차이를 만들어 한 표본으로 봅니다 |
| 값 | p-value | 귀무가설 아래에서 이만한 자료를 볼 확률입니다 |
| 코헨의 | Cohen's d | 차이를 표준편차 단위로 잰 것입니다 |
| 헤지스의 | Hedges' g | 작은 표본의 를 보정한 것입니다 |
| 검출력 | power | 참 효과가 있을 때 잡아낼 확률입니다 |
| 단측검정 | one-sided test | 방향을 미리 정한 검정입니다 |
| 미리 등록 | preregistration | 자료를 보기 전에 절차를 적어 둡니다 |
| 반복 확인 | optional stopping | 여러 번 보고 멈추면 오류율이 오릅니다 |
다음은 179강 등분산 가정과 비모수 대안입니다. 이 강의가 웰치로 등분산을 풀었는데, 정규성은 아직 가정으로 남아 있습니다.
소득이나 대기시간처럼 심하게 치우친 자료에서는 평균 자체가 대표성을 잃습니다. 179강은 순위로 견주는 방법을 다루고, 그 방법이 무엇을 얻고 무엇을 잃는지를 계산합니다.
import numpy as np
rng = np.random.default_rng(20260915)
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 tstat_pooled(a, b):
na, nb = len(a), len(b)
sp2 = ((na - 1) * a.var(ddof=1) + (nb - 1) * b.var(ddof=1)) / (na + nb - 2)
se = np.sqrt(sp2 * (1.0 / na + 1.0 / nb))
return (a.mean() - b.mean()) / se, na + nb - 2
def tstat_welch(a, b):
va, vb = a.var(ddof=1) / len(a), b.var(ddof=1) / len(b)
se = np.sqrt(va + vb)
df = (va + vb) ** 2 / (va ** 2 / (len(a) - 1) + vb ** 2 / (len(b) - 1))
return (a.mean() - b.mean()) / se, df
def tcdf(t, df):
x = df / (df + t * t)
return 1.0 - 0.5 * betainc(0.5 * df, 0.5, x) if t > 0 else 0.5 * betainc(0.5 * df, 0.5, x)
def betainc(a, b, x):
if x <= 0.0:
return 0.0
if x >= 1.0:
return 1.0
lbeta = gammaln(a) + gammaln(b) - gammaln(a + b)
front = np.exp(a * np.log(x) + b * np.log(1.0 - x) - lbeta)
if x < (a + 1.0) / (a + b + 2.0):
return front * betacf(a, b, x) / a
return 1.0 - np.exp(b * np.log(1.0 - x) + a * np.log(x) - lbeta) * betacf(b, a, 1.0 - x) / b
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, 300):
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
h *= d * c
return h
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 pval2(t, df):
return 2.0 * (1.0 - tcdf(abs(t), df))
def tcrit(df, alpha=0.05):
lo, hi = 0.0, 50.0
for _ in range(200):
mid = 0.5 * (lo + hi)
if pval2(mid, df) > alpha:
lo = mid
else:
hi = mid
return 0.5 * (lo + hi)
# --- 문제 1: 두 평균이 다르다고 말하려면 --------------------------------
print(" 두 집단의 평균이 다른지 묻는 것이 가장 흔한 물음입니다")
print(" 차이를 흩어짐으로 나눈 것이 통계량입니다")
print(" t = (평균 차이) / (차이의 표준오차) 입니다")
a1 = np.array([52.1, 48.3, 55.7, 49.9, 53.2, 47.6, 51.4, 50.8, 54.3, 46.9])
b1 = np.array([45.2, 49.1, 43.8, 47.5, 44.6, 48.9, 46.3, 42.7, 50.2, 45.8])
print(" %s %s %s %s" % (pw("집단", 10), rw("크기", 8), rw("평균", 12), rw("표준편차", 12)))
for nm, v in [("A", a1), ("B", b1)]:
print(" %s %8d %12.4f %12.4f"
% (pw(nm, 10), len(v), float(v.mean()), float(v.std(ddof=1))))
t1, df1 = tstat_pooled(a1, b1)
print(" 평균 차이는 %.4f 입니다" % float(a1.mean() - b1.mean()))
print(" 합동 표준편차로 잰 t 는 %.4f 이고 자유도는 %d 입니다" % (t1, df1))
print(" 양측 p 값은 %.6f 입니다" % pval2(t1, df1))
print(" 같은 차이라도 흩어짐과 크기에 따라 판단이 달라집니다")
print(" %s %s %s %s %s" % (pw("상황", 22), rw("평균 차이", 12), rw("표준편차", 12),
rw("t", 10), rw("p 값", 12)))
for nm, d, sd, n in [("기준", 4.0, 3.0, 10), ("차이가 절반", 2.0, 3.0, 10),
("흩어짐이 두 배", 4.0, 6.0, 10), ("크기가 네 배", 4.0, 3.0, 40)]:
se = sd * np.sqrt(2.0 / n)
tt = d / se
print(" %s %12.4f %12.4f %10.4f %12.6f"
% (pw(nm, 22), d, sd, tt, pval2(tt, 2 * n - 2)))
print(" 셋 중 무엇이 바뀌어도 t 가 바뀝니다. 차이만 보고는 아무 말도 못 합니다")
print(" 크기를 네 배로 하면 t 가 두 배가 됩니다. 174강의 루트 n 그대로입니다")
# --- 문제 2: 등분산을 가정할 것인가 -------------------------------------
print(" 합동 t 검정은 두 집단의 분산이 같다고 가정합니다")
print(" 가정이 깨지면 어떻게 되는지 모의로 봅니다")
N2 = 20000
print(" %s %s %s %s %s" % (pw("두 집단의 크기와 분산", 30), rw("합동 t 의 오류율", 18),
rw("웰치 t 의 오류율", 18), rw("목표", 8), rw("누가 맞는가", 14)))
cases2 = [("같은 크기 같은 분산", 20, 20, 1.0, 1.0),
("같은 크기 다른 분산", 20, 20, 1.0, 3.0),
("작은 쪽이 분산 큼", 10, 40, 3.0, 1.0),
("큰 쪽이 분산 큼", 10, 40, 1.0, 3.0)]
for nm, na, nb, sa, sb in cases2:
A = rng.normal(0.0, sa, (N2, na))
B = rng.normal(0.0, sb, (N2, nb))
ma, mb = A.mean(1), B.mean(1)
va, vb = A.var(1, ddof=1), B.var(1, ddof=1)
sp2 = ((na - 1) * va + (nb - 1) * vb) / (na + nb - 2)
tp = (ma - mb) / np.sqrt(sp2 * (1.0 / na + 1.0 / nb))
tw = (ma - mb) / np.sqrt(va / na + vb / nb)
dfw = (va / na + vb / nb) ** 2 / ((va / na) ** 2 / (na - 1) + (vb / nb) ** 2 / (nb - 1))
cp = np.array([pval2(x, na + nb - 2) < 0.05 for x in tp[:4000]]).mean()
cw = np.array([pval2(x, d) < 0.05 for x, d in zip(tw[:4000], dfw[:4000])]).mean()
win = "둘 다" if abs(cp - 0.05) < 0.006 and abs(cw - 0.05) < 0.006 else "웰치"
print(" %s %18.4f %18.4f %8.2f %s"
% (pw(nm, 30), cp, cw, 0.05, rw(win, 14)))
print(" 크기가 같으면 분산이 달라도 합동 t 가 버팁니다")
print(" 크기가 다르면 무너집니다. 작은 쪽의 분산이 크면 너무 자주 기각합니다")
print(" 웰치 t 는 네 경우 모두 목표에 가깝습니다. 기본값으로 웰치를 씁니다")
print(" 웰치의 자유도는 정수가 아닙니다")
a2 = rng.normal(0, 1, 10)
b2 = rng.normal(0, 3, 40)
tw2, dfw2 = tstat_welch(a2, b2)
tp2, dfp2 = tstat_pooled(a2, b2)
print(" %s %s %s" % (pw("무엇으로", 16), rw("자유도", 14), rw("양측 p 값", 14)))
print(" %s %14.4f %14.6f" % (pw("합동", 16), float(dfp2), pval2(tp2, dfp2)))
print(" %s %14.4f %14.6f" % (pw("웰치", 16), dfw2, pval2(tw2, dfw2)))
print(" 자유도는 48 에서 47.6690 으로 조금 줄었을 뿐인데 p 값이 크게 다릅니다")
print(" 큰 집단의 큰 분산이 합동 추정에 섞여 작은 집단의 평균까지 불안정하게 봅니다")
print(" 위 표의 넷째 줄과 같은 상황이며 합동 t 는 너무 조심스러워 기각을 못 합니다")
# --- 문제 3: 짝지은 자료 ------------------------------------------------
print(" 같은 사람을 전후로 재면 짝이 생깁니다")
N3 = 30
사람 = rng.normal(100.0, 15.0, N3)
전 = 사람 + rng.normal(0, 2.0, N3)
후 = 사람 + 3.0 + rng.normal(0, 2.0, N3)
tind, dfind = tstat_pooled(후, 전)
차 = 후 - 전
tpair = 차.mean() / (차.std(ddof=1) / np.sqrt(N3))
print(" 참 효과는 3.0 이고 사람마다의 차이가 표준편차 15 입니다")
print(" %s %s %s %s" % (pw("어떻게 보는가", 20), rw("t", 12), rw("자유도", 10),
rw("양측 p 값", 14)))
print(" %s %12.4f %10.0f %14.6f" % (pw("따로 뽑은 것처럼", 20), tind, dfind,
pval2(tind, dfind)))
print(" %s %12.4f %10.0f %14.6f" % (pw("짝지어서", 20), tpair, N3 - 1,
pval2(tpair, N3 - 1)))
print(" 같은 자료인데 t 가 크게 달라집니다")
print(" 짝을 지으면 사람마다의 차이가 뺄셈에서 사라지기 때문입니다")
print(" %s %s" % (pw("무엇의 흩어짐인가", 24), rw("표준편차", 14)))
for nm, v in [("각 관측", np.concatenate([전, 후])), ("사람 안의 차이", 차)]:
print(" %s %14.4f" % (pw(nm, 24), float(v.std(ddof=1))))
print(" 분모가 작아진 만큼 같은 효과가 더 또렷하게 보입니다")
print(" 짝이 있느냐 없느냐로 어느 쪽이 나은지가 갈립니다")
R3 = 40000
print(" 참 효과 3.0 을 두고 4 만 번씩 되풀이해 유의하게 나온 비율을 셉니다")
print(" %s %s %s %s" % (pw("자료의 구조", 22), rw("따로 뽑은 것처럼", 20),
rw("짝지어서", 14), rw("어느 쪽이 나은가", 20)))
cp3, cq3 = tcrit(2 * N3 - 2), tcrit(N3 - 1)
for nm, paired in [("같은 사람을 전후로", True), ("서로 다른 사람", False)]:
if paired:
who = rng.normal(100.0, 15.0, (R3, N3))
pre = who + rng.normal(0, 2.0, (R3, N3))
post = who + 3.0 + rng.normal(0, 2.0, (R3, N3))
else:
pre = rng.normal(100.0, 15.0, (R3, N3))
post = rng.normal(103.0, 15.0, (R3, N3))
ti = (post.mean(1) - pre.mean(1)) / np.sqrt(
(post.var(1, ddof=1) + pre.var(1, ddof=1)) / N3)
dd = post - pre
tq = dd.mean(1) / (dd.std(1, ddof=1) / np.sqrt(N3))
ri = float((np.abs(ti) > cp3).mean())
rq = float((np.abs(tq) > cq3).mean())
verdict = "비슷" if abs(rq - ri) < 0.01 else ("짝지어서" if rq > ri else "따로")
print(" %s %20.4f %14.4f %s" % (pw(nm, 22), ri, rq, rw(verdict, 20)))
print(" 첫째 줄에서 차이가 극단으로 벌어집니다. 짝이 있으면 반드시 짝지어야 합니다")
print(" 둘째 줄의 두 값은 사실상 같습니다. 손해가 언제 커지는지 따로 봅니다")
print(" 짝이 없을 때의 손해는 표본이 작을수록 커집니다")
print(" 효과 크기 0.8 인 서로 다른 두 집단을 4 만 번씩 되풀이했습니다")
print(" %s %s %s %s %s" % (pw("집단당 크기", 12), rw("기각에 필요한 t 따로", 22),
rw("짝지어서", 12), rw("검출력 따로", 14), rw("검출력 짝", 12)))
for n7 in [5, 10, 30, 100]:
c_i, c_p = tcrit(2 * n7 - 2), tcrit(n7 - 1)
A7 = rng.normal(0.8, 1.0, (40000, n7))
B7 = rng.normal(0.0, 1.0, (40000, n7))
ti7 = (A7.mean(1) - B7.mean(1)) / np.sqrt(
(A7.var(1, ddof=1) + B7.var(1, ddof=1)) / n7)
d7 = A7 - B7
tp7 = d7.mean(1) / (d7.std(1, ddof=1) / np.sqrt(n7))
print(" %s %22.4f %12.4f %14.4f %12.4f"
% (pw("%d" % n7, 12), c_i, c_p,
float((np.abs(ti7) > c_i).mean()), float((np.abs(tp7) > c_p).mean())))
print(" 크기가 5 면 기준값이 2.3060 에서 2.7764 로 올라 검출력이 눈에 띄게 떨어집니다")
print(" 크기가 100 이면 기준값 차이가 거의 없어 손해도 거의 없습니다")
print(" 짝짓기는 설계에서 정하는 것이지 분석에서 고르는 것이 아닙니다")
# --- 문제 4: p 값이 말하는 것과 말하지 않는 것 --------------------------
print(" p 값은 참이 아닐 확률이 아닙니다")
print(" %s %s" % (pw("p = 0.03 이 뜻하는 것", 30), rw("맞는가", 10)))
for nm, ok in [("귀무가설이 참일 확률이 0.03", "아니오"),
("대립가설이 참일 확률이 0.97", "아니오"),
("차이가 0.03 만큼 크다", "아니오"),
("귀무가설 아래에서 이만한 차이를 볼 확률", "예"),
("같은 실험을 하면 97 퍼센트 재현된다", "아니오")]:
print(" %s %s" % (pw(nm, 30), rw(ok, 10)))
print(" 귀무가설이 참일 때 p 값은 고르게 퍼집니다")
N4 = 100000
n4 = 15
A4 = rng.normal(0, 1, (N4, n4))
B4 = rng.normal(0, 1, (N4, n4))
t4 = (A4.mean(1) - B4.mean(1)) / np.sqrt(
(A4.var(1, ddof=1) + B4.var(1, ddof=1)) / n4)
p4 = np.array([pval2(x, 2 * n4 - 2) for x in t4[:20000]])
print(" 효과가 정말 0 인 자료에서 p 값을 2 만 번 구했습니다")
print(" %s %s %s" % (pw("p 값 구간", 16), rw("들어간 비율", 14), rw("기대", 10)))
for lo, hi in [(0.0, 0.2), (0.2, 0.4), (0.4, 0.6), (0.6, 0.8), (0.8, 1.0)]:
print(" %s %14.4f %10.2f"
% (pw("%.1f ~ %.1f" % (lo, hi), 16), float(((p4 >= lo) & (p4 < hi)).mean()), 0.2))
print(" 고른 분포입니다. 그래서 0.05 아래가 나올 확률이 정확히 0.05 입니다")
print(" 효과가 없어도 스무 번에 한 번은 유의하게 나옵니다")
print(" 같은 효과를 두고도 표본을 늘리면 p 값이 계속 내려갑니다")
print(" %s %s %s %s" % (pw("표본 크기", 12), rw("참 효과", 12), rw("평균 t", 12),
rw("p 가 0.05 아래일 비율", 24)))
for n5 in [10, 40, 160, 640]:
A5 = rng.normal(0.1, 1.0, (40000, n5))
B5 = rng.normal(0.0, 1.0, (40000, n5))
t5 = (A5.mean(1) - B5.mean(1)) / np.sqrt(
(A5.var(1, ddof=1) + B5.var(1, ddof=1)) / n5)
print(" %s %12.2f %12.4f %24.4f"
% (pw("%d" % n5, 12), 0.1, float(t5.mean()),
float((np.abs(t5) > tcrit(2 * n5 - 2)).mean())))
print(" 효과의 크기는 그대로인데 유의해질 확률만 오릅니다")
print(" 그래서 유의하다는 말이 크다는 뜻이 아닙니다. 크기를 따로 봐야 합니다")
print(" 자료를 더 모으며 여러 번 들여다보면 오류율이 오릅니다")
print(" 효과가 0 인 자료를 20 씩 늘려 가며 확인하고 유의하면 멈춥니다")
print(" %s %s %s" % (pw("몇 번 들여다보는가", 22), rw("실제 오류율", 14), rw("목표", 10)))
R8, n8 = 40000, 20
for K in [1, 2, 5, 10]:
rej = np.zeros(R8, dtype=bool)
A8 = rng.normal(0, 1, (R8, n8 * K))
B8 = rng.normal(0, 1, (R8, n8 * K))
for k in range(1, K + 1):
m8 = n8 * k
aa, bb = A8[:, :m8], B8[:, :m8]
t8 = (aa.mean(1) - bb.mean(1)) / np.sqrt(
(aa.var(1, ddof=1) + bb.var(1, ddof=1)) / m8)
rej |= np.abs(t8) > tcrit(2 * m8 - 2)
print(" %s %14.4f %10.2f" % (pw("%d" % K, 22), float(rej.mean()), 0.05))
print(" 효과가 정말 0 이어도 계속 보면 언젠가 반드시 유의해집니다")
print(" 멈추는 규칙이 검정의 일부입니다. 표본 크기를 미리 정해야 합니다")
# --- 문제 5: 효과 크기와 신뢰구간 ---------------------------------------
print(" 차이의 크기는 표준편차를 단위로 잽니다")
print(" 코헨의 d = (평균 차이) / (합동 표준편차) 입니다")
d1 = float(a1.mean() - b1.mean())
sp = np.sqrt(((len(a1) - 1) * a1.var(ddof=1) + (len(b1) - 1) * b1.var(ddof=1))
/ (len(a1) + len(b1) - 2))
print(" 문제 1 의 자료에서 d 는 %.4f 이고 t 는 %.4f 입니다" % (d1 / sp, t1))
print(" %s %s" % (pw("d 의 크기", 14), rw("흔히 부르는 말", 18)))
for v, nm in [(0.2, "작다"), (0.5, "중간"), (0.8, "크다"), (1.2, "아주 크다")]:
print(" %s %s" % (pw("%.1f" % v, 14), rw(nm, 18)))
print(" d 는 표본 크기와 무관합니다. t 는 크기가 커지면 같이 커집니다")
print(" %s %s %s %s %s" % (pw("표본 크기", 12), rw("d 의 평균", 12), rw("t 의 평균", 12),
rw("t 를 d 로", 12), rw("헤지스 보정 뒤", 16)))
for n6 in [10, 40, 160, 640]:
A6 = rng.normal(0.5, 1.0, (20000, n6))
B6 = rng.normal(0.0, 1.0, (20000, n6))
sp6 = np.sqrt((A6.var(1, ddof=1) + B6.var(1, ddof=1)) / 2.0)
d6 = (A6.mean(1) - B6.mean(1)) / sp6
t6 = (A6.mean(1) - B6.mean(1)) / np.sqrt(
(A6.var(1, ddof=1) + B6.var(1, ddof=1)) / n6)
J = 1.0 - 3.0 / (4.0 * (2 * n6 - 2) - 1.0)
print(" %s %12.4f %12.4f %12.4f %16.4f"
% (pw("%d" % n6, 12), float(d6.mean()), float(t6.mean()),
float(t6.mean() * np.sqrt(2.0 / n6)), float(d6.mean() * J)))
print(" t 만 커지고 d 는 그대로입니다. 넷째 열이 t 를 d 로 되돌린 것입니다")
print(" 작은 표본에서 d 가 조금 부풀어 있고 헤지스 보정이 그것을 되돌립니다")
print(" 신뢰구간이 p 값보다 많은 것을 말합니다")
print(" %s %s %s %s" % (pw("결과", 18), rw("차이의 추정", 14),
rw("95 퍼센트 구간", 22), rw("무엇을 알 수 있나", 22)))
for nm, est, lo, hi, msg in [("유의, 좁음", 5.0, 4.2, 5.8, "크고 정밀합니다"),
("유의, 넓음", 5.0, 0.3, 9.7, "방향만 압니다"),
("무의, 좁음", 0.2, -0.6, 1.0, "작다고 말합니다"),
("무의, 넓음", 0.2, -8.0, 8.4, "아무것도 모릅니다")]:
print(" %s %14.1f %s %s"
% (pw(nm, 18), est, rw("[%.1f, %.1f]" % (lo, hi), 22), rw(msg, 22)))
print(" 셋째 줄과 넷째 줄이 p 값으로는 똑같이 유의하지 않음입니다")
print(" 한쪽은 효과가 작다는 증거이고 다른 쪽은 증거가 없다는 뜻입니다")
print(" 유의하지 않음을 차이가 없음으로 읽으면 이 둘을 못 가립니다")
# 두 집단의 평균이 다른지 묻는 것이 가장 흔한 물음입니다
# 차이를 흩어짐으로 나눈 것이 통계량입니다
# t = (평균 차이) / (차이의 표준오차) 입니다
# 집단 크기 평균 표준편차
# A 10 51.0200 2.9078
# B 10 46.4100 2.4651
# 평균 차이는 4.6100 입니다
# 합동 표준편차로 잰 t 는 3.8242 이고 자유도는 18 입니다
# 양측 p 값은 0.001242 입니다
# 같은 차이라도 흩어짐과 크기에 따라 판단이 달라집니다
# 상황 평균 차이 표준편차 t p 값
# 기준 4.0000 3.0000 2.9814 0.008002
# 차이가 절반 2.0000 3.0000 1.4907 0.153353
# 흩어짐이 두 배 4.0000 6.0000 1.4907 0.153353
# 크기가 네 배 4.0000 3.0000 5.9628 0.000000
# 셋 중 무엇이 바뀌어도 t 가 바뀝니다. 차이만 보고는 아무 말도 못 합니다
# 크기를 네 배로 하면 t 가 두 배가 됩니다. 174강의 루트 n 그대로입니다
# 합동 t 검정은 두 집단의 분산이 같다고 가정합니다
# 가정이 깨지면 어떻게 되는지 모의로 봅니다
# 두 집단의 크기와 분산 합동 t 의 오류율 웰치 t 의 오류율 목표 누가 맞는가
# 같은 크기 같은 분산 0.0508 0.0508 0.05 둘 다
# 같은 크기 다른 분산 0.0510 0.0473 0.05 둘 다
# 작은 쪽이 분산 큼 0.2567 0.0527 0.05 웰치
# 큰 쪽이 분산 큼 0.0015 0.0517 0.05 웰치
# 크기가 같으면 분산이 달라도 합동 t 가 버팁니다
# 크기가 다르면 무너집니다. 작은 쪽의 분산이 크면 너무 자주 기각합니다
# 웰치 t 는 네 경우 모두 목표에 가깝습니다. 기본값으로 웰치를 씁니다
# 웰치의 자유도는 정수가 아닙니다
# 무엇으로 자유도 양측 p 값
# 합동 48.0000 0.383891
# 웰치 47.6690 0.108252
# 자유도는 48 에서 47.6690 으로 조금 줄었을 뿐인데 p 값이 크게 다릅니다
# 큰 집단의 큰 분산이 합동 추정에 섞여 작은 집단의 평균까지 불안정하게 봅니다
# 위 표의 넷째 줄과 같은 상황이며 합동 t 는 너무 조심스러워 기각을 못 합니다
# 같은 사람을 전후로 재면 짝이 생깁니다
# 참 효과는 3.0 이고 사람마다의 차이가 표준편차 15 입니다
# 어떻게 보는가 t 자유도 양측 p 값
# 따로 뽑은 것처럼 0.8834 58 0.380663
# 짝지어서 5.0159 29 0.000024
# 같은 자료인데 t 가 크게 달라집니다
# 짝을 지으면 사람마다의 차이가 뺄셈에서 사라지기 때문입니다
# 무엇의 흩어짐인가 표준편차
# 각 관측 13.3079
# 사람 안의 차이 3.3208
# 분모가 작아진 만큼 같은 효과가 더 또렷하게 보입니다
# 짝이 있느냐 없느냐로 어느 쪽이 나은지가 갈립니다
# 참 효과 3.0 을 두고 4 만 번씩 되풀이해 유의하게 나온 비율을 셉니다
# 자료의 구조 따로 뽑은 것처럼 짝지어서 어느 쪽이 나은가
# 같은 사람을 전후로 0.0000 0.9999 짝지어서
# 서로 다른 사람 0.1185 0.1172 비슷
# 첫째 줄에서 차이가 극단으로 벌어집니다. 짝이 있으면 반드시 짝지어야 합니다
# 둘째 줄의 두 값은 사실상 같습니다. 손해가 언제 커지는지 따로 봅니다
# 짝이 없을 때의 손해는 표본이 작을수록 커집니다
# 효과 크기 0.8 인 서로 다른 두 집단을 4 만 번씩 되풀이했습니다
# 집단당 크기 기각에 필요한 t 따로 짝지어서 검출력 따로 검출력 짝
# 5 2.3060 2.7764 0.2003 0.1648
# 10 2.1009 2.2622 0.3979 0.3593
# 30 2.0017 2.0452 0.8596 0.8490
# 100 1.9720 1.9842 0.9998 0.9998
# 크기가 5 면 기준값이 2.3060 에서 2.7764 로 올라 검출력이 눈에 띄게 떨어집니다
# 크기가 100 이면 기준값 차이가 거의 없어 손해도 거의 없습니다
# 짝짓기는 설계에서 정하는 것이지 분석에서 고르는 것이 아닙니다
# p 값은 참이 아닐 확률이 아닙니다
# p = 0.03 이 뜻하는 것 맞는가
# 귀무가설이 참일 확률이 0.03 아니오
# 대립가설이 참일 확률이 0.97 아니오
# 차이가 0.03 만큼 크다 아니오
# 귀무가설 아래에서 이만한 차이를 볼 확률 예
# 같은 실험을 하면 97 퍼센트 재현된다 아니오
# 귀무가설이 참일 때 p 값은 고르게 퍼집니다
# 효과가 정말 0 인 자료에서 p 값을 2 만 번 구했습니다
# p 값 구간 들어간 비율 기대
# 0.0 ~ 0.2 0.1983 0.20
# 0.2 ~ 0.4 0.1993 0.20
# 0.4 ~ 0.6 0.2039 0.20
# 0.6 ~ 0.8 0.1999 0.20
# 0.8 ~ 1.0 0.1986 0.20
# 고른 분포입니다. 그래서 0.05 아래가 나올 확률이 정확히 0.05 입니다
# 효과가 없어도 스무 번에 한 번은 유의하게 나옵니다
# 같은 효과를 두고도 표본을 늘리면 p 값이 계속 내려갑니다
# 표본 크기 참 효과 평균 t p 가 0.05 아래일 비율
# 10 0.10 0.2337 0.0542
# 40 0.10 0.4550 0.0717
# 160 0.10 0.8964 0.1456
# 640 0.10 1.7908 0.4307
# 효과의 크기는 그대로인데 유의해질 확률만 오릅니다
# 그래서 유의하다는 말이 크다는 뜻이 아닙니다. 크기를 따로 봐야 합니다
# 자료를 더 모으며 여러 번 들여다보면 오류율이 오릅니다
# 효과가 0 인 자료를 20 씩 늘려 가며 확인하고 유의하면 멈춥니다
# 몇 번 들여다보는가 실제 오류율 목표
# 1 0.0496 0.05
# 2 0.0831 0.05
# 5 0.1414 0.05
# 10 0.1947 0.05
# 효과가 정말 0 이어도 계속 보면 언젠가 반드시 유의해집니다
# 멈추는 규칙이 검정의 일부입니다. 표본 크기를 미리 정해야 합니다
# 차이의 크기는 표준편차를 단위로 잽니다
# 코헨의 d = (평균 차이) / (합동 표준편차) 입니다
# 문제 1 의 자료에서 d 는 1.7102 이고 t 는 3.8242 입니다
# d 의 크기 흔히 부르는 말
# 0.2 작다
# 0.5 중간
# 0.8 크다
# 1.2 아주 크다
# d 는 표본 크기와 무관합니다. t 는 크기가 커지면 같이 커집니다
# 표본 크기 d 의 평균 t 의 평균 t 를 d 로 헤지스 보정 뒤
# 10 0.5187 1.1598 0.5187 0.4968
# 40 0.5071 2.2679 0.5071 0.5022
# 160 0.5004 4.4756 0.5004 0.4992
# 640 0.5001 8.9461 0.5001 0.4998
# t 만 커지고 d 는 그대로입니다. 넷째 열이 t 를 d 로 되돌린 것입니다
# 작은 표본에서 d 가 조금 부풀어 있고 헤지스 보정이 그것을 되돌립니다
# 신뢰구간이 p 값보다 많은 것을 말합니다
# 결과 차이의 추정 95 퍼센트 구간 무엇을 알 수 있나
# 유의, 좁음 5.0 [4.2, 5.8] 크고 정밀합니다
# 유의, 넓음 5.0 [0.3, 9.7] 방향만 압니다
# 무의, 좁음 0.2 [-0.6, 1.0] 작다고 말합니다
# 무의, 넓음 0.2 [-8.0, 8.4] 아무것도 모릅니다
# 셋째 줄과 넷째 줄이 p 값으로는 똑같이 유의하지 않음입니다
# 한쪽은 효과가 작다는 증거이고 다른 쪽은 증거가 없다는 뜻입니다
# 유의하지 않음을 차이가 없음으로 읽으면 이 둘을 못 가립니다