173강이 어떻게 뽑을지를 다뤘습니다. 이제 몇 개나 뽑을지를 다룹니다.
식은 두 줄인데 실무의 답은 그렇게 짧지 않습니다. 설계효과가 곱으로 붙고, 무응답률이 나눗셈으로 붙으며, 층마다 결과를 내야 하면 층별로 다시 계산해야 합니다.
그리고 마지막에 더 큰 물음이 남습니다.
표본 크기가 줄이는 것은 뒤의 항뿐입니다. 어느 지점을 넘으면 표본을 더 모으는 것보다 자료의 질을 높이는 편이 낫고, 그 지점이 계산됩니다.
문제. 표본오차와 표본 크기의 관계를 세웁니다.
(1) 표준오차가 임을 확인하세요.
(2) 허용 오차에서 표본 크기를 유도하세요.
(3) 세 요인의 영향을 정리하세요.
생각의 실마리. 표본을 다시 뽑으면 다른 답이 나옵니다. 그 흔들림의 크기가 표본오차이며, 무엇이 그 크기를 정하는지 보면 됩니다.
풀이. (1) 독립인 관측을 더하면 분산이 더해집니다.
모집단 표준편차가 입니다.
| 표본 크기 | 표본평균의 표준편차 | \sigma/\sqrt | 차이 |
|---|---|---|---|
(2) 허용 오차를 정하고 에 대해 풉니다.
| 허용 오차 | 필요한 | 실제 도달한 오차 | 목표와의 비 |
|---|---|---|---|
퍼센트가 안에 들어오도록 정한 값이고 수치가 그것을 확인합니다.
(3) 세 가지가 표본 크기를 정합니다.
| 무엇을 바꾸는가 | 에 미치는 영향 | 두 배로 하면 |
|---|---|---|
| 허용 오차 | 제곱에 반비례 | 분의 |
| 모집단 표준편차 | 제곱에 비례 | 배 |
| 신뢰수준의 | 제곱에 비례 | 배 |
셋 다 제곱으로 들어갑니다. 오차를 절반으로 줄이려면 표본이 네 배입니다.
그런데 셋의 성격이 다릅니다. 허용 오차와 신뢰수준은 정하는 것이고, 모집단 표준편차는 주어지는 것입니다. 그래서 계산하려면 를 알아야 하는데, 모르니까 조사하는 것입니다.
예비 조사나 과거 자료로 어림하고, 없으면 문제 3의 보수적 값을 씁니다.
이 문제에서 배우는 것. 표본 크기 계산은 조사를 하기 전에 조사 결과의 일부를 알아야 하는 순환입니다. 그리고 그 순환을 끊는 방법이 상황마다 다릅니다. 비율이면 최댓값 를 쓰면 되고, 평균이면 범위를 로 나눠 어림하거나 예비 조사를 합니다. 어느 쪽이든 어림이므로, 계산된 은 정확한 답이 아니라 자릿수의 답입니다.
바로 확인 1.
확인 1-1. 표준오차를 식으로 쓰고 그 근거를 쓰세요.
답. 이며 독립인 관측의 분산이 더해지기 때문입니다.
확인 1-2. 표본 크기 공식을 쓰세요.
답. 입니다.
확인 1-3. 허용 오차를 절반으로 줄이면 표본이 몇 배가 되는지 쓰세요.
답. 네 배이며 제곱에 반비례하기 때문입니다.
문제. 오차가 으로만 주는 이유와 결과를 봅니다.
(1) 표본을 네 배로 늘려 가며 표준오차를 구하세요.
(2) 한 명을 더 넣을 때 줄어드는 오차를 구하세요.
생각의 실마리. 분산은 으로 나뉘는데 우리가 보는 것은 표준편차입니다. 제곱근을 씌우면 이 되므로, **개수를 두 배로 늘려도 오차는 분의 **밖에 안 됩니다.
풀이. (1) 표본을 네 배씩 늘립니다.
| 표본 크기 | 표준오차 | 직전 대비 | 추가로 든 관측 |
|---|---|---|---|
| 없음 | 없음 | ||
오차를 절반으로 줄일 때마다 추가로 드는 관측이 네 배씩 늘어납니다.
명에서 명으로 갈 때는 명만 더 모으면 되는데, 에서 으로 갈 때는 명이 더 필요합니다.
(2) 한 명을 더 넣을 때 줄어드는 오차를 봅니다.
| 표본 크기 | 표준오차 | 한 명당 줄어드는 오차 | 처음 대비 |
|---|---|---|---|
만 명에서 한 명을 더 넣으면 오차가 명일 때의 배만 줄어듭니다.
한 명의 값어치가 에 반비례해 떨어집니다. 그런데 한 명을 모으는 비용은 그대로이므로, 어느 지점을 넘으면 그 돈으로 다른 일을 하는 편이 낫습니다.
무엇을 하는 것이 나은지가 문제 5의 주제입니다.
이 문제에서 배우는 것. 자료를 모으는 일에는 뚜렷한 수확체감이 있습니다. 그리고 이것이 표본조사가 전수조사를 이기는 이유이기도 합니다. 만 명 중 명으로 오차 퍼센트가 나오는데, 퍼센트로 줄이려면 배인 명이 필요하고, 퍼센트로 줄이려면 만 명이 필요합니다. 정확도를 조금 포기하면 비용이 극적으로 줄어듭니다.
바로 확인 2.
확인 2-1. 오차가 으로만 주는 이유를 쓰세요.
답. 분산이 으로 나뉘는데 표준편차는 그 제곱근이기 때문입니다.
확인 2-2. 검산에서 오차를 절반으로 줄일 때 추가로 드는 관측의 변화를 쓰세요.
답. , , , 으로 네 배씩 늘어납니다.
확인 2-3. 한 명을 더 넣을 때의 값어치가 어떻게 변하는지 쓰세요.
답. 에 반비례해 떨어집니다.
문제. 비율의 표본 크기를 정합니다.
(1) 의 최댓값을 이용하세요.
(2) 허용 오차별로 표본 크기를 구하세요.
(3) 정규 근사가 언제 깨지는지 정확한 계산으로 확인하세요.
생각의 실마리. 비율을 물으면 이므로 모르는 값이 분산에 들어 있습니다. 그런데 이 함수는 위로 볼록해서 최댓값이 정해져 있습니다.
풀이. (1) 를 봅니다.
| 참 비율 | 최댓값 대비 | |
|---|---|---|
에서 가장 크고 값이 입니다. 모르면 이것을 씁니다.
(2) 허용 오차별로 계산합니다.
| 허용 오차 | 를 모를 때 | 로 알 때 | 아낀 비율 |
|---|---|---|---|
흔히 말하는 표본 명 남짓에 오차 퍼센트가 여기서 나옵니다.
를 알면 퍼센트를 아낍니다. 그런데 그 정보가 틀리면 오차가 목표보다 커지므로, 확실하지 않으면 보수적으로 를 씁니다.
(3) 그런데 이 계산은 전부 정규 근사 위에 있습니다. 이항분포 전체를 더해 실제 포함률을 정확히 계산합니다.
| 참 비율 | 발트 구간 | 윌슨 구간 | |
|---|---|---|---|
, 에서 발트 구간의 실제 포함률이 입니다. 퍼센트라고 적어 놓고 퍼센트만 맞습니다.
이어도 이면 입니다. 표본이 커도 가 작으면 깨집니다.
| 판정 기준 | , 에서 | 통과 |
|---|---|---|
| 아니오 | ||
| 예 | ||
| 아니오 |
중요한 것은 이 아니라 기대 성공 수 입니다. 명을 모아도 기대 성공이 명이면 근사가 안 됩니다.
윌슨 구간은 다섯 경우 모두 를 넘습니다. 165강 심화 2에서 본 그대로이며, 기본값으로 쓸 만합니다.
이 문제에서 배우는 것. 표본 크기 공식과 신뢰구간이 같은 근사 위에 서 있습니다. 그래서 근사가 깨지는 자리에서는 계산한 표본 크기도 못 믿습니다. 드문 사건을 조사할 때가 정확히 그 자리인데, 발생률 퍼센트를 조사하면서 명을 뽑는 설계는 공식대로 계산했어도 틀립니다. 이럴 때는 정확 방법을 쓰거나 표본을 훨씬 크게 잡아야 하며, 기대 성공 수를 먼저 확인하는 습관이 필요합니다.
바로 확인 3.
확인 3-1. 비율의 보수적 표본 크기를 식으로 쓰세요.
답. 이며 의 최댓값 를 쓴 것입니다.
확인 3-2. 검산에서 , 일 때 발트 구간의 실제 포함률을 쓰세요.
답. 로 목표 에 한참 못 미칩니다.
확인 3-3. 정규 근사의 판정 기준을 쓰세요.
답. 기대 성공 수 와 기대 실패 수 가 모두 이상이어야 합니다.
문제. 실제로 접촉해야 할 수를 계산합니다.
(1) 설계효과와 응답률을 넣으세요.
(2) 층마다 결과를 내야 할 때를 계산하세요.
생각의 실마리. 173강에서 다단 추출의 설계효과가 까지 간다고 했고, 무응답도 있습니다. 이 둘을 넣으면 계산이 어떻게 바뀔지 봅니다.
풀이. (1) 허용 오차 퍼센트의 기본 이 입니다.
| 설계효과 | 응답률 | 필요한 완료 수 | 접촉해야 할 수 |
|---|---|---|---|
설계효과 이고 응답률 이면 만 명 넘게 접촉해야 합니다. 기본 계산의 배입니다.
그런데 응답률로 나누는 것은 응답이 무작위일 때만 옳습니다. 응답이 값과 연결되어 있으면 173강 문제 1의 치우침이 따로 생기며, 접촉을 늘려도 그 부분은 안 줄어듭니다.
(2) 층마다 결과를 내야 할 때를 봅니다.
| 몇 개로 나누는가 | 층당 표본 | 층별 오차 | 전체 대비 |
|---|---|---|---|
전국 명으로 개 시도별 추정을 하면 층별 오차가 배가 넘습니다.
전국 추정과 층별 추정에 필요한 표본이 전혀 다릅니다. 시도별로 퍼센트 오차를 내려면 시도마다 명이라 총 명이 필요합니다.
이 문제에서 배우는 것. 표본 크기는 통계가 아니라 무엇을 몇 개나 추정할지가 정합니다. "명이면 충분한가"라는 물음에 답하려면 무엇을 알고 싶은지부터 정해져야 하며, 전국 하나면 충분하고 시도별 개면 턱없이 부족합니다. 그리고 실무에서는 작은 층에 최소 표본을 배정하고 나머지를 비례로 나누는 절충을 쓰는데, 그러면 전국 추정의 정확도가 조금 떨어집니다. 175강의 가중치가 그 절충을 다룹니다.
바로 확인 4.
확인 4-1. 접촉해야 할 수를 식으로 쓰세요.
답. 기본 에 설계효과를 곱하고 응답률로 나눕니다.
확인 4-2. 검산에서 설계효과 , 응답률 일 때 접촉 수를 쓰세요.
답. 명이며 기본 의 배입니다.
확인 4-3. 층을 개로 나누면 층별 오차가 어떻게 되는지 쓰세요.
답. 배가 되며 개면 배입니다.
문제. 총오차를 나눕니다.
(1) 치우침과 분산의 몫을 표본 크기별로 구하세요.
(2) 둘이 같아지는 표본 크기를 구하세요.
(3) 예산을 어디에 쓸지 정리하세요.
생각의 실마리. 표본오차만 보고하는 관행이 있는데, 그것은 흔들림만 잰 것입니다. 173강에서 본 치우침은 표본을 늘려도 그대로이므로, 둘을 함께 놓고 봐야 합니다.
풀이. (1) 치우침이 로 고정되어 있다고 두고 봅니다.
| 표본 크기 | 분산 | 치우침 의 제곱 | MSE | 치우침의 몫 |
|---|---|---|---|---|
표본이 만이면 오차의 퍼센트가 치우침입니다. 더 늘려도 소용없습니다.
명일 때는 반대로 치우침이 퍼센트뿐이라, 그때는 표본을 늘리는 것이 옳습니다.
(2) 둘이 같아지는 표본 크기를 구합니다.
| 치우침 | 분산과 같아지는 | 그때의 MSE |
|---|---|---|
치우침이 이면 표본 만 천에서 둘이 같아집니다. 그보다 크게 모으는 것은 치우침을 줄이는 데 쓰는 편이 낫습니다.
치우침이 클수록 그 지점이 빨리 옵니다. 이면 명만 넘어도 치우침이 지배하므로, 치우친 조사는 크게 해도 의미가 없습니다.
(3) 그래서 예산을 나누는 문제가 됩니다.
| 돈을 쓸 곳 | 무엇이 줄어드는가 |
|---|---|
| 표본을 늘리기 | 분산만 줄어듭니다 |
| 응답률을 올리기 | 치우침이 줄어듭니다 |
| 표집틀을 고치기 | 치우침이 줄어듭니다 |
| 측정을 정확히 하기 | 치우침과 분산이 함께 줄어듭니다 |
173강 문제 1에서 본 그대로입니다. 크기는 치우침을 못 이깁니다.
그런데 보고에는 앞의 것만 적힙니다.
| 보고에 적히는가 | 무엇이 |
|---|---|
| 대개 적힙니다 | 표본오차와 신뢰수준 |
| 가끔 적힙니다 | 응답률과 설계효과 |
| 거의 안 적힙니다 | 표집틀의 빠짐과 측정 오차 |
적힌 오차가 전체 오차가 아닙니다. 적히지 않은 쪽이 더 클 수 있습니다.
이 문제에서 배우는 것. "오차 퍼센트"는 표본오차만 잰 값이고, 그것이 전체 오차라는 뜻이 아닙니다. 그리고 이 사실이 조사의 설계를 바꿉니다. 표본을 두 배로 늘려 오차를 퍼센트로 줄이는 것보다, 응답률을 올려 치우침을 줄이는 편이 총오차를 훨씬 크게 줄입니다. 그래서 표본 크기를 정하는 일은 정확도를 사는 일이 아니라 예산을 어디에 쓸지 정하는 일이며, 176강이 치우침 쪽을 자세히 다룹니다.
바로 확인 5.
확인 5-1. 총오차를 식으로 나누세요.
답. 이며 표본은 뒤의 항만 줄입니다.
확인 5-2. 둘이 같아지는 표본 크기를 식으로 쓰세요.
답. 입니다.
확인 5-3. 검산에서 표본 만일 때 치우침의 몫을 쓰세요.
답. 으로 오차의 대부분입니다.
| 상황 | 표본 크기 |
|---|---|
| 평균, 를 알 때 | n=z^{2}\sigma^{2}/e^ |
| 비율, 를 모를 때 | |
| 비율, 를 알 때 | n=z^{2}p(1-p)/e^ |
| 설계효과가 있을 때 | 위에 deff를 곱합니다 |
| 무응답이 있을 때 | 응답률로 나눕니다 |
| 층별 추정이 필요할 때 | 층마다 따로 계산합니다 |
| 자주 쓰는 값 | 값 |
|---|---|
| (퍼센트) | |
| 의 최댓값 | |
| 오차 퍼센트의 | |
| 오차 퍼센트의 | |
| 근사의 판정 기준 | , |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 오차를 절반으로 줄이려 표본을 두 배 합니다 | 네 배입니다 |
| 큰 이면 근사가 된다고 봅니다 | 기대 성공 수를 봅니다 |
| 발트 구간을 극단 비율에 씁니다 | 포함률이 까지 떨어집니다 |
| 설계효과를 안 넣습니다 | 곱으로 들어갑니다 |
| 응답률로만 나누고 끝냅니다 | 무응답이 무작위여야 옳습니다 |
| 전국 표본으로 층별 추정을 합니다 | 층별 오차가 배입니다 |
| 표본오차를 전체 오차로 봅니다 | 치우침이 더 클 수 있습니다 |
문제 6. 표준오차와 표본 크기 공식을 쓰세요.
답. 과 입니다.
문제 7. 세 요인이 에 미치는 영향을 쓰세요.
답. 허용 오차는 제곱에 반비례하고 표준편차와 는 제곱에 비례합니다.
문제 8. 검산에서 오차를 절반으로 줄일 때 추가로 드는 관측을 쓰세요.
답. , , , 으로 네 배씩 늘어납니다.
문제 9. 한 명을 더 넣을 때의 값어치가 어떻게 변하는지 쓰세요.
답. 에 반비례해 떨어집니다.
문제 10. 비율의 보수적 표본 크기를 식으로 쓰세요.
답. 입니다.
문제 11. 검산에서 오차 퍼센트와 퍼센트의 표본 크기를 쓰세요.
답. 과 입니다.
문제 12. 검산에서 , 일 때 발트 구간의 포함률을 쓰세요.
답. 입니다.
문제 13. 정규 근사의 판정 기준을 쓰고 , 을 판정하세요.
답. 이어야 하는데 뿐이라 근사가 안 됩니다.
문제 14. 접촉해야 할 수를 식으로 쓰세요.
답. 기본 에 설계효과를 곱하고 응답률로 나눕니다.
문제 15. 검산에서 설계효과 , 응답률 일 때 접촉 수를 쓰세요.
답. 명입니다.
문제 16. 층을 개로 나누면 층별 오차가 어떻게 되는지 쓰세요.
답. 배가 됩니다.
문제 17. 총오차를 식으로 나누고 표본이 줄이는 항을 쓰세요.
답. 이며 표본은 뒤의 항만 줄입니다.
문제 18. 검산에서 치우침 일 때 둘이 같아지는 표본 크기를 쓰세요.
답. 입니다.
심화 1. 검정력으로 표본 크기를 정하는 법을 정리하세요.
지금까지는 구간의 폭으로 정했습니다. 차이를 잡아내는 힘으로 정할 수도 있습니다.
두 집단을 견줄 때이며, 가 잡아내고 싶은 차이입니다.
| 정하는 것 | 흔한 값 | 영향 |
|---|---|---|
| 유의수준 | ||
| 검정력 | ||
| 효과 크기 | , , | 제곱에 반비례 |
효과 크기 에 검정력 이면 집단마다 명입니다. 이면 명으로 배 넘게 늘어납니다.
152강의 검정력이 여기서 설계로 들어옵니다. 그리고 작은 효과를 잡으려면 표본이 급격히 커지므로, 잡을 가치가 있는 최소 효과를 먼저 정해야 합니다.
사후 검정력은 쓰지 않습니다. 조사가 끝난 뒤 관측된 효과로 계산한 검정력은 값의 다른 표현일 뿐이라 새 정보를 주지 않습니다.
심화 2. 여러 개를 동시에 추정할 때를 정리하세요.
문제 4에서 층별 추정을 보았습니다. 일반적인 다중성 문제로 넓힙니다.
개의 구간을 동시에 만들면 전부 맞을 확률이 떨어집니다.
| 동시에 만드는 구간 수 | 각각 일 때 전부 맞을 확률 | 본페로니 기준 |
|---|---|---|
**개 시도의 구간을 동시에 보면 전부 맞을 확률이 **입니다.
본페로니로 고치면 가 커져 표본이 더 필요합니다. 에서 가 에서 이 되므로, 표본이 배 필요합니다.
167강 문제 5와 171강 문제 5의 다중성이 설계 단계에서 나타난 것입니다. 그리고 여기서는 미리 알 수 있으므로 설계에 넣을 수 있습니다.
심화 3. 비용을 넣은 최적 설계를 정리하세요.
문제 5에서 예산 배분을 이야기했습니다. 식으로 만들 수 있습니다.
층화에서 층마다 비용이 다르면 배분이 바뀝니다.
네이만 배분에 비용의 제곱근이 분모로 붙습니다. 비싼 층에서는 덜 뽑습니다.
군집추출에서도 같은 계산을 합니다. 뭉치를 뽑는 비용 과 뭉치 안에서 한 명을 뽑는 비용 가 있으면, 뭉치당 최적 인원이 나옵니다.
가 크면 뭉치당 적게 뽑고, 뭉치를 뽑는 비용이 크면 많이 뽑습니다. 173강 문제 3의 "뭉치를 많이, 뭉치당 적게"가 비용을 넣으면 정확한 수로 정해집니다.
총예산이 정해져 있으면 제약 최적화가 됩니다. 110강의 라그랑주 승수가 그대로 쓰이며, 정확도를 목적함수로 비용을 제약으로 두거나 그 반대로 둡니다.
심화 4. 순차 설계를 정리하세요.
표본 크기를 미리 정하지 않고 보면서 늘리는 방법입니다.
| 방법 | 내용 |
|---|---|
| 고정 표본 | 미리 정하고 끝까지 모읍니다 |
| 순차 검정 | 볼 때마다 멈출지 정합니다 |
| 집단 순차 | 몇 번의 정해진 시점에만 봅니다 |
둘째 줄에 큰 함정이 있습니다. 유의해질 때까지 보면서 늘리면 참으로 차이가 없어도 결국 유의해집니다. 이것을 옵셔널 스토핑이라 하고, 152강의 다중비교가 시간축에서 나타난 것입니다.
그래서 멈추는 규칙을 미리 정합니다. 볼 때마다 기준을 엄격히 하면 전체 를 지킬 수 있으며, 몇 번 볼지도 미리 정해야 합니다.
이득이 큽니다. 효과가 크면 일찍 멈춰 비용을 아끼고, 의료 시험에서는 나쁜 처치를 빨리 중단할 수 있습니다.
대가는 계산의 복잡함과 추정의 치우침입니다. 일찍 멈춘 시험의 효과 추정치는 과대평가되는 경향이 있으며, 그것도 보정해야 합니다.
심화 5. 표본 크기 계산의 불확실성을 정리하세요.
문제 1에서 를 알아야 계산된다고 했습니다. 그 어림이 틀리면 어떻게 되는지 봅니다.
를 퍼센트 낮게 잡으면 이 퍼센트 작아집니다. 그러면 실제 오차가 목표보다 커집니다.
| 어림의 오차 | 실제 오차가 목표의 몇 배 |
|---|---|
| 퍼센트 낮게 | 배 |
| 퍼센트 낮게 | 배 |
| 퍼센트 높게 | 배 |
낮게 잡는 쪽이 위험합니다. 그래서 어림에 확신이 없으면 높게 잡는 편이 안전합니다.
예비 조사로 를 추정하면 그 추정에도 오차가 있습니다. 예비 표본이 이면 의 상대 오차가 퍼센트라, 계산된 도 그만큼 흔들립니다.
단계적으로 정하는 방법이 있습니다. 먼저 일부를 모아 를 추정하고 남은 표본 크기를 다시 계산하는 것인데, 심화 4의 순차 설계와 같은 주의가 필요합니다. 결과를 보고 정하면 안 되고 만 보고 정해야 합니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 가중치 | 층별 표본이 비례가 아닐 때 | 175강 |
| 무응답 | 응답률로 나누는 것의 한계 | 176강 |
| 실험 설계 | 검정력으로 표본을 정합니다 | S8 |
| 모형 평가 | 검증 표본의 크기 | S9 |
셋째 줄이 실무에서 매일 나옵니다. 사용자 실험에서 얼마나 오래 돌려야 하는지가 정확히 심화 1의 계산이며, 효과가 작을수록 오래 걸립니다.
넷째 줄도 같은 계산입니다. 검증 표본이 개이고 정확도가 이면 표준오차가 라, 두 모형의 정확도 차이가 미만이면 구별할 수 없습니다. 성능 표에 소수점 셋째 자리를 적는 관행이 대개 근거가 없는 이유입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 허용 오차 | 참값에서 얼마까지 벗어나도 되는지입니다 | |
| 표준정규 분위수 | 퍼센트에서 입니다 | |
| SE | 표준오차 | 추정량의 표준편차입니다 |
| deff | 설계효과 | 단순임의 대비 분산의 비입니다 |
| 발트 구간 | Wald interval | 입니다 |
| 윌슨 구간 | Wilson interval | 극단 비율에서도 작동합니다 |
| 포함률 | coverage | 구간이 참값을 담는 실제 비율입니다 |
| MSE | 평균제곱오차 | 치우침의 제곱과 분산의 합입니다 |
| 검정력 | power | 참으로 차이가 있을 때 잡아낼 확률입니다 |
| 효과 크기 | effect size | 차이를 표준편차로 나눈 값입니다 |
| 옵셔널 스토핑 | optional stopping | 보면서 멈출지 정하는 것입니다 |
| 집단 순차 설계 | group sequential | 정해진 시점에만 중간 점검합니다 |
| 비표본오차 | non-sampling error | 표본 크기로 안 줄어드는 오차입니다 |
| 응답률 | response rate | 접촉 중 응답한 비율입니다 |
| 최소 검출 효과 | MDE | 주어진 표본으로 잡을 수 있는 최소 차이입니다 |
다음은 175강 층화와 가중치입니다. 이 강의가 표본을 얼마나 뽑을지를 다뤘고, 다음은 뽑은 표본으로 어떻게 추정할지를 다룹니다.
173강 문제 4에서 층화를 보았고 이 강의 문제 4에서 층별 배분의 문제를 보았습니다. 층마다 다른 비율로 뽑았다면 그대로 평균을 내면 틀립니다. 뽑힐 확률의 역수로 가중해야 하며, 그것이 다음 강의의 출발점입니다.
그리고 가중치가 두 번째 일을 합니다. 이 강의 문제 5에서 치우침을 줄이는 데 돈을 쓰는 편이 낫다고 했는데, 가중치가 그 방법 중 하나입니다. 알려진 인구 구성에 맞춰 표본을 보정하면 표집틀과 무응답이 만든 치우침을 일부 되돌릴 수 있습니다. 다만 그 보정에는 가정이 들어가고 분산이 늘어납니다.
import math
import numpy as np
rng = np.random.default_rng(20260911)
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 binom_pmf(n, p):
k = np.arange(n + 1)
lg = (np.array([math.lgamma(n + 1) - math.lgamma(i + 1) - math.lgamma(n - i + 1)
for i in k]))
with np.errstate(divide="ignore", invalid="ignore"):
lp = np.where(k > 0, k * np.log(max(p, 1e-300)), 0.0) + \
np.where(n - k > 0, (n - k) * np.log(max(1 - p, 1e-300)), 0.0)
return np.exp(lg + lp)
Z = 1.959964
# --- 문제 1: 표본오차는 어디서 오는가 -----------------------------------
print(" 표본평균의 흔들림이 표본오차입니다")
print(" Var(xbar) = Var(x)/n 이므로 표준오차가 sigma/sqrt(n) 입니다")
N1 = 400000
X = rng.normal(100.0, 15.0, N1)
sg = float(X.std())
print(" 모집단 표준편차가 %.4f 입니다" % sg)
print(" %s %s %s %s" % (pw("표본 크기", 12), rw("표본평균의 표준편차", 22),
rw("sigma/sqrt(n)", 16), rw("차이", 12)))
for n in [25, 100, 400, 1600]:
m = np.array([float(X[rng.choice(N1, n, replace=False)].mean()) for _ in range(4000)])
th = sg / np.sqrt(n)
print(" %s %22.6f %16.6f %12.6f"
% (pw(str(n), 12), float(m.std()), th, float(m.std()) - th))
print(" 허용 오차를 정하면 표본 크기가 정해집니다")
print(" e = z sigma/sqrt(n) 을 n 에 대해 풀면 n = z^2 sigma^2 / e^2 입니다")
print(" %s %s %s %s" % (pw("허용 오차 e", 14), rw("필요한 n", 14),
rw("실제 도달한 오차", 20), rw("목표와의 비", 14)))
for e in [5.0, 2.0, 1.0, 0.5]:
n = int(np.ceil(Z ** 2 * sg ** 2 / e ** 2))
m = np.array([float(X[rng.choice(N1, n, replace=False)].mean()) for _ in range(3000)])
got = float(np.quantile(np.abs(m - X.mean()), 0.95))
print(" %s %14d %20.6f %14.4f" % (pw("%.1f" % e, 14), n, got, got / e))
print(" 95 퍼센트가 e 안에 들어오도록 정한 값이고 수치가 그것을 확인합니다")
print(" 세 가지가 표본 크기를 정합니다")
print(" %s %s %s" % (pw("무엇을 바꾸는가", 20), rw("n 에 미치는 영향", 20),
rw("두 배로 하면", 16)))
for a, b, c in [("허용 오차 e", "제곱에 반비례", "4 분의 1"),
("모집단 표준편차", "제곱에 비례", "4 배"),
("신뢰수준의 z", "제곱에 비례", "4 배")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 20), rw(c, 16)))
print(" 셋 다 제곱으로 들어갑니다. 오차를 절반으로 줄이려면 표본이 네 배입니다")
# --- 문제 2: 왜 제곱근인가 ----------------------------------------------
print(" 독립인 관측을 더하면 분산이 더해지고 개수로 나누면 분산이 n 으로 나뉩니다")
print(" Var(sum) = n sigma^2 이고 Var(sum/n) = sigma^2/n 입니다")
print(" 표준편차는 그 제곱근이라 sqrt(n) 으로만 줄어듭니다")
print(" %s %s %s %s" % (pw("표본 크기", 12), rw("표준오차", 14),
rw("직전 대비", 12), rw("추가로 든 관측", 16)))
prev = None
for n in [100, 400, 1600, 6400, 25600]:
se = sg / np.sqrt(n)
print(" %s %14.6f %12s %16s"
% (pw(str(n), 12), se, "-" if prev is None else "%.4f" % (se / prev),
"-" if prev is None else str(n - prev_n)))
prev, prev_n = se, n
print(" 오차를 절반으로 줄일 때마다 추가로 드는 관측이 네 배씩 늘어납니다")
print(" 그래서 어느 지점을 넘으면 표본을 늘리는 것이 남는 장사가 아닙니다")
print(" %s %s %s %s" % (pw("표본 크기", 12), rw("표준오차", 14),
rw("한 명당 줄어드는 오차", 24), rw("처음 대비", 14)))
for n in [100, 1000, 10000, 100000]:
d = sg / np.sqrt(n) - sg / np.sqrt(n + 1)
print(" %s %14.6f %24.10f %14.6f"
% (pw(str(n), 12), sg / np.sqrt(n), d, d / (sg / np.sqrt(100) - sg / np.sqrt(101))))
print(" 10 만 명에서 한 명을 더 넣으면 오차가 100 명일 때의 0.0003 배만 줄어듭니다")
print(" 그 돈으로 자료의 질을 높이는 편이 나은지 따져야 합니다. 문제 5 의 주제입니다")
# --- 문제 3: 비율을 물을 때 --------------------------------------------
print(" 비율을 물으면 분산이 p(1-p) 라 모수에 딸려 갑니다")
print(" %s %s %s" % (pw("참 비율 p", 12), rw("p(1-p)", 12), rw("최댓값 대비", 14)))
for p in [0.05, 0.20, 0.50, 0.80]:
print(" %s %12.4f %14.4f" % (pw("%.2f" % p, 12), p * (1 - p), p * (1 - p) / 0.25))
print(" p = 0.5 에서 가장 크고 값이 0.25 입니다. 모르면 이것을 씁니다")
print(" n = z^2 p(1-p) / e^2 에 0.25 를 넣으면 n = z^2 / (4 e^2) 입니다")
print(" %s %s %s %s" % (pw("허용 오차", 12), rw("p 를 모를 때 n", 16),
rw("p = 0.2 로 알 때", 18), rw("아낀 비율", 14)))
for e in [0.05, 0.03, 0.02, 0.01]:
n0 = int(np.ceil(Z ** 2 * 0.25 / e ** 2))
n1 = int(np.ceil(Z ** 2 * 0.16 / e ** 2))
print(" %s %16d %18d %14.4f"
% (pw("%.2f" % e, 12), n0, n1, 1 - n1 / n0))
print(" 흔히 말하는 표본 1000 명 남짓에 오차 3 퍼센트가 여기서 나옵니다")
print(" 그런데 정규 근사라 작은 표본이나 극단 비율에서 깨집니다")
print(" 이항분포 전체를 더해 실제 포함률을 정확히 계산합니다")
print(" %s %s %s %s" % (pw("n", 8), rw("참 비율 p", 12), rw("발트 구간", 14),
rw("윌슨 구간", 14)))
for n, p in [(20, 0.50), (20, 0.10), (50, 0.05), (100, 0.03), (500, 0.01)]:
pmf = binom_pmf(n, p)
k = np.arange(n + 1)
ph = k / n
hw = Z * np.sqrt(np.maximum(ph * (1 - ph), 0.0) / n)
okw = (ph - hw <= p) & (p <= ph + hw)
cen = (ph + Z * Z / (2 * n)) / (1 + Z * Z / n)
hw2 = (Z / (1 + Z * Z / n)) * np.sqrt(ph * (1 - ph) / n + Z * Z / (4 * n * n))
okws = (cen - hw2 <= p) & (p <= cen + hw2)
print(" %s %12.2f %14.6f %14.6f"
% (pw(str(n), 8), p, float((pmf * okw).sum()), float((pmf * okws).sum())))
print(" 발트 구간은 극단 비율에서 포함률이 목표 0.95 에 한참 못 미칩니다")
print(" n = 500 이고 p = 0.01 이어도 0.95 를 못 맞춥니다. n 이 커도 p 가 작으면 깨집니다")
print(" %s %s %s" % (pw("판정 기준", 20), rw("n = 500, p = 0.01 에서", 24), rw("통과", 10)))
for a, v, ok in [("n p >= 10", 500 * 0.01, "아니오"), ("n (1-p) >= 10", 500 * 0.99, "예"),
("n p (1-p) >= 10", 500 * 0.01 * 0.99, "아니오")]:
print(" %s %24.4f %10s" % (pw(a, 20), v, rw(ok, 10)))
print(" 기대 성공 수가 10 을 못 넘으면 근사가 아니라 정확 방법을 씁니다")
# --- 문제 4: 설계와 무응답을 넣으면 -------------------------------------
print(" 173강의 설계효과와 무응답을 넣으면 필요한 표본이 늘어납니다")
print(" 최종 접촉 수 = 기본 n x 설계효과 / 응답률 입니다")
base = int(np.ceil(Z ** 2 * 0.25 / 0.03 ** 2))
print(" 허용 오차 3 퍼센트의 기본 n 은 %d 입니다" % base)
print(" %s %s %s %s" % (pw("설계효과", 12), rw("응답률", 10), rw("필요한 완료 수", 16),
rw("접촉해야 할 수", 16)))
for deff in [1.0, 1.5, 3.0]:
for rr in [0.9, 0.3]:
done = int(np.ceil(base * deff))
cont = int(np.ceil(done / rr))
print(" %s %10.1f %16d %16d" % (pw("%.1f" % deff, 12), rr, done, cont))
print(" 설계효과 3 이고 응답률 0.3 이면 1 만 명 넘게 접촉해야 합니다")
print(" 층마다 결과를 내야 하면 층별로 다시 계산합니다")
print(" %s %s %s %s" % (pw("몇 개로 나누는가", 18), rw("층당 표본", 14),
rw("층별 오차", 14), rw("전체 대비", 14)))
tot = 1068
for k in [1, 4, 16, 17]:
per = tot // k
err = Z * np.sqrt(0.25 / per)
print(" %s %14d %14.6f %14.4f"
% (pw(str(k), 18), per, err, err / (Z * np.sqrt(0.25 / tot))))
print(" 전국 1068 명으로 17 개 시도별 추정을 하면 층별 오차가 4 배가 넘습니다")
print(" 전국 추정과 층별 추정에 필요한 표본이 전혀 다릅니다")
print(" 표본 크기는 통계가 아니라 무엇을 몇 개나 추정할지가 정합니다")
# --- 문제 5: 늘려도 안 줄어드는 오차 ------------------------------------
print(" 총오차는 흔들림과 치우침으로 나뉩니다. 표본은 앞의 것만 줄입니다")
print(" MSE = 치우침^2 + 분산 이고 분산만 1/n 로 줄어듭니다")
print(" %s %s %s %s %s" % (pw("표본 크기", 12), rw("분산", 14), rw("치우침 0.5 의 제곱", 20),
rw("MSE", 14), rw("치우침의 몫", 14)))
b5 = 0.5
for n in [100, 1000, 10000, 100000]:
v = sg ** 2 / n
mse = b5 ** 2 + v
print(" %s %14.6f %20.6f %14.6f %14.6f"
% (pw(str(n), 12), v, b5 ** 2, mse, b5 ** 2 / mse))
print(" 표본이 10 만이면 오차의 대부분이 치우침입니다. 더 늘려도 소용없습니다")
print(" 둘이 같아지는 표본 크기를 계산할 수 있습니다")
print(" %s %s %s" % (pw("치우침 b", 12), rw("분산과 같아지는 n", 20),
rw("그때의 MSE", 14)))
for b in [2.0, 1.0, 0.5, 0.1]:
ns = sg ** 2 / b ** 2
print(" %s %20.1f %14.6f" % (pw("%.1f" % b, 12), ns, 2 * b ** 2))
print(" 치우침이 0.1 이면 표본 2 만 2 천에서 둘이 같아집니다")
print(" 그보다 크게 모으는 것은 치우침을 줄이는 데 쓰는 편이 낫습니다")
print(" 예산을 나누는 문제가 됩니다")
print(" %s %s" % (pw("돈을 쓸 곳", 22), rw("무엇이 줄어드는가", 26)))
for a, b in [("표본을 늘리기", "분산만 줄어듭니다"),
("응답률을 올리기", "치우침이 줄어듭니다"),
("표집틀을 고치기", "치우침이 줄어듭니다"),
("측정을 정확히 하기", "치우침과 분산이 함께 줄어듭니다")]:
print(" %s %s" % (pw(a, 22), rw(b, 26)))
print(" 173강 문제 1 에서 본 그대로입니다. 크기는 치우침을 못 이깁니다")
print(" 보고할 때는 표본오차만 적고 나머지를 안 적는 것이 문제입니다")
print(" %s %s" % (pw("보고에 적히는가", 20), rw("무엇이", 28)))
for a, b in [("대개 적힙니다", "표본오차와 신뢰수준"),
("가끔 적힙니다", "응답률과 설계효과"),
("거의 안 적힙니다", "표집틀의 빠짐과 측정 오차")]:
print(" %s %s" % (pw(a, 20), rw(b, 28)))
print(" 적힌 오차가 전체 오차가 아닙니다. 적히지 않은 쪽이 더 클 수 있습니다")
# 표본평균의 흔들림이 표본오차입니다
# Var(xbar) = Var(x)/n 이므로 표준오차가 sigma/sqrt(n) 입니다
# 모집단 표준편차가 15.0033 입니다
# 표본 크기 표본평균의 표준편차 sigma/sqrt(n) 차이
# 25 2.995158 3.000651 -0.005494
# 100 1.477470 1.500326 -0.022856
# 400 0.761569 0.750163 0.011406
# 1600 0.381251 0.375081 0.006170
# 허용 오차를 정하면 표본 크기가 정해집니다
# e = z sigma/sqrt(n) 을 n 에 대해 풀면 n = z^2 sigma^2 / e^2 입니다
# 허용 오차 e 필요한 n 실제 도달한 오차 목표와의 비
# 5.0 35 4.958565 0.9917
# 2.0 217 1.989760 0.9949
# 1.0 865 1.010772 1.0108
# 0.5 3459 0.491942 0.9839
# 95 퍼센트가 e 안에 들어오도록 정한 값이고 수치가 그것을 확인합니다
# 세 가지가 표본 크기를 정합니다
# 무엇을 바꾸는가 n 에 미치는 영향 두 배로 하면
# 허용 오차 e 제곱에 반비례 4 분의 1
# 모집단 표준편차 제곱에 비례 4 배
# 신뢰수준의 z 제곱에 비례 4 배
# 셋 다 제곱으로 들어갑니다. 오차를 절반으로 줄이려면 표본이 네 배입니다
# 독립인 관측을 더하면 분산이 더해지고 개수로 나누면 분산이 n 으로 나뉩니다
# Var(sum) = n sigma^2 이고 Var(sum/n) = sigma^2/n 입니다
# 표준편차는 그 제곱근이라 sqrt(n) 으로만 줄어듭니다
# 표본 크기 표준오차 직전 대비 추가로 든 관측
# 100 1.500326 - -
# 400 0.750163 0.5000 300
# 1600 0.375081 0.5000 1200
# 6400 0.187541 0.5000 4800
# 25600 0.093770 0.5000 19200
# 오차를 절반으로 줄일 때마다 추가로 드는 관측이 네 배씩 늘어납니다
# 그래서 어느 지점을 넘으면 표본을 늘리는 것이 남는 장사가 아닙니다
# 표본 크기 표준오차 한 명당 줄어드는 오차 처음 대비
# 100 1.500326 0.0074458305 1.000000
# 1000 0.474445 0.0002370445 0.031836
# 10000 0.150033 0.0000075011 0.001007
# 100000 0.047444 0.0000002372 0.000032
# 10 만 명에서 한 명을 더 넣으면 오차가 100 명일 때의 0.0003 배만 줄어듭니다
# 그 돈으로 자료의 질을 높이는 편이 나은지 따져야 합니다. 문제 5 의 주제입니다
# 비율을 물으면 분산이 p(1-p) 라 모수에 딸려 갑니다
# 참 비율 p p(1-p) 최댓값 대비
# 0.05 0.0475 0.1900
# 0.20 0.1600 0.6400
# 0.50 0.2500 1.0000
# 0.80 0.1600 0.6400
# p = 0.5 에서 가장 크고 값이 0.25 입니다. 모르면 이것을 씁니다
# n = z^2 p(1-p) / e^2 에 0.25 를 넣으면 n = z^2 / (4 e^2) 입니다
# 허용 오차 p 를 모를 때 n p = 0.2 로 알 때 아낀 비율
# 0.05 385 246 0.3610
# 0.03 1068 683 0.3605
# 0.02 2401 1537 0.3599
# 0.01 9604 6147 0.3600
# 흔히 말하는 표본 1000 명 남짓에 오차 3 퍼센트가 여기서 나옵니다
# 그런데 정규 근사라 작은 표본이나 극단 비율에서 깨집니다
# 이항분포 전체를 더해 실제 포함률을 정확히 계산합니다
# n 참 비율 p 발트 구간 윌슨 구간
# 20 0.50 0.958611 0.958611
# 20 0.10 0.876037 0.956826
# 50 0.05 0.919867 0.962224
# 100 0.03 0.802162 0.968772
# 500 0.01 0.871406 0.962327
# 발트 구간은 극단 비율에서 포함률이 목표 0.95 에 한참 못 미칩니다
# n = 500 이고 p = 0.01 이어도 0.95 를 못 맞춥니다. n 이 커도 p 가 작으면 깨집니다
# 판정 기준 n = 500, p = 0.01 에서 통과
# n p >= 10 5.0000 아니오
# n (1-p) >= 10 495.0000 예
# n p (1-p) >= 10 4.9500 아니오
# 기대 성공 수가 10 을 못 넘으면 근사가 아니라 정확 방법을 씁니다
# 173강의 설계효과와 무응답을 넣으면 필요한 표본이 늘어납니다
# 최종 접촉 수 = 기본 n x 설계효과 / 응답률 입니다
# 허용 오차 3 퍼센트의 기본 n 은 1068 입니다
# 설계효과 응답률 필요한 완료 수 접촉해야 할 수
# 1.0 0.9 1068 1187
# 1.0 0.3 1068 3560
# 1.5 0.9 1602 1780
# 1.5 0.3 1602 5340
# 3.0 0.9 3204 3560
# 3.0 0.3 3204 10680
# 설계효과 3 이고 응답률 0.3 이면 1 만 명 넘게 접촉해야 합니다
# 층마다 결과를 내야 하면 층별로 다시 계산합니다
# 몇 개로 나누는가 층당 표본 층별 오차 전체 대비
# 1 1068 0.029987 1.0000
# 4 267 0.059974 2.0000
# 16 66 0.120627 4.0227
# 17 62 0.124458 4.1504
# 전국 1068 명으로 17 개 시도별 추정을 하면 층별 오차가 4 배가 넘습니다
# 전국 추정과 층별 추정에 필요한 표본이 전혀 다릅니다
# 표본 크기는 통계가 아니라 무엇을 몇 개나 추정할지가 정합니다
# 총오차는 흔들림과 치우침으로 나뉩니다. 표본은 앞의 것만 줄입니다
# MSE = 치우침^2 + 분산 이고 분산만 1/n 로 줄어듭니다
# 표본 크기 분산 치우침 0.5 의 제곱 MSE 치우침의 몫
# 100 2.250977 0.250000 2.500977 0.099961
# 1000 0.225098 0.250000 0.475098 0.526208
# 10000 0.022510 0.250000 0.272510 0.917398
# 100000 0.002251 0.250000 0.252251 0.991076
# 표본이 10 만이면 오차의 대부분이 치우침입니다. 더 늘려도 소용없습니다
# 둘이 같아지는 표본 크기를 계산할 수 있습니다
# 치우침 b 분산과 같아지는 n 그때의 MSE
# 2.0 56.3 8.000000
# 1.0 225.1 2.000000
# 0.5 900.4 0.500000
# 0.1 22509.8 0.020000
# 치우침이 0.1 이면 표본 2 만 2 천에서 둘이 같아집니다
# 그보다 크게 모으는 것은 치우침을 줄이는 데 쓰는 편이 낫습니다
# 예산을 나누는 문제가 됩니다
# 돈을 쓸 곳 무엇이 줄어드는가
# 표본을 늘리기 분산만 줄어듭니다
# 응답률을 올리기 치우침이 줄어듭니다
# 표집틀을 고치기 치우침이 줄어듭니다
# 측정을 정확히 하기 치우침과 분산이 함께 줄어듭니다
# 173강 문제 1 에서 본 그대로입니다. 크기는 치우침을 못 이깁니다
# 보고할 때는 표본오차만 적고 나머지를 안 적는 것이 문제입니다
# 보고에 적히는가 무엇이
# 대개 적힙니다 표본오차와 신뢰수준
# 가끔 적힙니다 응답률과 설계효과
# 거의 안 적힙니다 표집틀의 빠짐과 측정 오차
# 적힌 오차가 전체 오차가 아닙니다. 적히지 않은 쪽이 더 클 수 있습니다