콘텐츠로 이동

평균에 대한 일표본 t-검정

개요

실무에서 모표준편차 \(\sigma\)를 아는 경우는 거의 없다. 평균에 대한 \(z\)-검정은 \(\sigma\)를 요구하므로 현실의 대부분 문제에 곧바로 쓸 수 없다. 일표본 \(t\)-검정은 \(\sigma\)를 표본표준편차 \(S\)로 바꾸어 이 문제를 해결한다. 이 대체는 추가적인 불확실성을 낳는데(\(S\) 자체가 확률변수이다), \(t\)-분포는 표준정규보다 두꺼운 꼬리로 이 추가 변동을 반영한다. 표본크기가 커지면 \(S\)가 \(\sigma\)로 수렴하고 \(t\)-분포가 표준정규로 수렴하여 \(t\)-검정과 \(z\)-검정이 같아진다.

가설

\(X_1, X_2, \ldots, X_n\)을 평균이 \(\mu\)이고 분산 \(\sigma^2\)을 모르는 모집단에서 뽑은 확률표본이라 하자. 귀무가설은 평균의 특정 값을 지정한다:

\[ H_0\colon \mu = \mu_0 \]

대립가설은 다음 세 형태 중 하나이다:

대립가설 해석
\(H_1\colon \mu \neq \mu_0\) 양측: 평균이 \(\mu_0\)과 다르다
\(H_1\colon \mu > \mu_0\) 우측: 평균이 \(\mu_0\)보다 크다
\(H_1\colon \mu < \mu_0\) 좌측: 평균이 \(\mu_0\)보다 작다

검정통계량

검정통계량은 표본평균 \(\bar{X}\)가 가설의 값 \(\mu_0\)에서 추정된 표준오차 몇 개만큼 떨어져 있는지를 잰다. 구조는 \(z\)-통계량과 같고 \(\sigma\) 자리에 \(S\)가 들어간다:

\[ t = \frac{\bar{X} - \mu_0}{S / \sqrt{n}} \]

여기서 \(S = \sqrt{\frac{1}{n-1}\sum_{i=1}^n (X_i - \bar{X})^2}\)은 표본표준편차이다.

\(H_0\) 아래에서 모집단이 정규이면 이 통계량은 자유도 \(n - 1\)인 스튜던트 \(t\)-분포를 따른다:

\[ t = \frac{\bar{X} - \mu_0}{S / \sqrt{n}} \sim t_{n-1} \]

\(t_{n-1}\) 분포는 표준정규 \(N(0,1)\)보다 꼬리가 두꺼운데, 이는 \(\sigma\)를 추정하는 데서 오는 추가 불확실성을 반영한다. \(n \to \infty\)이면 \(t_{n-1} \to N(0,1)\)이고 \(t\)-검정은 \(z\)-검정으로 환원된다.

왜 자유도가 n - 1인가?

표본표준편차 \(S\)는 \(\bar{X}\)를 추정하는 데 자유도 하나가 소모되므로 분모에 \(n - 1\)을 쓴다. \(n\)개의 편차 \(X_i - \bar{X}\)는 제약 \(\sum(X_i - \bar{X}) = 0\)을 만족하므로, 산포에 관한 자유로운 정보는 \(n - 1\)개뿐이다.

기각역

유의수준 \(\alpha\)에서 기각역은 대립가설에 따라 달라진다.

양측 (\(H_1\colon \mu \neq \mu_0\)): 다음이면 \(H_0\)을 기각한다.

\[ |t| > t_{\alpha/2,\, n-1} \]

우측 (\(H_1\colon \mu > \mu_0\)): 다음이면 \(H_0\)을 기각한다.

\[ t > t_{\alpha,\, n-1} \]

좌측 (\(H_1\colon \mu < \mu_0\)): 다음이면 \(H_0\)을 기각한다.

\[ t < -t_{\alpha,\, n-1} \]

여기서 \(t_{\alpha,\, n-1}\)은 \(P(t_{n-1} > t_{\alpha,\, n-1}) = \alpha\)를 만족하는 \(t_{n-1}\) 분포의 상위 \(\alpha\) 임계값이다.

t 분포의 꼬리와 임계값

\(z\) 대신 \(t\)를 쓰는 이유가 왼쪽에 있다. \(\sigma\)를 \(S\)로 바꾸면 분모가 상수에서 확률변수로 바뀌고, 그 흔들림이 꼬리를 두껍게 만든다. 자유도가 작을수록 두껍고, 커질수록 정규분포에 가까워진다.

