콘텐츠로 이동

S₁²/S₂²의 표본분포 (정규모집단)

개요

앞 쪽의 정리 1은 근사가 아니라 정확한 결과다. 두 표본이 독립인 정규모집단에서 나왔으면 \(S_1^2/S_2^2\)이 모든 표본크기에서 정확히 \(F_{d_1,d_2}\)를 따른다.

이 쪽은 그 사실을 모의실험으로 확인하는 기준선이다. 여기서 "정확히 맞는다"가 어떤 모습인지 눈에 익혀 두면, 다음 쪽에서 정규성이 깨졌을 때의 어긋남이 한눈에 보인다.

설정

\[ X_1, \ldots, X_{n_1} \overset{\text{iid}}{\sim} N(0, 1), \qquad Y_1, \ldots, Y_{n_2} \overset{\text{iid}}{\sim} N(0, 1) \]

두 모분산이 같으므로 귀무가설이 참인 상황이다. 두 조합을 본다.

  • \(n_1 = n_2 = 20\): 자유도가 같은 대칭인 경우
  • \(n_1 = 15\), \(n_2 = 25\): 자유도가 다른 경우

평균 \(\mu_1, \mu_2\)는 아무 값이어도 결과가 같다. \(S^2\)이 편차만 쓰므로 위치가 상쇄되기 때문이다.

표본분포 이론

\[ \frac{S_1^2}{S_2^2} \sim F_{d_1, d_2}, \qquad d_1 = n_1 - 1,\ d_2 = n_2 - 1 \]

네 가지를 확인할 것이다.

확인할 것 이론값
분포 \(F_{d_1,d_2}\) (KS 거리가 0에 가까울 것)
평균 \(d_2/(d_2-2)\), 1이 아니다
명목 5% 검정의 실제 오류율 0.05
명목 95% 구간의 실제 포함률 0.95

모의실험

보기 1. 정규모집단에서 분산비의 표집분포. 두 표준정규모집단에서 \(S_1^2/S_2^2\)를 10만 번 만들어 \((n_1,n_2) = (20,20)\)과 \((15,25)\)에서 \(F\) 밀도와 겹쳐 그린다.

(1) 두 경우의 평균·중앙값·최빈값을 구하고, 세 값이 놓이는 순서를 말하시오.

(2) 그려서 확인하고, 세로 점선(평균)이 봉우리의 어느 쪽에 서야 하는지 설명하시오.

풀이

(1) 세 값이 모두 닫힌 꼴이다. \(F_{d_1,d_2}\)의 밀도를 미분해 0으로 두면 최빈값이

\[ \text{mode} = \frac{d_1-2}{d_1}\cdot\frac{d_2}{d_2+2} \quad (d_1 > 2) \]

이고, 평균은 \(d_2/(d_2-2)\)다. 중앙값은 일반적으로 닫힌 꼴이 없지만 \(d_1 = d_2\)일 때는 정확히 1이다. \(1/F_{d,d} \overset{d}{=} F_{d,d}\)이므로 \(P(F \le 1) = P(F \ge 1)\)이기 때문이다.

\((n_1,n_2)\) 분포 최빈값 중앙값 평균
(20, 20) \(F(19,19)\) 0.8095 1.0000 1.1176
(15, 25) \(F(14,24)\) 0.7912 0.9799 1.0909

세 값이 최빈값 < 중앙값 < 평균 순으로 선다. 오른쪽으로 치우친 분포의 표준적인 배열이고, \(F\)가 아래로는 0에서 막히고 위로는 끝없이 뻗기 때문이다.

어느 것도 1이 아니라는 점이 요점이다. 두 모분산이 정확히 같은데도 봉우리는 \(0.81\)에 있고 평균은 \(1.12\)에 있다. 분모 \(S_2^2\)가 작게 나오는 표본에서 비가 크게 튀어 오르고, 그 희귀한 큰 값들이 평균을 끌어올린다. 옌센 부등식으로 말하면 \(E[1/V] > 1/E[V] = 1\)이다.

(2) 그려서 확인한다.

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

rng = np.random.default_rng(11)

fig, axes = plt.subplots(1, 2, figsize=(12, 3.5))
for ax, (n1, n2) in zip(axes, [(20, 20), (15, 25)]):
    # 두 표본을 따로 뽑아야 독립이 보장된다.
    F = (rng.normal(size=(100_000, n1)).var(axis=1, ddof=1)
         / rng.normal(size=(100_000, n2)).var(axis=1, ddof=1))

    # 오른쪽 꼬리가 길어 99.5백분위에서 자른다.
    h = np.percentile(F, 99.5)
    ax.hist(F, bins=60, range=(0, h), density=True, alpha=0.5,
            edgecolor="white", label="simulated $S_1^2/S_2^2$")

    d1, d2 = n1 - 1, n2 - 1
    g = np.linspace(1e-4, h, 400)
    ax.plot(g, stats.f(d1, d2).pdf(g), "--r", lw=2, label=f"F({d1}, {d2}) PDF")
    # 평균은 1이 아니라 d2/(d2-2) 다. 최빈값보다 오른쪽에 있다.
    ax.axvline(stats.f(d1, d2).mean(), color='k', ls=':', lw=1,
               label=f"mean = {stats.f(d1, d2).mean():.3f}")
    ax.set_title(f"Normal populations,  $n_1$={n1}, $n_2$={n2}")
    ax.set_xlabel("$S_1^2/S_2^2$")
    ax.set_xlim(0, h)

