콘텐츠로 이동

두 표본평균 차의 표본분포

개요

새 교습법이 기존 교습법보다 나은지 알고 싶다고 하자. 두 반의 평균 점수를 내어 78.4와 74.1을 얻었다면 차가 4.3점이다. 그런데 반을 다시 짜서 같은 시험을 보게 하면 4.3이 나오지 않는다. 2.9가 나오고, 다시 하면 5.6이 나온다. 평균이 그랬듯 두 평균의 차도 표본이 바뀌면 함께 바뀌는 확률변수다.

두 모집단을 비교할 때 우리가 보는 것은 대개 이 차 \(\bar{X}_1 - \bar{X}_2\)이다. 그 표본분포가 적절한 검정통계량, 신뢰구간 공식, 기준분포를 결정한다. 그런데 답이 하나로 끝나지 않고 상황에 따라 갈린다. 모분산에 관해 무엇을 아는지와 표본이 얼마나 큰지에 따라 정규분포를 쓰기도 하고 \(t\) 분포를 쓰기도 하며, \(t\)를 쓸 때도 자유도가 달라진다. 이 쪽은 그 갈림길의 지도다.

설정

\(X_1^{(1)}, \dots, X_{n_1}^{(1)}\)을 평균 \(\mu_1\), 분산 \(\sigma_1^2\)인 모집단 1에서 뽑은 i.i.d. 표본이라 하고, \(X_1^{(2)}, \dots, X_{n_2}^{(2)}\)를 평균 \(\mu_2\), 분산 \(\sigma_2^2\)인 모집단 2에서 뽑은 i.i.d. 표본이라 하자. 두 표본은 독립이라고 가정한다.

두 표본이 독립이라는 가정에서 차의 기댓값과 분산이 곧바로 나오며, 이 두 줄은 앞으로 볼 다섯 경우 어디에서나 그대로 성립한다. 기댓값은 그냥 빼면 된다.

\[ E[\bar{X}_1 - \bar{X}_2] = \mu_1 - \mu_2 \]

분산은 빼지 않고 더한다.

\[ \text{Var}(\bar{X}_1 - \bar{X}_2) = \frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2} \]

차를 구하는데 분산을 더한다는 것이 처음에는 어색하다. 그러나 두 추정값 각각의 불확실성이 차의 불확실성에 함께 얹히기 때문이다. 어느 쪽이 흔들려도 차는 흔들린다.

앞으로 볼 다섯 경우는 이 분산 안의 모르는 \(\sigma_i^2\)을 무엇으로 대신하느냐, 그리고 그 대체 때문에 기준분포가 어떻게 바뀌느냐로 나뉜다.

경우 A: 모분산을 알 때는 정규분포다

\(\sigma_1^2\)과 \(\sigma_2^2\)을 안다면 차의 분산을 그대로 쓸 수 있다. 여기에 두 모집단이 정규라는 가정을 더하면 표준화한 양이 정확히 표준정규를 따른다. 정규분포의 선형결합이 다시 정규이기 때문이다. 모집단이 정규가 아니면 같은 식이 근사로만 성립하며, 그 근사를 대 주는 것이 다음 경우의 중심극한정리다.

\[ Z = \frac{(\bar{X}_1 - \bar{X}_2) - (\mu_1 - \mu_2)}{\sqrt{\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}}} \sim N(0, 1) \]

실제로 모분산을 아는 일은 거의 없다. 이 경우는 뒤의 네 경우가 무엇을 흉내 내려 하는지를 보여 주는 기준점으로 보는 것이 맞다.

경우 B: 표본이 크면 표본분산으로 갈아 끼운다

\(n_1\)과 \(n_2\)가 모두 크면 사정이 좋다. 중심극한정리가 두 표본평균의 정규성을 보장하고, \(S_i^2\)이 \(\sigma_i^2\)에 충분히 가까워져 모르는 값을 아는 값으로 바꿔도 기준분포가 그대로 정규로 남는다.

\[ Z = \frac{(\bar{X}_1 - \bar{X}_2) - (\mu_1 - \mu_2)}{\sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}}} \approx N(0, 1) \]

경우 C: 정규모집단에 등분산이면 합동 t

표본이 작으면 \(S_i^2\)으로 갈아 끼운 대가를 치러야 한다. 그 대가가 \(t\) 분포이며, 대신 모집단이 정규라는 가정이 필요하다. 여기에 더해 두 모분산이 같다면(\(\sigma_1^2 = \sigma_2^2 = \sigma^2\)) 추정할 분산이 하나뿐이므로 두 표본의 정보를 모두 모아 쓰는 것이 자연스럽다.

\[ T = \frac{(\bar{X}_1 - \bar{X}_2) - (\mu_1 - \mu_2)}{\sqrt{S_p^2\!\left(\frac{1}{n_1} + \frac{1}{n_2}\right)}} \sim t_{n_1 + n_2 - 2} \]

여기 쓰인 합동분산은 두 표본의 편차제곱합을 한데 모아 전체 자유도로 나눈 값이다.

\[ S_p^2 = \frac{(n_1 - 1)S_1^2 + (n_2 - 1)S_2^2}{n_1 + n_2 - 2} = \frac{\sum_{i=1}^{n_1}(X_i^{(1)} - \bar{X}_1)^2 + \sum_{i=1}^{n_2}(X_i^{(2)} - \bar{X}_2)^2}{n_1 + n_2 - 2} \]