오른쪽이 그 대가를 수로 옮긴 것이다. 자유도 \(2\)에서 양측 5% 임계값이 \(4.30\)으로 \(1.96\)의 두 배를 넘고, \(10\)에서 \(2.23\), \(30\)에서 \(2.04\)로 내려와 결국 \(1.96\)에 붙는다. \(\sigma\)를 모른다는 사실 하나 때문에 문턱이 이만큼 높아지며, 그 대가는 표본이 작을수록 크다.

실무 기준으로 \(n\)이 30을 넘으면 \(t\)와 \(z\)의 차이가 3% 남짓이라 어느 쪽을 써도 결론이 거의 같다. 그러나 \(n\)이 한 자리 수이면 차이가 결정적이므로 반드시 \(t\)를 써야 한다.

풀이 보기

한 식품 제조사가 시리얼 상자에 평균 \(\mu_0 = 500\) 그램이 들어 있다고 주장한다. 어떤 소비자 단체가 내용량이 부족하다고 의심하여 상자 \(n = 16\)개를 무작위로 모아 \(\bar{x} = 496.2\) 그램, \(s = 4.8\) 그램을 얻었다. \(\alpha = 0.05\)에서 평균 충전 중량이 500 그램보다 적은지 검정하라.

1단계. 가설을 세운다:

\[ H_0\colon \mu = 500 \qquad H_1\colon \mu < 500 \]

2단계. 검정통계량을 계산한다:

\[ t = \frac{496.2 - 500}{4.8 / \sqrt{16}} = \frac{-3.8}{1.2} = -3.167 \]

3단계. 임계값을 구한다. 자유도 15, \(\alpha = 0.05\)의 좌측검정에서:

\[ -t_{0.05,\, 15} = -1.753 \]

4단계. 판정한다. \(t = -3.167 < -1.753\)이므로 \(H_0\)을 기각한다. 5% 수준에서 평균 충전 중량이 500 그램보다 적다고 결론지을 충분한 증거가 있다.

\(p\)-값은 \(P(t_{15} < -3.167) \approx 0.003\)으로 \(H_0\)에 반하는 강한 증거이다.

가정

일표본 \(t\)-검정에는 다음이 필요하다:

  • 확률표본추출: 관측값이 독립이고 동일한 분포를 따른다.
  • 정규성: 모집단이 정규분포를 따르거나, \(n\)이 중심극한정리가 적용될 만큼 크다.

로버스트성

\(t\)-검정은 정규성에서 벗어나도 꽤 로버스트하며, 특히 표본이 중간 이상으로 크면 그렇다. 모의실험 연구들은 \(n \geq 30\)이면 적당히 치우치거나 꼬리가 두꺼운 분포에서도 실제 제1종 오류율이 명목 \(\alpha\)에 가깝게 유지됨을 보여준다. 표본이 더 작으면(\(n < 15\)) 모집단이 심하게 치우쳤거나 꼬리가 두꺼울 때 검정을 믿기 어렵다.

정규성 가정이 가장 중요한 때에 대한 지침:

  • \(n < 15\): 정규성이 중요하다. Q-Q 그림이나 Shapiro-Wilk 검정으로 확인하라. 정규성이 의심스러우면 비모수적 대안(예: Wilcoxon 부호순위 검정)을 고려하라.
  • \(15 \leq n < 30\): 정규성에서 약간 벗어나는 것은 견딜 만하다. 심하게 치우치거나 꼬리가 두꺼운 분포에서만 검정을 믿기 어렵다.
  • \(n \geq 30\): 중심극한정리가 \(\bar{X}\)의 표본분포를 근사적으로 정규로 만들어 주므로 대부분의 실제 분포에서 \(t\)-검정이 믿을 만하다.

이상점은 여전히 문제이다

\(n\)이 커도 개별 이상점이 \(S\)를 부풀리고 \(\bar{X}\)를 옮겨 실제 효과를 가리거나 없는 효과를 만들어낼 수 있다. \(t\)-검정을 적용하기 전에 항상 자료에 이상점이 있는지 살펴보라.

연습문제

연습문제 1. 시리얼: 주장된 평균 500 g. 표본 \(n = 25\), \(\bar X = 490\), \(s = 15\). \(\alpha = 0.01\)에서 검정하라.