axes[0].set_ylabel("Density")
axes[1].legend(fontsize=8)
plt.tight_layout()
plt.show()

정규모집단에서 분산비의 표집분포

히스토그램과 빨간 곡선이 거의 구별되지 않는다. 다음 쪽의 같은 그림과 견주어 보면 차이가 분명해진다.

예측한 세 자리가 그림에 그대로 있다. 히스토그램과 빨간 곡선이 거의 구별되지 않는다. 근사가 아니라 정리이므로 \(n = 15\)에서도 어긋남이 보이지 않는다.

세로 점선(평균)은 봉우리의 오른쪽에 선다. \((20,20)\)에서 봉우리가 \(0.81\), 점선이 \(1.12\)이고, \((15,25)\)에서는 \(0.79\)와 \(1.09\)다. 두 그림 모두 점선이 봉우리보다 \(0.3\) 남짓 오른쪽이다. 평균이 꼬리에 끌려간 자리이며, 분포의 "중심"을 평균 하나로 읽으면 안 되는 자리이기도 하다.

여기서 실무적인 경고가 하나 나온다. 두 모분산이 같은데도 관측된 \(s_1^2/s_2^2\)의 절반은 1보다 작고 평균은 \(1.12\)다. \(n_2 = 20\)에서 \(1.3\)을 보고 "분산이 30% 다르다"고 말하는 것은 등분산 아래에서 흔히 나오는 값을 차이로 읽는 것이다.

두 패널의 폭이 거의 같은 것도 눈여겨볼 만하다. \(\operatorname{SD}(F(19,19)) = 0.5618\), \(\operatorname{SD}(F(14,24)) = 0.5532\)로 \(1.5\%\)밖에 차이 나지 않는다. 전체 관측값 수가 40개로 같고 자유도를 \(19{:}19\)로 나누든 \(14{:}24\)로 나누든 원래 눈금에서는 비슷하다는 뜻이다. 다만 로그 척도에서는 \(0.4712\) 대 \(0.4903\)으로 균형 쪽이 더 좁다(앞 쪽 보기 1). 같은 자료량이면 반씩 나누는 쪽이 조금 낫다.

이 쪽에서 본 네 가지 — 분포가 맞고, 평균이 \(d_2/(d_2-2)\)이고, 봉우리가 1 왼쪽에 있고, 자유도가 달라도 상관없다 — 가 다음 두 쪽의 기준선이다. 바뀔 것은 모집단의 정규성 하나뿐이다.

보기 2. 네 가지를 수치로 확인. 세 표본크기 조합에서 KS 거리, 평균, 명목 5% 검정의 오류율, 명목 95% 구간의 포함률을 10만 번씩 잰다.

(1) 네 열이 각각 얼마가 되어야 하는지 미리 적으시오. 어느 열이 정확히 맞아야 하고 어느 열이 모의오차만큼만 맞아야 하는가.

(2) 모의실험으로 확인하시오.

풀이

(1) 세 열은 정확하고 한 열은 모의오차다.

평균 열. \(E[F_{d_1,d_2}] = d_2/(d_2-2)\)이므로 세 조합에서

\[ (20,20) \to \frac{19}{17} = 1.1176, \qquad (15,25) \to \frac{24}{22} = 1.0909, \qquad (10,40) \to \frac{39}{37} = 1.0541 \]

이다. 분자의 자유도는 평균에 들어오지 않는다. \(E[F] = E[U]E[1/V]\)에서 \(E[U] = 1\)이고 \(E[1/V] = d_2/(d_2-2)\)이므로, 1에서 벗어나는 몫은 전부 분모의 흔들림이 만든다. 그러므로 세 줄의 평균이 \(1.12 \to 1.09 \to 1.05\)로 내려가는 것은 \(n_2\)가 \(20 \to 25 \to 40\)으로 커지기 때문이다.

오류율과 포함률 열. 정리 1이 등식이므로 기각역을 \(F_{d_1,d_2}\)의 분위수로 잡으면 오류율은 정의상 정확히 \(0.05\)이고 포함률은 \(0.95\)다. 근사가 들어갈 자리가 없다. 표본크기가 작아도, 두 자유도가 달라도 마찬가지다. 10만 번에서 몬테카를로 오차가 \(\sqrt{0.05 \times 0.95/100000} = 0.0007\)이므로 세 줄 모두 \(0.0486 \sim 0.0514\) 안에 들어와야 한다.