두 표본분산의 단순평균이 아니라 자유도로 가중한 평균이라는 점이 중요하다. 표본이 큰 쪽의 분산 추정이 더 정밀하므로 더 큰 몫을 받는다. 분모의 \(n_1 + n_2 - 2\)는 각 표본에서 평균을 하나씩 추정하느라 자유도를 하나씩 잃은 결과이고, 그것이 그대로 \(t\) 분포의 자유도가 된다.

경우 D: 분산이 다르면 Welch의 t

분산이 같다는 보장이 없으면 합동을 할 수 없다. 각 표본의 분산을 따로 써야 하는데, 그러면 통계량이 정확한 \(t\) 분포를 따르지 않는다. 그래도 자유도를 잘 고르면 \(t\) 분포로 충분히 잘 근사된다.

\[ T = \frac{(\bar{X}_1 - \bar{X}_2) - (\mu_1 - \mu_2)}{\sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}}} \sim t_\nu \]

그 자유도가 Welch–Satterthwaite 자유도이며, 두 분산과 두 표본크기의 상대적 크기에 따라 정해진다.

\[ \nu = \frac{\left(\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}\right)^2}{\frac{\left(\frac{S_1^2}{n_1}\right)^2}{n_1 - 1} + \frac{\left(\frac{S_2^2}{n_2}\right)^2}{n_2 - 1}} \]

정수가 아닌 값이 나오는 것이 보통이고 소프트웨어는 그대로 쓴다. 두 표본의 크기와 분산이 서로 비슷하면 \(\nu\)가 합동 \(t\)의 자유도 \(n_1 + n_2 - 2\) 가까이 올라가고, 한쪽이 크게 다르면 작은 쪽 표본이 정하는 자유도 가까이로 내려간다. 등분산일 때 Welch가 잃는 것이 자유도 몇 개뿐이라는 말은 이 성질에서 나온다.

경우 E: 자유도를 손으로 잡아야 할 때

Welch 공식은 손으로 계산하기 번거롭다. 계산기밖에 없는 자리에서는 보수적인(안전한) 대안을 쓴다.

\[ \text{df} = \min(n_1 - 1, \; n_2 - 1) \]

이는 참 자유도를 언제나 과소추정하므로 임계값이 커지고 신뢰구간이 더 넓어진다. 틀리더라도 넓은 쪽으로 틀린다는 것이 이 선택의 논리다.

\[ T = \frac{(\bar{X}_1 - \bar{X}_2) - (\mu_1 - \mu_2)}{\sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}}} \sim t_{\min(n_1-1, \, n_2-1)} \]

다섯 갈래 가운데 무엇을 고를 것인가

다섯 경우를 갈라 놓는 물음은 셋뿐이다. 그 셋을 차례로 물으면 지도가 된다.

두 평균 차의 다섯 갈래

갈림길마다 무엇이 걸려 있는지를 보아 두자. 첫 물음은 분모에 상수를 넣을 수 있는가를 묻는다. 모분산을 알면 표준오차가 상수이므로 기준분포가 \(N(0,1)\)에서 끝난다. 둘째 물음은 \(S_i^2\)으로 갈아 끼운 대가를 무시해도 되는가를 묻는다. 표본이 크면 \(S_i^2\)이 \(\sigma_i^2\)에 충분히 가까워 대가가 사실상 없고, 작으면 그 대가가 \(t\) 분포로 나타난다. 셋째 물음은 분산을 하나로 합쳐 추정해도 되는가를 묻는다.

두 번째 갈림길에서 아래로 내려가는 순간 정규모집단 가정이 새로 들어온다는 점을 놓치지 말아야 한다. 위쪽 두 갈래는 중심극한정리로 버티므로 모집단의 모양을 묻지 않지만, 아래쪽 세 갈래는 표본이 작아 그 정리에 기댈 수 없으므로 모집단이 정규라는 가정을 대신 내야 한다. 지도의 위아래를 가르는 것이 이 한 줄이다.

지금까지의 다섯 경우를 조건에 따라 한 줄로 이으면 이렇다. 모분산을 알면 \(Z\)를 쓰고 기준분포는 \(N(0,1)\)이다. 모르더라도 두 표본이 모두 크면 표본분산으로 대신하고 여전히 \(Z\)와 \(N(0,1)\)을 쓰되 이번에는 근사다. 표본이 작으면 정규모집단을 가정해야 하며, 그 안에서 다시 갈린다. 분산이 같다고 볼 수 있으면 합동 \(t\)에 자유도 \(n_1+n_2-2\), 같다고 볼 수 없으면 Welch의 \(t\)에 Satterthwaite 자유도, 그 계산이 번거로우면 보수적 \(t\)에 자유도 \(\min(n_1-1, n_2-1)\)이다.

실무에서는 Welch를 기본으로 둔다

지금까지 짚은 다섯 갈래는 "조건을 알 때 무엇을 쓰는가"를 정리한 것이다. 그런데 현실에서는 \(\sigma_1^2 = \sigma_2^2\)인지를 모른다. 그렇다고 등분산 검정을 먼저 하고 그 결과로 합동 \(t\)와 Welch \(t\)를 고르는 2단계 절차를 쓰면 안 된다. 자료를 보고 방법을 고르는 순간 전체 유의수준이 통제되지 않고, 게다가 등분산 검정 자체의 검정력이 낮아 그 판정을 믿을 수도 없다(5.9절).