풀이

\(H_0: \mu = 500\) 대 \(H_1: \mu \ne 500\).

\(t = (490 - 500)/(15/\sqrt{25}) = -10/3 = -3.33\).

임계값: \(t_{0.005, 24} = \pm 2.797\). \(|t| = 3.33 > 2.797\). 기각한다.

평균이 500 g보다 작다는 강한 증거이다.

연습문제 2. \(t\)-검정의 조건. 진술하고 설명하라.

풀이
  1. 확률표본 / 독립성: \(X_i\)가 독립이다(적어도 교환 가능해야 한다). 비복원 추출이면 표본추출 비율이 10% 미만이어야 한다.

  2. 정규성: 바탕 모집단이 근사적으로 정규이거나, \(n\)이 중심극한정리로 \(\bar X\)가 근사적으로 정규가 될 만큼 커야 한다.

\(n\)이 작고(30 미만) 자료가 정규가 아니면 \(t\)-검정의 크기가 틀릴 수 있다. Q-Q 그림으로 정규성을 확인하라.

꼬리가 매우 두껍거나 심하게 치우친 자료: Wilcoxon 부호순위(비모수)나 붓스트랩 검정을 쓰라.

연습문제 3. 단측검정. 연습문제 1과 같은 자료로 \(H_1: \mu < 500\)(평균이 주장보다 낮다고 의심)을 검정하라.

풀이

임계값: \(t_{0.01, 24} = -2.492\). \(t = -3.33 < -2.492\). 기각한다.

p-값: \(P(T_{24} < -3.33) \approx 0.0014\).

판정은 그대로 기각이다. 다만 \(\alpha\) 전부를 한쪽 꼬리에 두므로 p-값이 양측의 절반이다.

연습문제 4. 효과크기. 시리얼 문제에서 Cohen의 \(d\)를 계산하라.

풀이

Cohen의 \(d = (\bar X - \mu_0)/s = (490 - 500)/15 = -0.67\).

해석:

  • \(|d| = 0.2\): 작음.
  • \(|d| = 0.5\): 중간.
  • \(|d| = 0.8\): 큼.

\(d = -0.67\)은 "중간에서 큰 쪽"이다. 통계적 유의성과 의미 있는 효과크기가 함께 있으므로 시리얼 중량에 실제 문제가 있다는 신호이다.

항상 p-값과 함께 효과크기를 보고하라. (특히 \(n\)이 클 때) p-값만으로는 사소한 효과에도 신호가 켜질 수 있다.

연습문제 5. 검정력을 위한 표본크기. \(\sigma \approx 15\)라고 할 때 \(\alpha = 0.01\)에서 5 g 감소를 탐지할 검정력 90%를 얻으려면 \(n\)이 얼마여야 하는가?

풀이

\(n = ((z_{\alpha/2} + z_\beta) \sigma/\Delta)^2\) (\(n\)이 어느 정도 클 것이므로 \(z\)로 근사한다).

\(z_{0.005} = 2.576\), \(z_{0.10} = 1.282\). \(\Delta = 5\), \(\sigma = 15\).

\(n = ((2.576 + 1.282) \cdot 15/5)^2 = (11.57)^2 \approx 134\).

작은 효과를 높은 검정력으로 탐지하려면 표본이 커야 한다. 10 g을 탐지하려면 \(n \approx 34\). \(1/\Delta\)에 대해 이차이다.

연습문제 6. 다중검정. 어떤 품질보증 엔지니어가 생산라인 20곳에 \(t\)-검정을 돌린다. \(\alpha = 0.05\)에서 모든 귀무가설이 참일 때 가족단위 거짓 양성 비율은?

풀이

\(P(\text{적어도 한 번 잘못 기각}) = 1 - (1 - 0.05)^{20} \approx 0.642\).

잘못된 기각 수의 기댓값: \(20 \cdot 0.05 = 1\).

가족단위 오류를 \(\alpha = 0.05\)로 통제하려면 Bonferroni를 써서 각각을 \(\alpha/20 = 0.0025\)에서 검정한다. 매우 보수적이다.

대안 — FDR(Benjamini-Hochberg): 양성으로 선언한 것 중 거짓 양성의 기대 비율을 통제한다. 덜 보수적이며 고처리량 검정의 표준이다.