KS 열만 다르다. 참 분포와 표본 10만 개의 경험분포 사이의 거리이므로 \(0\)이 될 수 없다. 분포가 정확히 맞더라도 콜모고로프 분포에 따라

\[ E[D_B] \approx \frac{0.87}{\sqrt B} = 0.0028, \qquad D_{B,\,0.95} \approx \frac{1.36}{\sqrt B} = 0.0043 \]

쯤이 나온다. \(0.003\) 언저리의 값이 "맞는다"는 증거이고, \(0.0043\)을 넘으면 그때 의심해야 한다.

(2) 모의실험.

import numpy as np
from scipy import stats

rng = np.random.default_rng(1)
B = 100_000

print(f"{'(n1,n2)':>10}{'KS':>9}{'이론평균':>10}{'모의평균':>10}{'오류율':>9}{'포함률':>9}")
for n1, n2 in [(20, 20), (15, 25), (10, 40)]:
    d1, d2 = n1 - 1, n2 - 1
    F = (rng.normal(size=(B, n1)).var(axis=1, ddof=1)
         / rng.normal(size=(B, n2)).var(axis=1, ddof=1))

    lo, hi = stats.f(d1, d2).ppf([0.025, 0.975])
    ks = stats.kstest(F, 'f', args=(d1, d2)).statistic     # 분포가 맞는가
    err = np.mean((F < lo) | (F > hi))                     # 명목 5% 검정
    cov = np.mean((F / hi <= 1) & (1 <= F / lo))           # 명목 95% 구간
    print(f"{str((n1, n2)):>10}{ks:>9.4f}{stats.f(d1, d2).mean():>10.4f}"
          f"{F.mean():>10.4f}{err:>9.4f}{cov:>9.4f}")

출력:

   (n1,n2)       KS      이론평균      모의평균      오류율      포함률
  (20, 20)   0.0033    1.1176    1.1154   0.0506   0.9494
  (15, 25)   0.0029    1.0909    1.0938   0.0510   0.9489
  (10, 40)   0.0021    1.0541    1.0525   0.0500   0.9500

네 열이 모두 이론값과 맞는다. KS 거리가 0.003 수준인데 이는 10만 번 모의실험의 모의오차 수준이다(\(1/\sqrt{B} = 0.0032\)). 오류율이 0.050, 포함률이 0.950으로 명목 수준과 일치한다.

예측한 네 열이 그대로 나왔다.

\((n_1,n_2)\) KS 이론 평균 모의 평균 오류율 포함률
(20, 20) 0.0033 1.1176 1.1154 0.0506 0.9494
(15, 25) 0.0029 1.0909 1.0938 0.0510 0.9489
(10, 40) 0.0021 1.0541 1.0525 0.0500 0.9500

평균은 세 줄 모두 셋째 자리까지 맞는다. \(F\)의 표준편차가 \(0.56\) 안팎이므로 평균 추정의 몬테카를로 오차는 \(0.56/\sqrt{100000} = 0.0018\)이고, 가장 크게 벗어난 \((15,25)\)의 \(0.0029\)가 \(1.6\) 오차다.

오류율과 포함률은 정확히 명목값이다. 세 줄이 \(0.0500 \sim 0.0510\)과 \(0.9489 \sim 0.9500\)으로, 예측한 구간 \(0.0486 \sim 0.0514\) 안에 모두 들어간다. 근사가 아니라 등식이므로 당연한 결과이며, 이 세 줄이 이 쪽의 존재 이유다.

KS 거리도 예측한 자리에 있다. \(0.0033,\ 0.0029,\ 0.0021\)로 셋 다 \(1.36/\sqrt B = 0.0043\) 아래다. 이 값들은 "분포가 거의 맞는다"가 아니라 "분포가 맞는다고 할 때 나와야 할 바로 그 크기"다. 다음 쪽에서 같은 KS를 비정규 모집단에 대고 재면 자릿수가 달라진다.

\((10,40)\)이 가장 작은 KS를 준 것도 우연이 아니다. \(F(9,39)\)는 분모 자유도가 커서 분포 자체가 더 안정되어 있고, 경험분포가 더 빨리 붙는다. 그러나 이것은 정확성의 차이가 아니라 모의오차의 차이다. 오류율 열은 셋 다 똑같이 \(0.05\)다.

불균형이 아무 해도 끼치지 않았다는 점을 눈여겨 두라. \((10,40)\)처럼 네 배 어긋난 설계에서도 네 열이 모두 맞는다. 5.7절에서 같은 불균형이 이분산과 짝을 이루었을 때 오류율이 \(0.291\)까지 올랐던 것과 정반대다. 여기서 요구하는 것은 정규성뿐이고, 표본크기의 균형은 요구 목록에 없다. 다음 쪽에서 무너지는 것도 정확히 그 하나, 정규성이다.