처음부터 Welch \(t\)를 쓰는 것이 요즘의 권고다. 등분산일 때 잃는 것은 자유도가 조금 줄어드는 정도이고(다음 쪽에서 수치로 확인한다), 이분산일 때 얻는 것은 크다. 합동 \(t\)가 필요한 경우는 등분산이 설계로 보장되거나 이론적으로 확실할 때뿐이다.

소프트웨어의 기본값은 갈린다. R의 t.test()는 Welch가 기본이어서(var.equal = FALSE) 아무 생각 없이 써도 권고를 따르게 된다. 반면 SciPy의 ttest_ind()는 합동 \(t\)가 기본이다(equal_var=True). Welch를 쓰려면 equal_var=False를 직접 넣어야 한다.

R로 돌린 결과와 파이썬으로 돌린 결과가 달라 당황하는 일이 흔한데, 원인이 대개 여기에 있다.

한 가지 덧붙일 것이 있다. 이 책의 모의실험 코드에는 equal_var를 적지 않은 ttest_ind 호출이 여럿 있다. 실수가 아니다. 모의실험은 대개 두 집단을 같은 분산으로 만들어 놓고 돌리므로 그 자리에서는 기본값이 옳다. 위 경고는 분산을 모르는 실제 자료를 다룰 때의 이야기다.

합동이 오히려 필수인 자리도 있다. 르빈 검정은 절대편차 \(|X_{ij} - \bar X_i|\)에 분산분석을 적용하는 것으로 정의되는데, 그 \(F\) 통계량이 곧 합동 \(t\)의 제곱이다. 여기서 equal_var=False를 쓰면 scipy.stats.levene과 다른 값이 나온다.

두 교대조의 컵케이크

모분산을 아는 경우 A를 숫자로 따라가 보자.

문제. 어떤 제과점에 두 교대조가 있다. A 교대조: \(\mu_A = 130\)g, \(\sigma_A = 4\)g. B 교대조: \(\mu_B = 125\)g, \(\sigma_B = 3\)g. \(n_A = n_B = 40\)일 때 \(P(|\bar{X}_A - \bar{X}_B| > 6)\)을 구하라.

풀이

\(\sigma_A, \sigma_B\)를 알고 있으므로 경우 A이다:

\[ \text{SE} = \sqrt{\frac{4^2}{40} + \frac{3^2}{40}} = \sqrt{\frac{16 + 9}{40}} = \sqrt{0.625} \approx 0.7906 \]

상단꼬리:

\[ Z = \frac{6 - (130 - 125)}{0.7906} = \frac{1}{0.7906} \approx 1.265 \]
\[ P(\bar{X}_A - \bar{X}_B > 6) = P(Z > 1.265) \approx 0.1030 \]

하단꼬리:

\[ Z = \frac{-6 - (130 - 125)}{0.7906} = \frac{-11}{0.7906} \approx -13.91 \]
\[ P(\bar{X}_A - \bar{X}_B < -6) \approx 0.0000 \]

답: \(P(|\bar{X}_A - \bar{X}_B| > 6) \approx 0.1030\).

import numpy as np
from scipy import stats

se = np.sqrt(16/40 + 9/40)
z_upper = (6 - 5) / se
z_lower = (-6 - 5) / se
prob = stats.norm.sf(z_upper) + stats.norm.cdf(z_lower)
print(f"P(|X_bar_A - X_bar_B| > 6) = {prob:.4f}")

출력:

P(|X_bar_A - X_bar_B| > 6) = 0.1030

차의 표준오차

표준오차만 따로 구하는 연습도 해 둘 만하다. 두 분산을 각각 표본크기로 나눈 뒤 더하고, 마지막에 제곱근을 취한다.

문제. 모집단 A: \(\mu_A = 100\), \(\sigma_A = 15\), \(n_A = 36\). 모집단 B: \(\mu_B = 110\), \(\sigma_B = 20\), \(n_B = 49\). \(\text{SE}(\bar{X}_A - \bar{X}_B)\)를 구하라.

풀이
\[ \text{SE} = \sqrt{\frac{15^2}{36} + \frac{20^2}{49}} = \sqrt{6.25 + 8.16} = \sqrt{14.41} \approx 3.80 \]

이 결과가 기대는 것

다섯 갈래가 공유하는 출발점은 독립성이다. 두 표본이 서로 독립이고 각 표본 안의 관측값도 독립이어야 \(\text{Var}(\bar X_1 - \bar X_2) = \sigma_1^2/n_1 + \sigma_2^2/n_2\)이라는 두 번째 줄이 성립한다. 이것이 깨지면 갈래를 고르기도 전에 분산 공식 자체가 틀린다. 대응 자료에 이 공식을 쓰면 공분산 항이 빠져 폭을 잘못 잡는다(연습문제 4).

정규성은 어디에 쓰였는가. 경우 A에서 \(Z\)가 정확히 \(N(0,1)\)이 되는 것은 두 모집단이 정규일 때뿐이다. 다만 정규가 아니어도 \(n\)이 커지면 중심극한정리가 같은 결론을 근사로 돌려주며, 그 자리가 곧 경우 B다. 표본이 크면 모집단의 모양을 잊어도 된다는 것이 이 두 경우의 요지다.

표본이 작으면 잊을 수 없다. 경우 C~E에서는 정규성이 세 곳에 들어간다. \(\bar X_i\)가 정규여야 \(T\)의 분자가 정규가 되고, \(S_i^2\)이 카이제곱이어야 분모가 제자리를 잡으며, 그 둘이 독립이어야 비가 \(t\) 분포가 된다. 마지막 두 조건은 정규모집단에서만 성립한다.