보정하지 않으면 다중검정 상황에서 거짓 경보가 사실상 확실하다.

연습문제 7. \(t\) 검정의 제1종 오류율이 비정규 모집단에서 어떻게 어긋나는지 정량화하라. 어느 분포가 위험한가?

풀이
import numpy as np
from scipy import stats

rng = np.random.default_rng(51)
M = 40_000
cases = [
    ("정규", lambda s: rng.normal(0, 1, s)),
    ("균등", lambda s: rng.uniform(-1.732, 1.732, s)),
    ("t(3)", lambda s: rng.standard_t(3, s)),
    ("지수-1", lambda s: rng.exponential(1, s) - 1),
    ("로그정규", lambda s: rng.lognormal(0, 1, s) - np.exp(0.5)),
]
print(f"{'분포':>9s} " + " ".join(f"{'n='+str(n):>8s}"
                                  for n in [5, 10, 30, 100]))
for name, gen in cases:
    row = []
    for n in [5, 10, 30, 100]:
        x = gen((M, n))
        t = x.mean(1) / (x.std(1, ddof=1) / np.sqrt(n))
        row.append(np.mean(np.abs(t) > stats.t.ppf(0.975, n - 1)))
    print(f"{name:>9s} " + " ".join(f"{v:8.4f}" for v in row))
       분포      n=5     n=10     n=30    n=100
       정규   0.0497   0.0529   0.0520   0.0499
       균등   0.0655   0.0538   0.0511   0.0502
     t(3)   0.0370   0.0398   0.0440   0.0474
     지수-1   0.1192   0.1009   0.0745   0.0572
     로그정규   0.1751   0.1608   0.1153   0.0847

왜도가 문제이지 첨도가 아니다.

분포 왜도 첨도 \(n=30\)의 수준
균등 0 \(-1.2\) 0.051
\(t_3\) 0 \(\infty\) 0.044
지수 2 6 0.075
로그정규 6.2 111 0.115
  • \(t_3\)는 첨도가 무한대인데도 0.044로 오히려 보수적이다. 두꺼운 꼬리가 \(S\)를 키워 통계량을 눌러 주기 때문이다.
  • 지수와 로그정규는 왜도가 커서 어긋난다. 로그정규는 \(n=100\)에서도 0.085다.

회복 속도. 로그정규에서 \(n\)을 20배 늘려도(5 → 100) 0.175에서 0.085로 절반만 준다. \(n^{-1/2}\)로 매우 느리게 수렴한다.

단측검정은 훨씬 나쁘다.

for n in [10, 30, 100]:
    x = rng.exponential(1, (M, n)) - 1
    t = x.mean(1) / (x.std(1, ddof=1) / np.sqrt(n))
    tc = stats.t.ppf(0.95, n - 1)
    print(f"n={n:4d}: 왼쪽 꼬리 {np.mean(t < -tc):.4f}   "
          f"오른쪽 꼬리 {np.mean(t > tc):.4f}")
n=  10: 왼쪽 꼬리 0.1355   오른쪽 꼬리 0.0144
n=  30: 왼쪽 꼬리 0.0994   오른쪽 꼬리 0.0225
n= 100: 왼쪽 꼬리 0.0729   오른쪽 꼬리 0.0303

오른쪽으로 치우친 분포에서 왼쪽 단측검정의 오류율이 세 배다. 앞서 본 \(\operatorname{Cov}(\bar X,S^2)>0\)의 결과다. 양측검정에서는 두 꼬리의 오차가 부분적으로 상쇄되므로 덜 심각하다.

실무 지침.

  1. 왜도를 확인한다. 첨도보다 중요하다. \(|\hat\gamma_1|>1\)이면 주의한다.
  2. 단측 결론을 피하거나 매우 조심한다.
  3. 변환, 부트스트랩-\(t\), 순열검정을 고려한다.
  4. "\(n\ge30\)이면 괜찮다"는 경험칙을 믿지 않는다. 왜도가 크면 \(n=100\)도 부족하다.

연습문제 8. \(t\) 검정의 대안 셋(\(t\), 윌콕슨 부호순위, 부호검정)을 같은 자료에서 비교하고, 무엇을 검정하는지 명확히 구별하라.

풀이

세 검정이 다른 것을 검정한다.