해석

주요 관찰

  1. 분포가 정확히 맞는다. KS 거리가 모의오차 수준이며, 표본크기를 바꿔도 마찬가지다. 근사가 아니라 정리이므로 \(n\)이 작아도 성립한다.
  2. 평균은 1이 아니다. \((20,20)\)에서 1.118, \((15,25)\)에서 1.091, \((10,40)\)에서 1.054다. 분모 자유도가 커질수록 1에 가까워진다. 등분산인데도 비가 1보다 크게 나오는 것이 정상이다.
  3. 명목 수준이 지켜진다. 오류율 0.050, 포함률 0.950이다. 이것이 "정리가 정확하다"는 말의 실용적 의미다.
  4. 자유도가 달라도 문제없다. \((10,40)\)처럼 불균형해도 결과가 정확하다. 정규성만 있으면 표본크기의 균형은 상관없다. 5.7절의 두 평균 차에서 불균형이 이분산과 짝을 이루어 치명적이었던 것과 대조된다.

이 쪽의 역할

여기서 얻은 네 수치(KS 0.003, 평균 \(d_2/(d_2-2)\), 오류율 0.050, 포함률 0.950)가 비교의 기준점이다. 다음 쪽에서 같은 네 수치를 비정규 모집단에서 재면 오류율이 0.26, 0.48까지 오르고 포함률이 0.52까지 떨어진다.

연습문제

연습문제 1. 모의실험에서 \(\mu_1 = \mu_2 = 0\)으로 두었다. \(\mu_1 = 100\), \(\mu_2 = -5\)로 바꾸면 결과가 달라지는가?

풀이

달라지지 않는다. \(S^2\)은 편차 \(X_i - \bar X\)만 쓰고, 모든 관측값에 같은 상수를 더하면 편차가 변하지 않는다.

\[ (X_i + c) - \overline{(X + c)} = X_i + c - (\bar X + c) = X_i - \bar X \]

따라서 \(S_1^2, S_2^2\)의 분포가 \(\mu\)에 의존하지 않고 비의 분포도 그대로다.

이것이 정리 1에 \(\mu_1, \mu_2\)가 나타나지 않는 이유다. 위치모수는 분산 추론에서 완전히 상쇄된다. 다만 자유도를 하나 잃는 대가를 치른다. \(\mu\)를 안다면 \(\sum(X_i-\mu)^2/\sigma^2 \sim \chi^2_n\)으로 자유도가 \(n\)이지만, \(\bar X\)로 갈음하면 \(n-1\)이 된다.

연습문제 2. 보기 2에서 KS 거리 0.003이 "모의오차 수준"이라는 말의 뜻을 설명하라. 모의실험 횟수를 100배로 늘리면 이 값이 어떻게 되겠는가?

풀이

KS 통계량은 경험적 분포함수와 이론 분포함수의 최대 수직 거리다. 표본이 정말로 그 분포에서 나왔다 해도 유한한 \(B\)개로 그린 경험적 분포함수는 이론값과 정확히 겹치지 않으며, 그 어긋남의 크기가 \(O(1/\sqrt{B})\)다.

\(B = 100{,}000\)이면 \(1/\sqrt{B} = 0.0032\)이므로 관측된 0.0033은 이론이 완벽히 맞을 때 나올 만한 값이다. 실제로 콜모고로프 분포에서 \(\sqrt{B} \cdot D\)의 95백분위점이 1.36이므로 임계값은 \(1.36/\sqrt{B} = 0.0043\)이고, 0.0033은 이를 넘지 않는다.

\(B\)를 100배(천만)로 늘리면 KS 거리가 \(\sqrt{100} = 10\)배 줄어 0.0003 수준이 된다. 줄어드는 것이 이론이 맞다는 증거이고, 줄지 않고 어떤 값에 머문다면 그 값이 진짜 어긋남이다. 다음 쪽의 비정규 모집단이 그런 경우다.

연습문제 3. \((n_1, n_2) = (20, 20)\)에서 모의평균 1.1154가 이론값 1.1176과 맞는지 판단하라. 모의오차를 감안해 답하라.

풀이

\(F_{19,19}\)의 분산은

\[ \text{Var}(F) = \frac{2d_2^2(d_1+d_2-2)}{d_1(d_2-2)^2(d_2-4)} = \frac{2(19^2)(36)}{19(17^2)(15)} = 0.3156 \]

이므로 표준편차가 0.562다. 10만 번 모의실험한 평균의 표준오차는

\[ \frac{0.562}{\sqrt{100{,}000}} = 0.00178 \]