등분산은 경우 C에서만 쓰인다. 두 표본의 편차제곱합을 한 \(\sigma^2\)에 대한 정보로 보고 합치는 단계다. 두 분산이 다르면 합칠 공통값이 아예 없다.

표본을 키우면 해결되는가. 정규성에 관해서는 그렇다. \(\bar X_1 - \bar X_2\)는 1차 적률 계열이므로 중심극한정리가 듣고, 모집단이 아무리 치우쳐 있어도 \(n\)이 커지면 차의 표본분포가 정규에 다가간다. 그것이 경우 B가 존재하는 이유다.

그러나 설계의 불균형은 고쳐 주지 않는다. 등분산이 틀렸는데 표본크기까지 다르면 합동 \(t\)가 겨누는 분포 자체가 \(t_{n_1+n_2-2}\)에서 벗어나고, 그 어긋남은 두 표본을 같은 비율로 키워도 그대로 남는다. 어긋남의 크기가 표본크기가 아니라 \((n_1,n_2)\)와 \((\sigma_1,\sigma_2)\)의 짝짓기로 정해지기 때문이다(연습문제 7). 연습문제 6에서 명목 5% 검정의 실제 오류율이 0.214까지 부풀고 반대 방향에서는 0.005까지 주저앉는 것을 보게 되는데, 같은 표에서 표본크기만 맞추면 분산이 세 배 달라도 0.054로 버틴다. 문제는 이분산 자체가 아니라 이분산과 불균형의 조합이다.

연습문제

연습문제 1. 모집단 A: \(\sigma_A = 15\), \(n_A = 36\). 모집단 B: \(\sigma_B = 20\), \(n_B = 49\). \(\mathrm{SE}(\bar X_A - \bar X_B)\)를 계산하라.

풀이

독립성에 의해:

\[ \mathrm{Var}(\bar X_A - \bar X_B) = \sigma_A^2/n_A + \sigma_B^2/n_B = 225/36 + 400/49 = 6.25 + 8.16 = 14.41 \]

\(\mathrm{SE} \approx 3.80\).

연습문제 2. 차의 분포. \(\bar X_A, \bar X_B\)가 독립이고 (근사적으로) 정규일 때 \(\bar X_A - \bar X_B\)의 분포를 유도하라.

풀이

독립인 정규확률변수의 선형결합은 정규분포이다. 따라서:

\[ \bar X_A - \bar X_B \sim N(\mu_A - \mu_B, \sigma_A^2/n_A + \sigma_B^2/n_B) \]

\(H_0: \mu_A = \mu_B\) 아래에서 중심화된 통계량은 \(Z = (\bar X_A - \bar X_B)/\sqrt{\sigma_A^2/n_A + \sigma_B^2/n_B} \sim N(0, 1)\)이다.

\(\sigma_A, \sigma_B\)를 모르면 \(s_A, s_B\)로 대체하고 (자유도를 조정한 Welch의) \(t\) 분포를 사용한다.

연습문제 3. 표본을 어떻게 나눌 것인가. 전체 표본수 \(N = n_1 + n_2\)가 고정되어 있다. \(\text{Var}(\bar X_1 - \bar X_2)\)를 가장 작게 만드는 배분을 등분산일 때와 이분산일 때 각각 구하라.

풀이

차의 분산은

\[ \frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2} \]

이다. 등분산이면 이 값이 \(\sigma^2(1/n_1 + 1/n_2)\)이고, \(n_1 + n_2\)가 고정일 때 \(1/n_1 + 1/n_2\)는 \(n_1 = n_2\)에서 최소가 된다(산술-조화 평균 부등식). 반씩 나누는 것이 최적이다.

이분산이면 \(n_2 = N - n_1\)을 넣고 \(n_1\)로 미분해 0으로 두면

\[ \frac{n_1}{n_2} = \frac{\sigma_1}{\sigma_2} \]

을 얻는다. 변동이 큰 집단에 표본을 더 준다. 그쪽 평균이 더 많이 흔들리므로 흔들림을 줄일 여지도 그쪽에 더 많다.

조건이 하나 더 붙으면 답도 달라진다.

  • 관측 비용이 다르면 \(n_1/n_2 = (\sigma_1/\sigma_2)\sqrt{c_2/c_1}\)이 최적이다. 비싼 쪽을 덜 뽑는다.
  • 한쪽 모집단이 작으면(희귀질환 환자군 등) 그쪽을 다 쓰고 반대쪽을 늘리는 수밖에 없다. 다만 비를 3:1 이상으로 늘려도 이득이 별로 없다. 1:1 배분에 견준 차의 분산이 비 \(r\)에 대해 \((1+r)^2/(4r)\)배로 커지는데, \(r = 3\)이면 1.33배, \(r = 5\)면 1.8배다. 같은 폭을 얻으려면 그만큼 표본을 더 써야 한다는 뜻이다.

불균형은 여기서 이미 대가를 치른다. 표본분포가 넓어지는 것이 그 대가이며, 뒤에서 볼 이분산과 겹치면 넓어지는 데 그치지 않고 기준분포 자체가 어긋난다.

연습문제 4. 대응 설계에서는 분산이 달라진다. 이 쪽의 모든 결과는 두 표본이 독립이라는 데서 나왔다. 같은 대상을 두 번 재는 것처럼 자료가 대응되어 있으면 차의 분산이 어떻게 달라지는가?

풀이

독립일 때 쓴 두 줄 가운데 기댓값은 그대로다. 달라지는 것은 분산이다. 짝 \(i\)에서 \(D_i = X_{1i} - X_{2i}\)로 두면