검정 \(H_0\) 필요한 가정
\(t\) \(\mu=\mu_0\) 근사 정규(또는 큰 \(n\))
윌콕슨 부호순위 유사중앙값 \(=\mu_0\) 대칭
부호검정 중앙값 \(=\mu_0\) 없음
import numpy as np
from scipy import stats

rng = np.random.default_rng(64)
n, M = 20, 10_000

def run(gen, center):
    c = np.zeros(3)
    for _ in range(M):
        x = gen(n)
        c[0] += stats.ttest_1samp(x, center).pvalue < 0.05
        c[1] += stats.wilcoxon(x - center).pvalue < 0.05
        k = (x > center).sum()
        c[2] += stats.binomtest(k, n, 0.5).pvalue < 0.05
    return c / M

print("H0 가 참인 경우 — 각 검정의 '참값'을 기준점으로")
print(f"{'분포':>10s} {'t(평균)':>9s} {'윌콕슨(유사중앙값)':>18s} "
      f"{'부호(중앙값)':>13s}")
pm_exp = stats.gamma.ppf(0.5, 2) / 2
for name, gen, ctr in [
        ("정규", lambda s: rng.normal(0, 1, s), (0.0, 0.0, 0.0)),
        ("지수", lambda s: rng.exponential(1, s), (1.0, pm_exp, np.log(2))),
        ("t(3)", lambda s: rng.standard_t(3, s), (0.0, 0.0, 0.0))]:
    c = np.zeros(3)
    for _ in range(M):
        x = gen(n)
        c[0] += stats.ttest_1samp(x, ctr[0]).pvalue < 0.05
        c[1] += stats.wilcoxon(x - ctr[1]).pvalue < 0.05
        k = (x > ctr[2]).sum()
        c[2] += stats.binomtest(k, n, 0.5).pvalue < 0.05
    print(f"{name:>10s} {c[0] / M:9.4f} {c[1] / M:18.4f} "
          f"{c[2] / M:13.4f}")
H0 가 참인 경우 — 각 검정의 '참값'을 기준점으로
        분포     t(평균)         윌콕슨(유사중앙값)       부호(중앙값)
        정규    0.0503             0.0499        0.0452
        지수    0.0802             0.0576        0.0423
      t(3)    0.0404             0.0473        0.0398

각 검정을 자기 모수로 검정하면 대체로 타당하다. 지수분포에서 윌콕슨이 0.058인 것은 유사중앙값을 검정했기 때문이며, 남은 초과는 \(n=20\)의 소표본 효과다. 평균을 검정하는 \(t\)는 0.080으로 크게 어긋난다.

핵심 — 비모수 검정이 "평균 검정의 대안"이 아니다. 대칭이 아니면 세 모수가 모두 다르다.

print(f"지수분포(1)의 세 중심: 평균 1.0000, "
      f"유사중앙값 {pm_exp:.4f}, 중앙값 {np.log(2):.4f}")
지수분포(1)의 세 중심: 평균 1.0000, 유사중앙값 0.8392, 중앙값 0.6931

부호검정이 보수적이다(0.040~0.045). 이산성 때문이며, \(n=20\)에서 도달 가능한 최대 수준이 0.041이다.

효율 비교(정규분포 기준 점근상대효율).

검정 정규 균등 로지스틱 이중지수 \(t_3\)
\(t\) 1.00 1.00 1.00 1.00 1.00
윌콕슨 0.955 1.00 1.10 1.50 1.62
부호 0.637 0.33 0.82 2.00 1.62

윌콕슨의 손실은 정규에서도 4.5%뿐이고, 꼬리가 두꺼우면 크게 앞선다. 대칭성만 확인된다면 기본값으로 삼을 만하다.

선택 지침.

  1. 평균이 관심사이고 왜도가 작음 → \(t\)
  2. 대칭이고 꼬리가 두꺼움 → 윌콕슨
  3. 중앙값이 관심사, 가정 최소 → 부호검정
  4. 평균이 관심사인데 치우침 → 부트스트랩-\(t\) 또는 변환

연습문제 9. \(t\) 검정 결과를 효과크기와 함께 보고하는 방법을 정리하고, \(d\)의 구간을 구하라.

풀이
import numpy as np
from scipy import stats
from scipy.optimize import brentq

n, xbar, s, mu0 = 25, 490.0, 18.0, 500.0
t = (xbar - mu0) / (s / np.sqrt(n))
p = 2 * stats.t.sf(abs(t), n - 1)
d = (xbar - mu0) / s
g = d * (1 - 3 / (4 * (n - 1) - 1))              # 헤지스 보정