이다. 이론값과의 차이가 \(|1.1154 - 1.1176| = 0.0022\)로 표준오차의 1.2배이므로 모의오차 범위 안이다. 맞는다고 판단한다.

이런 판단을 습관적으로 하는 것이 중요하다. 모의실험 결과가 이론값과 소수 셋째 자리에서 다르다고 "틀렸다"고 말하면 안 되고, 반대로 큰 차이를 "대충 맞는다"고 넘겨서도 안 된다. 모의오차를 계산해 놓고 그 잣대로 재야 한다.

연습문제 4. 정규모집단에서 \(\sigma_1/\sigma_2 = 1.5, 2, 3\)일 때 명목 5% 양측 \(F\) 검정의 검정력을 모의실험으로 구했더니 0.402, 0.837, 0.996이었다. \(n_1 = n_2 = 20\)이다. 이 값들을 해석하고, 검정력 0.8을 얻으려면 분산비가 얼마나 되어야 하는지 답하라.

풀이

표준편차비 1.5는 분산비 2.25인데도 검정력이 0.402에 그친다. 즉 분산이 두 배 이상 차이 나는 두 모집단을 놓고도 절반 넘게 놓친다.

표준편차비 2(분산비 4)에서 0.837이 되므로, 검정력 0.8의 문턱이 대략 분산비 3.5~4 근처다. 표준편차로는 1.9배쯤이다.

\(\sigma_1/\sigma_2\) 분산비 검정력
1.5 2.25 0.402
2.0 4.00 0.837
3.0 9.00 0.996

실무적 함의. \(n = 20\) 정도의 표본으로 등분산 검정을 해서 기각되지 않았다는 것은 "분산이 같다"는 증거가 거의 되지 못한다. 분산비 2~3의 차이는 잡아내지 못하기 때문이다. 이것이 등분산 검정 결과로 \(t\) 검정 방식을 고르는 2단계 절차를 권하지 않는 여러 이유 가운데 하나다. 5.7절에서 Welch \(t\)를 기본으로 두라고 권한 까닭이 여기에도 있다.

연습문제 5. \((n_1, n_2) = (10, 40)\)처럼 표본크기가 불균형해도 결과가 정확했다. 5.7절의 두 표본평균 차에서는 불균형이 문제가 되는데, 왜 여기서는 그렇지 않은가?

풀이

두 상황에서 문제가 되는 것이 다르다.

두 평균 차에서의 불균형 문제는 이분산과 짝을 이룰 때만 생긴다. 합동분산 \(S_p^2\)은 두 표본분산을 자유도로 가중평균하므로, 분산이 다른데 표본크기까지 다르면 가중치가 잘못 배분되어 표준오차 추정이 편향된다. 등분산이면 불균형해도 문제없다.

분산비에서는 두 표본분산을 각각 자기 자유도로만 나눈다. 두 표본을 섞어 하나의 추정량을 만드는 단계가 없으므로 서로의 자유도가 간섭하지 않는다. \(S_1^2\)은 \(\chi^2_{d_1}\), \(S_2^2\)은 \(\chi^2_{d_2}\)이고, 그 비가 \(F_{d_1,d_2}\)라는 것이 자유도가 얼마든 성립한다.

차이의 핵심은 "섞는가"다. 합동분산은 섞고, 분산비는 섞지 않는다. 섞는 절차는 섞는 비율이 맞아야 하므로 가정에 민감해지고, 섞지 않는 절차는 그 문제가 없다.

다만 불균형이 아무 대가가 없는 것은 아니다. 검정력이 떨어진다. 전체 관측값 50개를 \((10,40)\)으로 나누면 \((25,25)\)로 나눌 때보다 분산비를 잡아내는 힘이 약하다. 작은 쪽 자유도가 병목이 되기 때문이다.

연습문제 6. \(F \sim F_{d_1,d_2}\)이면 \(\log F\)의 분포가 거의 대칭임이 알려져 있다(피셔의 \(z\) 변환). \(n_1 = n_2 = 20\)에서 이를 확인하고, 신뢰구간을 로그 척도에서 만드는 것이 왜 자연스러운지 설명하라.

풀이

\(\log F = \log S_1^2 - \log S_2^2\)이고 두 항이 독립이며 같은 분포를 따르므로(\(d_1 = d_2\)) 차의 분포는 0을 중심으로 정확히 대칭이다. 대칭인 이유가 이렇게 간단하다.

자유도가 다르면 정확한 대칭은 깨지지만 여전히 거의 대칭이다. \(\log S^2\)의 분포가 \(S^2\)보다 훨씬 덜 치우쳐 있기 때문인데, 로그가 오른쪽 꼬리를 눌러 주기 때문이다. 피셔는 \(z = \frac12\log F\)로 두면 근사적으로