\[ \text{Var}(D) = \text{Var}(X_1) + \text{Var}(X_2) - 2\,\text{Cov}(X_1, X_2) \]

이고, 같은 대상을 두 번 잰 자료에서 흔히 그렇듯 \(\text{Cov}(X_1, X_2) > 0\)이면 이 값이 독립일 때의 \(\text{Var}(X_1) + \text{Var}(X_2)\)보다 작다. 짝짓기가 대상 간 변동을 차에서 걷어 내기 때문이다.

그래서 대응 자료에 독립 공식을 쓰면 표준오차를 실제보다 크게 잡게 된다. 반대로 상관이 음수인 자료에 쓰면 실제보다 작게 잡는다. 어느 쪽이든 그려야 할 표본분포의 폭이 틀린다.

대응 자료에서 실제로 보아야 할 것은 \(\bar X_1 - \bar X_2\)가 아니라 차 \(D_i\)들의 평균 \(\bar D\)이며, 그 표본분포는 두 표본 문제가 아니라 일표본 문제로 돌아간다. 5.4절에서 본 \(\bar X\)의 표본분포가 그대로 쓰인다.

연습문제 5. Welch–Satterthwaite 자유도 \(\nu\)는 언제 합동 자유도 \(n_1+n_2-2\)에 가까워지고 언제 \(\min(n_1-1, n_2-1)\)까지 내려가는가? 아래 다섯 설계에서 \(\nu\)를 계산해 확인하라.

풀이

\(a = s_1^2/n_1\), \(b = s_2^2/n_2\)로 두면 공식이

\[ \nu = \frac{(a+b)^2}{\dfrac{a^2}{n_1-1} + \dfrac{b^2}{n_2-1}} \]

이다. 계산하면 다음과 같다.

\((n_1, n_2)\) \((s_1, s_2)\) \(\nu\) \(n_1+n_2-2\) \(\min(n_i-1)\)
(20, 20) (1, 1) 38.00 38 19
(20, 20) (1, 3) 23.17 38 19
(10, 40) (1, 1) 13.86 48 9
(10, 40) (1, 3) 43.84 48 9
(10, 40) (3, 1) 9.51 48 9

\(\nu\)를 정하는 것은 두 항 \(a\)와 \(b\)의 균형이다. 두 항이 비슷하게 기여하면 자유도가 합쳐져 위로 올라가고, 한 항이 표준오차를 거의 다 차지하면 그 집단의 자유도만 남아 아래로 내려간다.

첫 행이 상한이다. 균형에 등분산이면 \(\nu\)가 정확히 38로 합동 자유도와 같아진다. 셋째 행을 보라. 분산이 같은데도 표본크기가 4배 차이 나면 \(\nu\)가 13.86까지 떨어진다. 작은 집단이 표준오차의 80%를 만들기 때문이다. 다섯째 행에서는 분산까지 작은 집단 쪽이 커서 \(\nu = 9.51\)로 \(\min(n_i-1) = 9\)에 거의 붙는다.

넷째 행은 반대 방향이다. 큰 분산이 큰 표본과 짝지어지면 두 항이 비슷해져 \(\nu = 43.84\)로 48 가까이 올라간다.

이 표가 경우 E의 근거이기도 하다. \(\nu\)는 언제나 \(\min(n_1-1, n_2-1)\) 이상이므로, 그 값을 자유도로 쓰면 참 자유도를 결코 넘지 않는다. 틀리더라도 안전한 쪽으로 틀린다.

연습문제 6. 두 모집단의 분산이 크게 다르고 표본크기도 다를 때 합동 \(t\) 검정의 실제 제1종 오류율이 어긋난다. 어느 방향으로 어긋나는지 설명하고, 이를 확인할 모의실험을 설계하라.

풀이

어긋나는 방향. 표본크기와 분산의 짝이 맞는지에 달려 있다.

  • 큰 표본이 큰 분산과 짝지어지면(\(n_A > n_B\), \(\sigma_A > \sigma_B\)) 합동분산이 실제 차의 분산보다 크게 나와 보수적이 된다. 실제 오류율이 명목 5%보다 낮아지고 검정력을 잃는다.
  • 큰 표본이 작은 분산과 짝지어지면(\(n_A > n_B\), \(\sigma_A < \sigma_B\)) 합동분산이 과소평가되어 오류율이 부풀어 오른다. 명목 5%가 실제로는 10~15%까지 갈 수 있다. 이쪽이 위험한 경우다.
  • \(n_A = n_B\)이면 분산이 아무리 달라도 오류율이 거의 유지된다. 합동 검정이 균형 설계에서 강건한 이유다.

직관은 이렇다. 합동분산은 자유도로 가중하므로 표본이 큰 집단의 분산을 더 반영한다. 그런데 차의 참 분산 \(\sigma_A^2/n_A+\sigma_B^2/n_B\)에서는 표본이 작은 집단의 분산이 더 큰 비중을 갖는다. 이 어긋남이 편향을 만든다.

모의실험 설계.

rng = np.random.default_rng(0)
B = 20_000
for nA, nB, sA, sB in [(30, 10, 1, 1), (30, 10, 1, 3), (30, 10, 3, 1), (20, 20, 1, 3)]:
    rej_pool = rej_welch = 0
    for _ in range(B):
        a = rng.normal(0, sA, nA)          # 두 모평균을 같게 두어
        b = rng.normal(0, sB, nB)          # H0가 참인 상황을 만든다
        rej_pool  += stats.ttest_ind(a, b, equal_var=True ).pvalue < 0.05
        rej_welch += stats.ttest_ind(a, b, equal_var=False).pvalue < 0.05
    print(nA, nB, sA, sB, round(rej_pool/B, 4), round(rej_welch/B, 4))