# d 의 신뢰구간: 비중심 t 분포를 역전
def nct_ci(t, n, level=0.95):
    lo = brentq(lambda nc: stats.nct.sf(t, n - 1, nc) - (1 - level) / 2,
                -20, 20)
    hi = brentq(lambda nc: stats.nct.cdf(t, n - 1, nc) - (1 - level) / 2,
                -20, 20)
    return lo / np.sqrt(n), hi / np.sqrt(n)

lo, hi = nct_ci(t, n)
tc = stats.t.ppf(0.975, n - 1)
h = tc * s / np.sqrt(n)
print(f"t({n-1}) = {t:.4f},  p = {p:.5f}")
print(f"평균 차이 {xbar - mu0:.1f} g  (95% CI {xbar - mu0 - h:.2f} ~ "
      f"{xbar - mu0 + h:.2f})")
print(f"코헨의 d = {d:.4f},  헤지스의 g = {g:.4f}")
print(f"d 의 95% 구간 ({lo:.4f}, {hi:.4f})")
t(24) = -2.7778,  p = 0.01045
평균 차이 -10.0 g  (95% CI -17.43 ~ -2.57)
코헨의 d = -0.5556,  헤지스의 g = -0.5380
d 의 95% 구간 (-0.9726, -0.1286)

\(d\)의 구간이 \(-0.97\)에서 \(-0.13\)으로 매우 넓다. "중간 효과"인지 "작은 효과"인지조차 확정하지 못한다. \(n=25\)에서는 어쩔 수 없다.

보고할 것 여섯.

  1. 원 척도의 차이와 구간. \(-10.0\) g(95% CI \(-17.4\)~\(-2.6\)). 가장 중요하다.
  2. 검정통계량과 자유도. \(t(24)=-2.78\).
  3. \(p\)-값. 0.010.
  4. 표준화 효과크기와 구간. \(d=-0.56\)(95% CI \(-0.97\)~\(-0.13\)).
  5. 표본크기와 요약통계. \(n=25\), \(\bar x=490\), \(s=18\).
  6. 가정 확인. 정규성 진단 결과.

\(d\)의 구간을 왜 보고하는가. 점추정값만 적으면 정밀도를 알 수 없다. 앞서 본 M-오류 때문에 작은 연구의 \(d\)는 과장되어 있으므로, 구간이 그 불확실성을 드러낸다.

헤지스 보정. \(d\)는 소표본에서 위쪽으로 편향되어 있다. 보정 계수

\[ J=1-\frac{3}{4(n-1)-1} \]

를 곱한다. \(n=25\)에서 \(J=0.9684\)로 3% 줄인다. \(n\)이 크면 무시할 만하다.

해석의 주의.

  • "\(d=0.5\)는 중간 효과"라는 기준은 관례일 뿐이다. 분야의 맥락에서 판단한다.
  • \(d\)는 \(\sigma\)에 의존한다. 동질적인 표본에서는 같은 절대 효과가 큰 \(d\)를 준다.
  • 원 척도에 의미가 있으면 그것을 우선한다. "시리얼 10 g 부족"이 "\(d=0.56\)"보다 유익하다.

연습문제 10. \(t\) 검정의 가정을 진단하는 방법을 정리하고, 정규성 검정을 사전검정으로 쓰면 안 되는 이유를 밝혀라.

풀이

네 가지 가정과 진단.

가정 진단 위배 시
독립 설계 확인, 잔차의 자기상관 가장 심각. 수준이 크게 어긋남
동일분포 시간 추세, 층 확인 층화 분석
근사 정규 Q-Q 그림, 왜도 앞 문제에서 본 대로 왜도가 관건
이상치 없음 상자그림, 영향도 강건 방법

독립이 가장 중요하다.

import numpy as np
from scipy import stats