\[ z \;\dot\sim\; N\!\left(\frac12\left(\frac{1}{d_2} - \frac{1}{d_1}\right),\ \frac12\left(\frac{1}{d_1} + \frac{1}{d_2}\right)\right) \]

임을 보였다.

로그 척도가 자연스러운 이유. 분산비는 곱셈적인 양이다. "두 배 크다"와 "절반이다"는 같은 크기의 차이인데, 원래 척도에서는 \(2\)와 \(0.5\)로 1에서의 거리가 다르다. 로그를 씌우면 \(+0.69\)와 \(-0.69\)로 같아진다.

실용적으로도 이점이 있다. \(n_1 = 16\), \(n_2 = 21\)에서 \(s_1^2/s_2^2 = 2.5\)를 얻었다면 8.3절의 분산비 구간이 \([2.5/F_{0.975}(15,20),\ 2.5/F_{0.025}(15,20)] = [0.972, 6.890]\)이 되어 관측값 2.5를 중심에 두지 않아 보이는데, 로그 척도에서는 \([-0.028, 1.930]\)이고 중심이 0.951, 즉 \(e^{0.951} = 2.59\)로 관측값 근처다. 곱셈적인 양은 곱셈적인 척도에서 보아야 한다.

연습문제 7. 연습문제 4는 \(n_1=n_2=20\)에서의 검정력을 물었다. 뒤집어 묻자. \(\sigma_1/\sigma_2 = 1.25, 1.5, 2, 3\)을 검정력 \(0.8\)로 탐지하려면 각 집단에 몇 개가 필요한가?

풀이
from scipy import stats

print(f"{'sigma비':>9}{'필요한 n (양쪽 같게)':>24}")
for r in (1.25, 1.5, 2.0, 3.0):
    n = 4
    while n <= 3000:
        d = n - 1
        lo, hi = stats.f.ppf(0.025, d, d), stats.f.ppf(0.975, d, d)
        pw = stats.f.sf(hi / r**2, d, d) + stats.f.cdf(lo / r**2, d, d)
        if pw >= 0.8:
            break
        n += 1
    print(f"{r:>9.2f}{n:>24}")

출력:

   sigma비           필요한 n (양쪽 같게)
     1.25                     160
     1.50                      50
     2.00                      19
     3.00                       9

표준편차가 \(25\%\) 다른 것을 잡으려면 집단마다 \(160\)개가 필요하다. 총 \(320\)개다. 반면 세 배 차이는 집단마다 \(9\)개면 잡힌다.

필요 표본이 급격히 늘어난다. 대략 \(n \propto 1/(\log r)^2\)이다. \(\log 1.25 = 0.223\), \(\log 1.5 = 0.405\)이고 비가 \(1.82\)인데, 필요 표본의 비는 \(160/50 = 3.2 \approx 1.82^2\)로 맞는다. 앞 쪽 연습문제 4에서 \(\operatorname{sd}(\log F) \approx 2/\sqrt{n}\)이었으므로, 탐지하려는 신호가 \(\log(\sigma_1^2/\sigma_2^2) = 2\log r\)인 것을 생각하면 자연스럽다.

평균 비교와 견주면 차이가 분명하다.

탐지 대상 필요 표본(집단당, 검정력 \(0.8\))
평균 차 \(0.5\sigma\) \(64\)
평균 차 \(1.0\sigma\) \(17\)
표준편차비 \(1.25\) \(160\)
표준편차비 \(1.5\) \(50\)

분산 비교가 훨씬 비싸다. 표준편차가 \(50\%\) 차이 나는 것(꽤 큰 차이)을 잡는 데 필요한 표본이, 평균이 \(0.5\sigma\) 차이 나는 것을 잡는 데 필요한 표본과 비슷하다. 분산이 4차 적률에 기댄다는 5.6절의 주제가 검정력의 언어로 나타난 것이다.

실무적 함의. 논문에서 흔히 보는 "등분산 검정 결과 유의하지 않아 등분산을 가정했다"는 문장은, 표본이 집단당 \(20\sim30\)개일 때 거의 아무 정보도 없는 진술이다. 그 표본크기로는 표준편차가 \(1.5\)배 달라도 절반쯤밖에 못 잡는다. 앞 쪽 연습문제 4의 \(0.402\)가 그 수치다.

연습문제 8. \(F\) 검정을 단측으로 하면 어떻게 되는가? "1번 집단의 분산이 더 크다"를 대립가설로 할 때의 기각역을 쓰고, 어느 표본을 분자에 놓느냐가 왜 문제가 되는지 설명하라.

풀이

단측 기각역. \(H_1: \sigma_1^2 > \sigma_2^2\)이면 큰 \(F\)만 증거가 되므로

\[ F = \frac{S_1^2}{S_2^2} > F_{1-\alpha}(n_1-1,\ n_2-1) \]