출력:

30 10 1 1 0.0477 0.0503
30 10 1 3 0.2136 0.0522
30 10 3 1 0.0046 0.0522
20 20 1 3 0.0538 0.0495

핵심은 \(H_0\)를 참으로 두고(두 평균을 같게) 기각 비율을 세는 것이다. 그 비율이 곧 실제 제1종 오류율이며, 0.05에서 얼마나 벗어나는지를 본다. \(B=20{,}000\)이면 추정의 표준오차가 \(\sqrt{0.05\times0.95/20000} = 0.0015\)이므로 0.05와 0.06의 차이를 충분히 구별한다.

결과를 줄별로 읽는다.

\((n_A, n_B)\) \((\sigma_A, \sigma_B)\) 합동 \(t\) Welch \(t\) 상황
(30, 10) (1, 1) 0.048 0.050 등분산이면 둘 다 정확
(30, 10) (1, 3) 0.214 0.052 분산 큰 쪽에 표본이 적다
(30, 10) (3, 1) 0.005 0.052 분산 큰 쪽에 표본이 많다
(20, 20) (1, 3) 0.054 0.050 표본이 같으면 이분산도 버틴다

둘째 행이 위험한 쪽이다. 명목 5% 검정이 실제로 21%를 기각한다. 셋째 행은 반대로 0.5%까지 내려가 지나치게 보수적이다. 같은 분산비인데 표본크기의 배분만 뒤집으면 오류율이 40배 차이 난다.

넷째 행이 중요한 단서를 준다. 분산이 세 배 차이 나는데도 표본크기가 같으면 합동 \(t\)가 0.054로 버틴다. 문제는 이분산 자체가 아니라 이분산과 불균형의 조합이다. 자세한 분석은 다음 쪽들에서 한다.

연습문제 7. 합동 \(t\)는 차의 분산을 \(S_p^2(1/n_1+1/n_2)\)으로 재지만 참 분산은 \(\sigma_1^2/n_1 + \sigma_2^2/n_2\)이다. 두 양의 비

\[ R = \frac{E[S_p^2]\left(\dfrac{1}{n_1}+\dfrac{1}{n_2}\right)}{\dfrac{\sigma_1^2}{n_1}+\dfrac{\sigma_2^2}{n_2}} \]

를 \(\sigma_1/\sigma_2 = 4\)인 세 설계 \((n_1,n_2) = (20,20),\ (10,40),\ (40,10)\)에서 계산하고, 균형 설계에서 무슨 일이 일어나는지 설명하라.

풀이

\(E[S_p^2] = \dfrac{(n_1-1)\sigma_1^2 + (n_2-1)\sigma_2^2}{n_1+n_2-2}\)에 \(\sigma_1 = 4\), \(\sigma_2 = 1\)을 넣는다.

\((n_1,n_2)\) \(E[S_p^2]\) 합동이 믿는 분산 참 분산 \(R\) \(\sqrt R\)
(20, 20) 8.500 0.8500 0.8500 1.000 1.000
(10, 40) 3.8125 0.4766 1.6250 0.293 0.542
(40, 10) 13.1875 1.6484 0.5000 3.297 1.816

균형 설계에서 \(R\)이 정확히 1이 된다. 분산비가 4든 100이든 상관없다. 이유는 두 가중값이 맞아떨어지기 때문이다. 합동분산은 \(\sigma_i^2\)을 자유도 \(n_i-1\)로 가중하고 차의 참 분산은 \(1/n_i\)로 가중하는데, \(n_1 = n_2\)이면 두 가중이 모두 반반이 되어 같은 값을 준다.

불균형이면 두 가중이 어긋난다. 합동분산은 표본이 큰 집단의 분산을 더 반영하는데 차의 참 분산은 표본이 작은 집단의 분산을 더 반영한다. 방향이 반대다. 그래서 큰 분산이 작은 표본과 짝지어진 \((10,40)\)에서는 합동이 참 분산의 29%만 세어 \(\sqrt R = 0.54\), 즉 표준오차를 실제의 절반쯤으로 잡는다. 반대로 \((40,10)\)에서는 1.82배로 부풀려 잡는다.

\(T\)의 분모가 실제보다 작으면 \(T\)가 \(t_{n_1+n_2-2}\)보다 넓게 퍼지고, 크면 좁게 뭉친다. 연습문제 6에서 명목 5% 검정이 0.214와 0.005로 갈라진 것이 바로 이 두 방향이다. 어긋남의 근원은 표본크기가 아니라 두 가중값의 불일치이므로, 비를 유지한 채 표본을 키워도 \(R\)이 그대로다. 이 점은 다음 쪽에서 수치로 확인한다.

연습문제 8. 두 집단의 차는 대비의 특수한 경우다. \(k\)개 집단에서 \(\sum_i c_i\bar X_i\)(\(\sum_i c_i = 0\))의 표준오차를 구하고, \(k=2\)에서 이 쪽의 결과가 나옴을 확인하라. "A와 B의 평균 대 C"는 어떤 \(c_i\)인가?

풀이

독립이므로 분산이 더해진다. \(\bar X_i\)들이 독립이고 \(\operatorname{Var}(\bar X_i) = \sigma_i^2/n_i\)이므로