rng = np.random.default_rng(17)
M, n = 20_000, 30
print(f"{'AR(1) ρ':>8s} {'t 검정의 실제 수준':>18s}")
for rho in [0.0, 0.1, 0.3, 0.5]:
    e = rng.standard_normal((M, n))
    x = np.empty((M, n))
    x[:, 0] = e[:, 0]
    for j in range(1, n):
        x[:, j] = rho * x[:, j - 1] + np.sqrt(1 - rho**2) * e[:, j]
    t = x.mean(1) / (x.std(1, ddof=1) / np.sqrt(n))
    print(f"{rho:8.1f} {np.mean(np.abs(t) > stats.t.ppf(0.975, n - 1)):18.4f}")
 AR(1) ρ        t 검정의 실제 수준
     0.0             0.0491
     0.1             0.0717
     0.3             0.1450
     0.5             0.2583

\(\rho=0.3\)만 되어도 수준이 0.145로 세 배다. 앞 문제에서 본 비정규성의 영향(\(n=30\)에서 최악 0.115)보다 크다. 독립성 위배가 정규성 위배보다 훨씬 위험하다.

정규성 사전검정을 쓰면 안 되는 이유 넷.

  1. 2단계 절차의 수준이 명목과 다르다. 앞서 등분산 사전검정에서 본 것과 같은 문제다.

  2. 검정력이 반대로 작동한다. \(n\)이 작을 때는 정규성 검정이 무력해 위배를 놓치고, \(n\)이 클 때는 사소한 위배도 잡아내는데 정작 그때는 \(t\) 검정이 강건하다. 필요한 곳에서 작동하지 않고, 불필요한 곳에서 작동한다.

rng = np.random.default_rng(23)
print(f"\n{'n':>5s} {'지수분포에서 샤피로-윌크 기각률':>26s}")
for n in [10, 20, 50, 100]:
    r = np.mean([stats.shapiro(rng.exponential(1, n)).pvalue < 0.05
                 for _ in range(3_000)])
    print(f"{n:5d} {r:26.4f}")
    n          지수분포에서 샤피로-윌크 기각률
   10                     0.4577
   20                     0.8353
   50                     0.9983
  100                     1.0000

\(n=10\)에서는 지수분포조차 46%만 잡아낸다. 정작 \(t\) 검정이 가장 취약한 영역이다.

  1. "기각하지 못함"이 정규성의 증거가 아니다. 앞서 본 귀무가설의 비대칭 문제다.

  2. 더 나은 대안이 있다. 그림으로 진단하고, 의심되면 처음부터 강건한 방법을 쓴다.

권장 절차.

  1. 설계를 확인한다. 독립성은 자료가 아니라 설계가 보장한다.
  2. Q-Q 그림과 히스토그램을 그린다. 왜도의 방향과 크기를 눈으로 본다.
  3. 왜도를 계산한다. 표본왜도와 그 표준오차를 함께.
  4. 의심되면 방법을 바꾼다. 사전검정으로 결정하지 않고, 자료의 성격과 영역 지식으로 정한다.
  5. 사전에 정한다. 분석 계획에 "왜도가 크면 로그 변환을 쓴다"처럼 규칙을 적어 둔다.

정리하며

\(\sigma\) 를 모를 때가 실무의 기본값이고, 그때 쓰는 것이 \(t\) 검정이다.

\[ T=\frac{\bar X-\mu_0}{S/\sqrt n}\sim t_{n-1} \]
  • \(S\) 가 확률변수라는 사실이 대가를 만든다. 분모가 흔들리는 만큼 통계량의 꼬리가 두꺼워지며, \(t\) 분포가 그 추가 변동을 반영한다. 그래서 \(t\) 임계값이 \(z\) 임계값보다 크다.
  • 분자와 분모가 독립이어야 한다. \(\bar X\) 와 \(S^2\) 의 독립성은 정규모집단에서만 성립하는 성질이며(7장), 그것이 \(t\) 분포가 정확히 나오는 근거다.
  • \(n\) 이 커지면 \(z\) 검정과 같아진다. \(t_{n-1}\to N(0,1)\) 이므로 \(n\ge30\) 쯤부터 차이가 실무적으로 사라진다.
  • 비정규성에 비교적 강건하다. 중심극한정리 덕분에 \(\bar X\) 가 정규에 가까워지기 때문이며, 다만 심하게 치우친 모집단에서는 \(n\ge30\) 으로 부족하다(3장에서 로그정규는 \(n\approx1300\) 이 필요했다).
  • 이상치에는 강건하지 않다. 평균과 표준편차가 모두 이상치에 끌리므로, 의심스러우면 16장의 비모수 대안을 쓴다.

다음 절 \(p\) 에 대한 \(Z\) 검정으로 넘어간다.