일 때 기각한다. 양측의 \(F_{0.975}\) 대신 \(F_{0.95}\)를 쓰므로 임계값이 낮아지고, 그 방향의 검정력이 오른다.

분자를 무엇으로 놓느냐가 결론을 바꾼다. 이것이 \(F\) 검정의 고약한 점이다.

  • 가설이 먼저 정해져 있으면 문제없다. "새 공정의 변동이 더 작다"처럼 방향이 사전에 있으면 그에 맞춰 분자를 정하면 된다.
  • 자료를 보고 큰 쪽을 분자에 놓으면 그 순간 단측검정이 아니게 된다. 두 방향 중 유리한 쪽을 고른 것이므로 실제 유의수준이 \(2\alpha\)가 된다.

두 번째가 교과서에서도 흔히 잘못 설명된다. "항상 큰 분산을 분자에 놓고 \(F_{1-\alpha}\)와 비교하라"는 지침을 종종 보는데, 이것은 \(\alpha\) 수준 검정이 아니라 \(2\alpha\) 수준 검정이다. 9장의 다중성 문제와 같은 구조이며, 자료를 본 뒤 검정을 고르는 일에 해당한다.

올바른 처리 둘.

상황 방법
방향이 사전에 정해짐 그 방향으로 단측, \(F_{1-\alpha}\)
방향을 모름 양측, \(F_{\alpha/2}\)와 \(F_{1-\alpha/2}\)
큰 쪽을 분자에 놓고 싶다 \(F_{1-\alpha/2}\)와 비교(즉 양측과 동치)

세 번째 줄이 실용적인 타협이다. 큰 쪽을 분자에 놓되 임계값을 \(F_{1-\alpha/2}\)로 쓰면 양측검정과 정확히 같아진다. 앞 쪽 연습문제 3에서 본 역수 관계

\[ F_{\alpha}(d_1,d_2) = \frac{1}{F_{1-\alpha}(d_2,d_1)} \]

덕분에 두 표현이 동치임을 확인할 수 있다.

등분산 사전검정에서는 대개 양측이 맞다. 어느 쪽 분산이 클지 모르는 채로 합동분산을 쓸 수 있는지 묻는 것이므로, 양쪽 모두가 문제가 된다. 단측을 쓰면 반대 방향의 위반을 아예 못 잡는다.

연습문제 9. 정규성이 성립하면 \(F\) 검정이 최량인가? 등분산에 대한 우도비 검정을 유도하고, \(F\) 검정과의 관계를 밝혀라.

풀이

우도비를 세운다. 두 정규표본에서 평균과 분산을 모두 모를 때, 제약 없는 최대가능도는 \(\hat\sigma_i^2 = \frac{1}{n_i}\sum(x_{ij}-\bar x_i)^2\)이고, \(\sigma_1^2=\sigma_2^2\) 제약 아래에서는 공통 \(\hat\sigma^2 = \frac{1}{N}\sum_i\sum_j(x_{ij}-\bar x_i)^2\)(\(N = n_1+n_2\))이다. 우도비를 정리하면

\[ \Lambda = \frac{(\hat\sigma_1^2)^{n_1/2}(\hat\sigma_2^2)^{n_2/2}}{(\hat\sigma^2)^{N/2}} \]

이고, 이것은 \(\hat\sigma_1^2/\hat\sigma_2^2\)의 단조함수다. 따라서 우도비 검정의 기각역은 "\(\hat\sigma_1^2/\hat\sigma_2^2\)가 너무 크거나 너무 작다"는 형태가 되어, \(F\) 검정과 같은 검정족을 준다.

정확히 같지는 않다. 두 가지가 다르다.

\(F\) 검정 우도비 검정
분모 \(n_i-1\) \(n_i\)
기각역의 양쪽 균형 꼬리 확률 \(\alpha/2\)씩 우도비가 같은 값이 되는 점

표본크기가 같으면 두 검정이 일치한다. \(n_1=n_2\)이면 \(\Lambda\)가 \(F+1/F\)의 단조함수가 되고, 기각역이 \(F\)와 \(1/F\)에 대칭이라 꼬리 확률도 같아진다. 앞 쪽 연습문제 3에서 본 역수 대칭이 그 이유다.

불균형이면 조금 갈린다. 우도비 검정의 기각역은 꼬리 확률을 정확히 반씩 나누지 않으며, 이론적으로는 우도비 쪽이 약간 더 강력하다. 다만 차이가 미미해 실무에서는 \(F\)를 쓴다.