\[ \operatorname{Var}\!\left(\sum_i c_i\bar X_i\right) = \sum_i c_i^2\frac{\sigma_i^2}{n_i}, \qquad \operatorname{SE} = \sqrt{\sum_i c_i^2\frac{\sigma_i^2}{n_i}} \]

이다. 계수가 제곱되어 들어간다는 점이 요점이다. 부호는 사라진다.

\(k=2\)에서 \(c = (1,-1)\)이면

\[ \operatorname{SE} = \sqrt{\frac{\sigma_1^2}{n_1}+\frac{\sigma_2^2}{n_2}} \]

으로 이 쪽의 결과가 그대로 나온다. 설정에서 "차인데 왜 분산을 더하는가"라고 물었던 것의 답이 \((-1)^2 = 1\)이다.

"A와 B의 평균 대 C"는 \(\bar X_C - \frac{\bar X_A + \bar X_B}{2}\)이므로

\[ c = \left(-\tfrac12,\ -\tfrac12,\ 1\right) \]

이다. 합이 \(0\)임을 확인하라. 등분산 \(\sigma^2\)이고 집단당 \(n\)이면

\[ \operatorname{SE} = \sigma\sqrt{\frac{1}{n}\left(\tfrac14+\tfrac14+1\right)} = \sigma\sqrt{\frac{1.5}{n}} \]

이고, 단순한 두 집단 비교(\(\sqrt{2/n}\,\sigma\))보다 좁다. 두 집단을 묶어 평균내면 그쪽의 불확실성이 줄기 때문이다.

\(\sum c_i = 0\)이 왜 필요한가. 이 조건이 있어야 대비가 위치에 불변이다. 모든 집단에 상수 \(a\)를 더하면 \(\sum_i c_i(\mu_i + a) = \sum_i c_i\mu_i + a\sum_i c_i\)인데, \(\sum c_i = 0\)이면 \(a\)가 사라진다. 즉 대비는 집단 간 차이만 재고 전체 수준에는 영향받지 않는다.

11장 분산분석의 사후비교가 전부 이 형태다. 세 집단을 비교한 뒤 "1번 대 나머지", "2번 대 3번" 같은 질문을 던지는데, 각각이 하나의 대비이고 위 공식으로 표준오차를 구한다. 다만 대비를 여러 개 보면 다중성 문제가 생기므로(9장) 셰페·투키 같은 보정이 필요해진다.

연습문제 9. 두 평균의 차를 검정력 \(0.8\)로 탐지하려면 집단당 몇 개가 필요한가? 표준화 효과크기 \(d = |\mu_1-\mu_2|/\sigma\)가 \(0.2, 0.5, 0.8, 1.0\)일 때 각각 구하라.

풀이

비중심 \(t\) 분포를 쓴다. 등분산·등표본이면 비중심모수가 \(\delta = d\sqrt{n/2}\)이고 자유도가 \(2n-2\)다.

import numpy as np
from scipy import stats

print(f"{'효과크기 d':>12}{'집단당 n':>12}")
for d in (0.2, 0.5, 0.8, 1.0):
    n = 4
    while n < 100_000:
        nc = d * np.sqrt(n / 2)
        df = 2 * n - 2
        crit = stats.t.ppf(0.975, df)
        pw = stats.nct.sf(crit, df, nc) + stats.nct.cdf(-crit, df, nc)
        if pw >= 0.8:
            break
        n += 1
    print(f"{d:>12.1f}{n:>12}")

출력:

      효과크기 d       집단당 n
         0.2         394
         0.5          64
         0.8          26
         1.0          17

\(n \propto 1/d^2\)이다. 효과가 절반이면 표본이 네 배 필요하다. \(d=0.5\)의 \(64\)명과 \(d=0.2\)의 \(394\)명이 대략 \((0.5/0.2)^2 = 6.25\)배 관계다.

어림공식으로는

\[ n \approx \frac{2(z_{\alpha/2}+z_\beta)^2}{d^2} = \frac{15.7}{d^2} \]

이다. \(d=0.5\)면 \(62.8\)로 위의 \(64\)와 거의 같다. \(t\)를 쓰므로 조금 더 필요할 뿐이다.

\(d\) 코헨의 분류 집단당 \(n\)
\(0.2\) 작음 \(394\)
\(0.5\) 중간 \(64\)
\(0.8\) 큼 \(26\)

"\(d\)를 모르면 어떻게 하는가"가 실무의 난점이다. 예비연구나 선행문헌에서 가져오는데, 예비연구의 \(d\)는 표본이 작아 매우 불안정하고 게다가 위로 편향되어 있다(연습문제 10에서 다루는 코헨 \(d\)의 편향, 그리고 9장의 선택 효과). 그래서 예비연구 기반 설계는 표본을 과소 산정하기 쉽다.

더 나은 방법은 "실질적으로 의미 있는 최소 차이"를 정하는 것이다. 통계적 효과크기가 아니라 임상적·실무적 기준에서 "이만큼은 달라야 조치를 바꾼다"를 정하고 그것을 탐지하도록 설계한다.

연습문제 10. 연습문제 3은 총 표본 \(N\)이 고정일 때의 최적 배분을 물었다. 이제 집단마다 관측 비용이 다르다고 하자. 예산 \(C = c_1n_1 + c_2n_2\)가 고정일 때 \(\operatorname{Var}(\bar X_1 - \bar X_2)\)를 최소화하는 배분을 구하라.

풀이

라그랑주 승수로 푼다. 최소화할 것은

\[ V = \frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}, \qquad \text{제약} \quad c_1n_1 + c_2n_2 = C \]

이다. \(\partial/\partial n_i\)를 취하면 \(-\sigma_i^2/n_i^2 = \lambda c_i\)이므로

\[ \frac{n_1}{n_2} = \frac{\sigma_1}{\sigma_2}\sqrt{\frac{c_2}{c_1}} \]

을 얻는다. \(\square\)

import numpy as np

print(f"{'s1':>5}{'s2':>5}{'c1':>5}{'c2':>5}{'최적 n1:n2':>14}")
for s1, s2, c1, c2 in [(1,1,1,1), (2,1,1,1), (1,1,4,1), (2,1,4,1)]:
    print(f"{s1:>5}{s2:>5}{c1:>5}{c2:>5}"
          f"{(s1/s2)*np.sqrt(c2/c1):>13.3f}:1")

출력:

   s1   s2   c1   c2      최적 n1:n2
    1    1    1    1        1.000:1
    2    1    1    1        2.000:1
    1    1    4    1        0.500:1
    2    1    4    1        1.000:1

두 힘이 반대로 작용한다.

  • 분산이 큰 집단에 더 많이. \(\sigma_1 = 2\sigma_2\)면 \(n_1 = 2n_2\)다(둘째 줄). 연습문제 3의 네이만 배분이다.
  • 비용이 비싼 집단에 더 적게. \(c_1 = 4c_2\)면 \(n_1 = n_2/2\)다(셋째 줄). 제곱근이라 비용 \(4\)배에 표본은 \(2\)배 줄인다.

넷째 줄이 흥미롭다. 분산이 두 배인데 비용도 네 배라 두 효과가 정확히 상쇄되어 균등 배분이 최적이 된다.

실무에서 흔한 상황.

상황 \(\sigma\) \(c\) 결론
희귀질환 환자 대 건강 대조군 비슷 환자가 훨씬 비쌈 대조군을 많이
신약 대 위약 비슷 신약이 비쌈 위약군을 많이
실험실 측정 대 설문 실험실이 정밀 실험실이 비쌈 경우에 따라

사례-대조 연구에서 대조군을 \(1:4\)까지 늘리는 관행이 여기서 나온다. 환자를 더 모으기 어렵거나 비싸므로 대조군으로 메우는 것인데, \(1:4\)를 넘으면 이득이 급격히 줄어든다. 분산이 \(\sigma^2(1/n_1 + 1/n_2)\)이라 \(n_2 \to \infty\)여도 \(\sigma^2/n_1\)이 남기 때문이다.


정리하며

두 평균의 차를 다루는 일은 한 평균을 다루는 일의 연장이다. 기댓값은 빼고 분산은 더한다는 두 줄에서 출발해, 모르는 모분산을 무엇으로 대신하느냐에 따라 다섯 갈래가 갈린다. 모분산을 알면 \(Z\), 표본이 크면 표본분산을 넣고 여전히 \(Z\)(근사), 표본이 작고 모집단이 정규이면 \(t\)인데, 등분산이면 합동 \(t\)에 자유도 \(n_1 + n_2 - 2\), 이분산이면 Welch의 \(t\)에 Satterthwaite 자유도, 손으로 계산할 때는 보수적으로 \(\min(n_1-1, n_2-1)\)이다.

달라지는 것은 임계값(\(z^*\)인가 \(t^*\)인가, \(t^*\)라면 자유도가 얼마인가)과 표준오차 공식뿐이다.

그런데 이 지도를 그려 놓고도 실제 갈림길에서 오래 망설일 필요는 없다. 등분산인지 먼저 검정해 보고 그 결과에 따라 합동과 Welch를 고르는 2단계 절차는 전체 유의수준을 무너뜨리는 데다, 등분산 검정 자체의 검정력이 낮아 그 판정을 믿을 수도 없다. 가정을 검정해서 방법을 고르는 것보다 처음부터 가정에 덜 의존하는 방법을 쓰는 편이 낫다. 등분산이 설계로 보장되거나 이론적으로 확실한 경우가 아니라면 Welch를 기본으로 두면 된다.

이어지는 세 쪽에서 이 선택 지침을 모의실험으로 검증한다. 등분산 정규모집단에서 합동 \(t\)가 정확하다는 것, 이분산과 표본크기 불균형이 겹치면 합동 \(t\)의 실제 오류율이 명목 5%에서 29%까지 벌어진다는 것, 그리고 비정규성은 표본크기가 고쳐 주지만 설계의 불균형은 고쳐 주지 않는다는 것을 차례로 본다.

그래서 이 지도 다음에는

이 쪽이 답한 것은 "어느 표본분포를 쓸 것인가"까지다. \(\bar X_1 - \bar X_2\)의 중심과 폭은 독립성에서 바로 나오고, 기준분포는 모분산을 아는지·표본이 큰지·모집단이 정규인지·두 분산이 같은지에 따라 \(N(0,1)\)과 세 가지 \(t\)로 갈린다. 표본분포를 묻는 이 장의 일은 여기서 끝난다.

그 분포를 골랐다면 다음은 그것으로 \(\mu_1 - \mu_2\)를 가두거나 판정하는 일이다. 임계값과 표준오차를 맞춰 구간을 세우는 쪽은 8.3절 μ₁−μ₂의 신뢰구간이, 기각역과 \(p\)값으로 판정하는 쪽은 9.3절 이표본 t 검정(합동과 Welch)이 맡는다.