"최량인가"에 대한 답. 정규성 아래에서 최량인 검정은 분산비에 근거한 검정이다. 다만 기각역을 어떻게 나누는가에서 한 겹의 미세한 차이가 남는다. 자유도가 같으면 위에서 본 역수 대칭 덕분에 꼬리를 반씩 자른 \(F\) 검정이 그대로 균등최강력 불편검정이지만, 자유도가 다르면 꼬리 확률을 반씩 나누는 대신 불편성 조건에 맞춰 자른 쪽(우도비 검정이 그 형태에 가깝다)이 균등최강력 불편검정이고 등꼬리 \(F\)는 그보다 아주 조금 약하다. 어느 쪽이든 이 최적성은 정규성에 전적으로 의존한다. 다음 쪽에서 보듯 정규성이 조금만 어긋나도 유의수준 자체가 무너지므로, "가장 강력한 검정"이라는 성질이 아무 위안이 되지 않는다.

이것이 강건성과 효율의 맞바꿈이다. 레빈·브라운–포사이드 검정은 정규성 아래에서 \(F\)보다 검정력이 낮지만, 가정이 어긋나도 유의수준을 지킨다. 틀린 모형에서의 최적성보다 여러 모형에서의 타당성이 낫다는 판단이며, 15장에서 이 비교를 본격적으로 다룬다.

연습문제 10. 정규성이 완벽해도 표본이 아주 작으면 어떤 일이 생기는가? \(n = 3, 4, 5, 10, 20\)에서 양측 \(5\%\) 검정의 임계값과 \(\sigma_1/\sigma_2=2\)에 대한 검정력을 구하고 해석하라.

풀이
from scipy import stats

print(f"{'n':>5}{'F 임계 상한':>14}{'sigma비 2 의 검정력':>22}")
for n in (3, 4, 5, 10, 20):
    d = n - 1
    lo, hi = stats.f.ppf(0.025, d, d), stats.f.ppf(0.975, d, d)
    pw = stats.f.sf(hi / 4, d, d) + stats.f.cdf(lo / 4, d, d)
    print(f"{n:>5}{hi:>14.3f}{pw:>22.4f}")

출력:

    n       F 임계 상한        sigma비 2 의 검정력
    3        39.000                0.0994
    4        15.439                0.1517
    5         9.605                0.2104
   10         4.026                0.4964
   20         2.526                0.8375

\(n=3\)이면 임계값이 \(39\)다. 표본분산이 \(39\)배 차이 나야 유의하다는 뜻이다. 표준편차로는 \(6.2\)배다.

검정력이 \(0.0994\)로 유의수준 \(0.05\)보다 겨우 두 배 높다. 모표준편차가 실제로 두 배 차이 나는데도 열 번 중 아홉 번은 못 잡는다. 사실상 아무것도 못 하는 검정이다.

\(n\) 임계 상한 필요한 표준편차 비 검정력(\(\sigma\)비 \(2\))
\(3\) \(39.0\) \(6.2\)배 \(0.10\)
\(5\) \(9.6\) \(3.1\)배 \(0.21\)
\(10\) \(4.0\) \(2.0\)배 \(0.50\)
\(20\) \(2.5\) \(1.6\)배 \(0.84\)

자유도가 작을 때 \(F\) 분포의 꼬리가 극단적으로 길다는 사실이 원인이다. \(F_{2,2}\)의 \(97.5\) 백분위수가 \(39\)인 것은 분자와 분모가 각각 자유도 \(2\)의 카이제곱이라 둘 다 매우 불안정하고, 그 비는 더욱 불안정하기 때문이다.

실무적 결론. 집단당 \(n < 10\)이면 등분산 검정을 수행하는 것 자체가 의미 없다. 결과가 유의하지 않아도 등분산의 증거가 되지 않고, 유의하다면 오히려 분산비가 극단적이라는 뜻이라 검정이 필요 없을 정도다.

그래서 작은 표본에서는 검정 대신 설계로 해결한다. 등분산을 가정하지 않는 웰치 방법을 기본으로 쓰거나, 분산이 비슷해질 만한 변환(로그 등)을 적용한다. 검정으로 가정을 확인하려는 시도 자체가 표본이 작을 때는 통하지 않는다. \(\square\)


정리하며

  • 정규모집단에서 \(S_1^2/S_2^2 \sim F_{d_1,d_2}\)는 근사가 아니라 정확한 결과다. KS 거리가 모의오차 수준(0.003)이고 표본크기가 작아도 성립한다.
  • 명목 5% 검정의 실제 오류율이 0.050, 명목 95% 구간의 포함률이 0.950으로 수준이 정확히 지켜진다.
  • 등분산이어도 비의 평균은 \(d_2/(d_2-2) > 1\)이다. 분모 자유도가 작을수록 1에서 멀어진다.
  • 표본크기 불균형은 문제가 되지 않는다. 두 표본분산을 섞지 않고 각자의 자유도로만 나누기 때문이다.
  • 검정력은 약하다. \(n = 20\)에서 분산비 2.25를 잡아낼 확률이 0.40에 그친다. 기각되지 않았다는 것이 등분산의 증거가 되지 못한다.
  • 여기서 얻은 네 수치가 다음 쪽의 비교 기준이 된다.