콘텐츠로 이동

표본크기가 검정력에 미치는 영향

핵심 문제

정규성 검정도 가설검정이며, 모든 가설검정과 마찬가지로 정규성 이탈을 탐지하는 능력이 표본크기 \(n\)에 의존한다. 여기서 실용적인 딜레마가 생긴다. \(n\)이 작아 정규성이 가장 중요할 때는 검정이 위배를 탐지할 검정력이 없고, \(n\)이 커서 중심극한정리가 로버스트성을 제공할 때는 검정이 너무 강력해져 사소한 이탈에도 정규성을 기각한다. 정규성 검정 결과를 올바르게 해석하려면 이 관계를 이해해야 한다.

정규성 검정의 검정력

정규성 검정의 검정력은 자료가 실제로 정규가 아닌 분포에서 왔을 때 귀무가설 \(H_0\): "자료가 정규분포를 따른다"를 기각할 확률이다. 형식적으로 \(F\)를 자료의 참 분포, \(\Phi\)를 정규 누적분포함수라 하면

\[ \text{Power} = P\left(\text{Reject } H_0 \mid F \neq \Phi\right) \]

검정력은 세 요인에 의존한다.

  1. 표본크기 \(n\). 표본이 클수록 분포의 모양에 대한 정보가 많아져 이탈을 탐지하는 능력이 커진다.
  2. 유의수준 \(\alpha\). \(\alpha\)가 크면 검정력이 커지지만 제1종 오류율도 커진다.
  3. 비정규성의 정도. 참 분포 \(F\)가 정규에서 멀수록 탐지하기 쉽다.

작은 표본에서의 거동

\(n\)이 작으면(대략 \(n < 30\)) 정규성 검정의 검정력이 낮다. 정규성에서 상당히 벗어나 있어도 탐지되지 않을 수 있다. 강하게 오른쪽으로 치우친 지수분포에서 \(n = 15\)인 표본을 뽑았다고 하자. Shapiro-Wilk 검정은 그런 표본의 상당 비율에서 \(H_0\)을 기각하지 못할 수 있다. 자료가 정규여서가 아니라 이탈을 탐지할 증거가 부족하기 때문이다.

이 낮은 검정력이 문제인 이유는, 작은 표본에서의 추론이야말로 정규성 가정이 가장 중요한 상황이기 때문이다. \(t\) 검정과 신뢰구간에 쓰는 \(t\) 분포는 정확한 정규성 아래에서 유도되었고, \(n\)이 작으면 중심극한정리가 거의 보호해 주지 못한다.

기각하지 못한 것이 정규성을 확인해 주지는 않는다

정규성 검정의 유의하지 않은 결과는 "정규성을 기각할 증거가 부족하다"는 뜻이지 "자료가 정규이다"라는 뜻이 아니다. 이 구분은 검정이 큰 이탈조차 탐지할 검정력이 없을 수 있는 작은 표본에서 특히 중요하다.

큰 표본에서의 거동

\(n\)이 커지면 일치성 있는 정규성 검정의 검정력은 고정된 어떤 비정규 분포에 대해서든 1로 수렴한다. 곧 자료가 충분히 많으면 참 분포가 정규에 아무리 가까워도 결국 \(H_0\)을 기각한다는 뜻이다. 형식적으로 \(F \neq \Phi\)인 임의의 분포와 임의의 \(\alpha > 0\)에 대해

\[ \lim_{n \to \infty} P\left(\text{Reject } H_0 \mid F\right) = 1 \]

이 일치성은 표본이 아주 크면 정규성 검정이 거의 언제나 기각한다는 것을 뜻한다. 초과첨도가 0.1인(실용적으로는 정규와 거의 구별되지 않는) 분포에서 뽑은 \(n = 10{,}000\)짜리 자료는 Shapiro-Wilk나 Anderson-Darling 검정에서 유의한 결과를 낼 가능성이 높다.

기각은 자료가 정확히 정규는 아니라는 사실을 알려줄 뿐이며, 실제 자료에서는 그것이 거의 언제나 참이다. 그 이탈이 후속 통계 절차의 타당성에 영향을 줄 만큼 큰지는 알려주지 않는다.

실용적 역설

이는 "정규성을 검정한 뒤 모수적 추론으로 진행한다"는 표준 작업 흐름에 역설을 만든다.

표본크기 정규성 검정의 검정력 정규성의 필요성 실제 상황
작음 (\(n < 30\)) 낮음 높음 중요한 위배를 검정이 탐지하지 못한다
중간 (\(30 \leq n \leq 100\)) 중간 중간 검정이 유익하고 쓸모 있다
큼 (\(n > 500\)) 매우 높음 낮음(CLT가 돕는다) 무관한 이탈에도 기각한다

중간 크기의 표본 구간이 실제 필요에 견주어 정규성 검정이 가장 유용한 정보를 주는 "적정 지점"이다.

효과의 수량화

예시로 자유도 \(\nu\)인 \(t\) 분포를 대립가설로 두었을 때 \(\alpha = 0.05\)에서 Shapiro-Wilk 검정의 검정력을 살펴보자. \(\nu \to \infty\)이면 \(t\) 분포가 정규로 수렴하므로 \(\nu\)가 작을수록 정규성에서 더 크게 벗어난 것이다.

아래는 모의실험(반복 8,000회)으로 얻은 실제 검정력이다.

\(\nu = 5\)(초과첨도 \(= 6/(5-4) = 6\), 상당히 큰 이탈):

\(n\) 5 10 20 30 50 100 200 300 500
검정력 0.066 0.117 0.184 0.248 0.352 0.567 0.812 0.926 0.992

\(\nu = 30\)(초과첨도 \(= 6/(30-4) = 0.231\), 가벼운 이탈):

\(n\) 20 50 100 200 500 1000 2000 5000
검정력 0.062 0.073 0.083 0.093 0.149 0.201 0.334 0.631

이 수치들이 말하는 바는 분명하다. 초과첨도가 6이나 되는 뚜렷한 이탈조차 \(n = 50\)에서 탐지 확률이 35%에 지나지 않고, 80% 검정력에 이르려면 \(n \approx 200\)이 필요하다. 반면 초과첨도 0.23인 가벼운 이탈은 \(n = 5000\)에서도 검정력이 63%에 머문다. "표본이 크면 무조건 기각한다"는 말은 점근적으로는 옳지만, 그 "충분히 큰" \(n\)이 이탈의 크기에 따라 극적으로 달라진다는 점을 함께 기억해야 한다.

두 표를 한 그림에 겹쳐 보면

위의 두 표를 같은 축 위에 올리고, 중간 단계인 \(t_{10}\)까지 더해 그린 것이 아래 그림이다. 배경의 붉은 띠는 정규성 가정이 가장 중요한 \(n < 30\) 구간이고, 초록 띠는 중심극한정리가 평균 기반 추론을 대신 지켜 주는 \(n > 500\) 구간이다.

표본크기에 따른 Shapiro-Wilk 검정력 곡선과 정규성이 필요한 구간을 함께 보인 그림

세 곡선 모두 왼쪽 붉은 띠 안에서는 바닥을 긴다. 초과첨도 \(6\)이라는 극단적 이탈조차 \(n = 30\)에서 기각률이 \(0.25\)이고, \(t_{10}\)은 \(0.11\), \(t_{30}\)은 \(0.06\)으로 사실상 크기와 구별되지 않는다. 정규성이 가장 절실한 구간에서 검정은 아무것도 말해 주지 못한다. 이 구간에서 "\(p = 0.4\)였으니 정규다"라고 적는 것은 아무 정보도 없는 문장을 쓰는 일이다.

세 곡선이 \(0.8\) 선을 넘는 지점을 보라. \(t_5\)는 \(n \approx 200\), \(t_{10}\)은 \(n \approx 800\), \(t_{30}\)은 \(n = 5000\)에서도 \(0.62\)로 아직 못 넘었다. 곧 검정이 쓸 만해지는 표본크기는 이탈의 크기에 따라 수백에서 수만까지 벌어진다. 그런데 그 무렵이면 이미 초록 띠에 들어와 있다. 검정이 힘을 내기 시작하는 곳은 그 답이 실무적으로 덜 중요해지는 곳이다. 이것이 이 쪽 첫머리에서 말한 역설의 그림이다.

역설에서 빠져나오는 길은 검정을 더 잘 고르는 것이 아니라 질문을 바꾸는 것이다. "\(p\)값이 얼마인가" 대신 "\(g_1\)과 \(g_2\)가 얼마이고, 그 크기가 내가 쓰려는 절차를 망가뜨리는가"를 물어야 한다. 작은 표본에서는 Q-Q 그림이 검정보다 훨씬 많은 것을 알려주고, 큰 표본에서는 효과 크기가 \(p\)값보다 훨씬 많은 것을 알려준다. 정규성 검정이 두 방식 모두를 이기는 구간은 가운데 \(30 \leq n \leq 500\) 정도로 좁다.

보기 1. 표본크기에 따른 검정력. 모집단을 \(t_5\)로 고정하고 \(n\)만 \(15\)에서 \(1000\)까지 바꾸어, 샤피로–윌크 검정이 비정규성을 잡아내는 비율을 반복 5,000회로 잰다.

(1) 이 모의실험의 검정력 곡선이 바닥에서 수렴하는 값은 얼마여야 하는가. 그 값을 귀무가설에서 직접 확인하시오.

(2) 반복 5,000회의 몬테카를로 표준오차를 구하고, 본문의 표(반복 8,000회로 따로 돌린 것)와 같은 \(n\)에서 한 자리씩 견주어 두 모의가 일치하는지 판정하시오. 검정력이 \(0.8\)에 이르는 \(n\)도 좁혀 구하시오.

풀이
import numpy as np
from scipy import stats

# ===================================================================
# 표본크기가 커지면 정규성 검정의 검정력이 어떻게 되는가
#
# 모집단은 자유도 5 인 t 로 고정해 두고 n 만 바꾼다. 정규에서 벗어난
# 정도는 내내 같은데, n 이 커지면 검정력이 1 로 다가간다.
# 큰 표본에서 정규성 검정이 거의 늘 기각하는 까닭이 이것이다.
# ===================================================================

np.random.seed(42)
n_simulations = 5000
alpha = 0.05

sample_sizes = [15, 30, 50, 100, 200, 500, 1000]

if __name__ == "__main__":
    print("Power of Shapiro-Wilk test vs. t(5) distribution")
    print(f"{'n':>6}  {'Power':>8}")
    print("-" * 16)

    for n in sample_sizes:
        rejections = 0
        for _ in range(n_simulations):
            sample = stats.t.rvs(df=5, size=n)
            # scipy 의 shapiro 는 n<=5000 까지만 정확하다.
            if n <= 5000:
                _, p = stats.shapiro(sample)
                if p < alpha:
                    rejections += 1
        power = rejections / n_simulations
        print(f"{n:>6}  {power:>8.3f}")

출력:

Power of Shapiro-Wilk test vs. t(5) distribution
     n     Power
----------------
    15     0.153
    30     0.253
    50     0.355
   100     0.556
   200     0.811
   500     0.990
  1000     1.000

(1) 바닥값은 유의수준 \(\alpha = 0.05\)다. 검정력은 \(P(\text{기각} \mid F)\)이고, \(n\)이 작아지면 자료가 참 분포 \(F\)에 대해 아무 정보도 주지 못하는 쪽으로 가므로 기각률은 귀무가설이 참일 때의 값, 곧 검정의 크기로 수렴한다. 올바르게 교정된 검정의 크기는 \(\alpha\)이므로 검정력 곡선은 \(0\)이 아니라 \(0.05\)에서 출발한다.

표의 \(n = 15\)에서 \(0.153\)이라는 수를 이 기준으로 읽어야 한다. 겉보기에 "15%는 잡는다"처럼 보이지만, 바닥이 \(0.05\)이니 이탈이 실제로 기여한 몫은 \(0.10\)뿐이다. 초과첨도가 \(6\)이나 되는 극단적 이탈에서도 그렇다.

(2) 반복 \(R\)회 모의의 몬테카를로 표준오차는 \(\sqrt{\pi(1-\pi)/R}\)이다. \(R = 5000\), \(\pi \approx 0.5\)에서 가장 커져 \(0.0071\)이고, \(\pi = 0.99\) 근처에서는 \(0.0014\)로 작아진다. 곧 이 표의 수는 셋째 자리까지 믿을 것이 아니다.

import numpy as np
from scipy import stats

alpha, R = 0.05, 5000


def power(df, n, seed, R=R):
    rng = np.random.default_rng(seed)
    p = np.array([stats.shapiro(rng.standard_t(df, n)).pvalue for _ in range(R)])
    return np.mean(p < alpha)


# 1) 귀무가설이 참이면 검정력은 알파와 같다. 검정력 곡선의 왼쪽 끝 값이다.
print("귀무(정규) 아래 기각률 — 검정력 곡선의 바닥")
for n in (5, 15, 30):
    rng = np.random.default_rng(300 + n)
    p = np.array([stats.shapiro(rng.normal(0, 1, n)).pvalue for _ in range(20000)])
    print(f"  n = {n:4d}  기각률 {np.mean(p < alpha):.4f}"
          f"  (MC SE {np.sqrt(alpha * (1 - alpha) / 20000):.4f})")

# 2) 본문 표(반복 8000회)와 이 보기(반복 5000회)를 같은 자리에서 견준다.
book = {5: 0.066, 10: 0.117, 20: 0.184, 30: 0.248, 50: 0.352,
        100: 0.567, 200: 0.812, 300: 0.926, 500: 0.992}
code = {15: 0.153, 30: 0.253, 50: 0.355, 100: 0.556, 200: 0.811, 500: 0.990}
print("\nt_5 검정력: 본문 표(8000회) 대 이 보기(5000회)")
print(f"{'n':>6} {'본문':>7} {'보기':>7} {'차이':>7} {'합산 MC SE':>11} {'차이/SE':>8}")
for n, b in book.items():
    if n not in code:
        continue
    c = code[n]
    se = np.sqrt(b * (1 - b) / 8000 + c * (1 - c) / R)
    print(f"{n:>6} {b:>7.3f} {c:>7.3f} {c - b:>+7.3f} {se:>11.4f} {(c - b) / se:>+8.2f}")

# 3) 검정력 0.8 에 이르는 n 과 n=1000 에서 놓치는 횟수.
print("\n0.8 선 근처를 좁혀 본다")
for n in (150, 175, 200, 225):
    print(f"  n = {n:4d}  검정력 {power(5, n, 2000 + n):.3f}")
rng = np.random.default_rng(9001)
p = np.array([stats.shapiro(rng.standard_t(5, 1000)).pvalue for _ in range(R)])
print(f"\n  n = 1000  검정력 {np.mean(p < alpha):.4f}  놓친 횟수 {np.sum(p >= alpha)} / {R}")

출력:

귀무(정규) 아래 기각률 — 검정력 곡선의 바닥
  n =    5  기각률 0.0490  (MC SE 0.0015)
  n =   15  기각률 0.0521  (MC SE 0.0015)
  n =   30  기각률 0.0527  (MC SE 0.0015)

t_5 검정력: 본문 표(8000회) 대 이 보기(5000회)
     n      본문      보기      차이    합산 MC SE    차이/SE
    30   0.248   0.253  +0.005      0.0078    +0.64
    50   0.352   0.355  +0.003      0.0086    +0.35
   100   0.567   0.556  -0.011      0.0089    -1.23
   200   0.812   0.811  -0.001      0.0071    -0.14
   500   0.992   0.990  -0.002      0.0017    -1.16

0.8 선 근처를 좁혀 본다
  n =  150  검정력 0.708
  n =  175  검정력 0.769
  n =  200  검정력 0.798
  n =  225  검정력 0.845

  n = 1000  검정력 1.0000  놓친 횟수 0 / 5000

바닥값이 확인된다. 귀무가설 아래 기각률이 \(n = 5, 15, 30\)에서 \(0.0490\), \(0.0521\), \(0.0527\)로 모두 명목 \(0.05\)에서 2 표준오차 안에 있다. 검정력 곡선은 \(0.05\)에서 출발한다.

두 모의가 일치한다. 차이를 합산 표준오차로 나눈 값이 다섯 자리 모두 \(\lvert\,\cdot\,\rvert \le 1.23\)이다. 가장 크게 벌어진 \(n = 100\)조차 \(0.567\) 대 \(0.556\)으로 \(1.23\) 표준오차이니, 두 숫자는 같은 값을 재고 있다. 반복 횟수와 씨앗이 다른 두 모의가 이렇게 맞는 것이 모의실험 자체가 올바르다는 증거다.

검정력 \(0.8\)은 \(n \approx 200\)에서 달성된다. 좁혀 보면 \(n = 150\)에서 \(0.708\), \(175\)에서 \(0.769\), \(200\)에서 \(0.798\), \(225\)에서 \(0.845\)이므로 \(0.8\) 선은 \(n \approx 200\)과 \(205\) 사이다. \(n = 1000\)에서는 5,000번 가운데 한 번도 놓치지 않았으므로 검정력이 \(0.9994\)보다 크다.

두 사실을 나란히 놓으면 이 쪽의 요지가 수로 드러난다. 초과첨도 \(6\)은 결코 사소한 이탈이 아니다. 그런데 그것을 다섯 번에 네 번 잡으려면 표본이 200개는 되어야 하고, 정작 정규성이 절실한 \(n = 15\)에서는 바닥값 위로 \(0.10\)밖에 올라가지 못한다. 정규성 검정을 통과했다는 말은 "정규다"가 아니라 "이 표본크기로는 구별할 수 없다"는 뜻이다.

끝으로 코드에 한 가지 군더더기가 있다. if n <= 5000: 조건은 sample_sizes의 최댓값이 \(1000\)이므로 언제나 참이어서 아무 일도 하지 않는다. \(n > 5000\)에서 scipy.stats.shapiro의 \(p\)값이 부정확해진다는 주의를 조건문으로 적어 둔 것인데, 지금 설정에서는 실행 경로에 아무 영향을 주지 않는다.

실무자를 위한 지침

표본크기와 검정력의 관계에 근거하여 다음 접근을 권장한다.

  1. 작은 표본(\(n < 30\)): 형식적 정규성 검정에만 의존하지 말라. Q-Q 그림과 히스토그램으로 시각적으로 평가하라. Q-Q 그림에 뚜렷한 이탈이 보이면 비모수 대안을 고려하라.

  2. 중간 표본(\(30 \leq n \leq 200\)): 이 구간에서 형식적 정규성 검정이 가장 유익하다. Shapiro-Wilk나 Anderson-Darling 검정을 시각적 진단과 함께 쓰라. 여기서의 유의한 결과는 의미 있는 이탈을 반영할 가능성이 높다.

  3. 큰 표본(\(n > 500\)): 정규성 검정이 기각할 것을 예상하라. \(p\)값보다 이탈의 크기에 집중하라. 초과첨도와 왜도 같은 효과 크기 측도를 쓰고, 그 이탈이 자신의 특정 추론 절차에 영향을 줄 만큼 큰지 평가하라.

연습문제

연습문제 1. 가볍게 치우친 자료의 관측값 \(n = 500\)개에 대한 Shapiro-Wilk 검정에서 \(p = 0.001\)을 얻었다. 같은 분포의 관측값 \(n = 20\)개에서는 \(p = 0.35\)였다. 이 차이를 설명하라.

풀이

검정력과 표본크기의 관계 때문에 생기는 차이이다. \(n = 500\)이면 검정이 정규성에서의 작은 이탈까지 탐지할 매우 높은 검정력을 갖는다. 실질적으로는 무의미한 가벼운 치우침이지만 통계적으로는 탐지된다. \(n = 20\)이면 검정력이 낮아 같은 가벼운 이탈을 탐지하지 못한다.

\(p\)값은 비정규성의 정도를 재는 것이 아니라, 주어진 표본크기에서 정규성에 반하는 증거의 강도를 잰다. 같은 정도의 치우침이 \(n\)이 크면 아주 작은 \(p\)값을, \(n\)이 작으면 큰 \(p\)값을 낸다. 실질적 정규성을 평가할 때 \(p\)값보다 효과 크기(실제 왜도와 첨도 값)가 더 유익한 이유가 여기 있다.

연습문제 2. \(t_5\) 대립가설에 대한 Shapiro-Wilk 검정의 검정력을 \(n\)의 함수로 그려라. 곡선의 전반적 모양을 기술하라.

풀이

검정력 곡선은 아주 작은 \(n\)에서 유의수준 \(\alpha\) 근처에서 시작해(\(t_5\)를 정규와 구별하지 못한다) \(n\)이 커지면서 1을 향해 단조롭게 증가한다.

\(t_5\)(중간 정도로 꼬리가 두꺼움)에 대한 실제 모의실험 값은

\(n\) 5 20 30 50 100 200 300 500
검정력 0.066 0.184 0.248 0.352 0.567 0.812 0.926 0.992

곧 검정력 0.8은 \(n \approx 200\), 0.95는 \(n \approx 350\)에서 달성된다. 상당히 두꺼운 꼬리를 갖는 대립가설인데도 안정적으로 탐지하려면 표본이 수백 개는 필요하다는 뜻이다.

선형 척도에서 곡선은 S자(시그모이드) 모양이다. 처음에는 느리게 오르다가 중간에서 가파르고 1 근처에서 포화된다. 가파른 정도는 대립가설이 정규에서 얼마나 다른지에 달려 있다. 더 극단적인 대립가설(예: \(t_3\))은 더 가파른 곡선을 만든다.

연습문제 3. "정규성 검정을 위한 검정력 분석"의 개념을 설명하라. 실무에서 흔히 수행되는가?

풀이

정규성 검정의 검정력 분석은 특정한 정규성 이탈(예: 초과첨도 2)을 주어진 확률(예: 검정력 80%)과 주어진 유의수준에서 탐지하는 데 필요한 표본크기를 정하는 것이다.

실무에서는 거의 수행되지 않는다. 이유는 (1) 연구자가 대개 구체적인 대립분포를 미리 모른다, (2) 정규성 검정의 목적은 참 분포를 식별하는 것이 아니라 정규 기반 방법이 믿을 만한지 평가하는 것이다, (3) 특정 대립가설에 대한 정규성 검정의 검정력 표가 존재하지만 널리 쓰이지 않는다.

대신 실무자들은 경험 법칙에 기댄다. Shapiro-Wilk는 \(n \geq 20\)에서 쓸 만한 검정력을 갖고, \(n > 200\)에서는 형식적 검정이 지나치게 강력해져 시각적 방법이 선호된다.

연습문제 4. 비정규성의 정도가 고정되어 있을 때 정규성 검정의 p값은 표본크기 \(n\)에 따라 어떻게 변하는가? 근사적 관계를 제시하라.

풀이

고정된 대립가설(고정된 정규성 이탈)에 대해 검정통계량은 대략 \(\sqrt{n}\)에 비례해 커진다(많은 정규성 검정에서 표준화된 통계량이 \(\sqrt{n}\)에 비례한다). 그러면 p값은 \(n\)에 대해 대략 지수적으로 줄어든다.

더 정확히는 검정통계량 \(T_n\)이 \(T_n \approx \sqrt{n} \cdot \delta + Z\)를 만족한다. 여기서 \(\delta\)는 (이탈을 재는) 비중심 모수이고 \(Z\)는 잡음이다. p값은 대략 \(P(Z > c - \sqrt{n}\delta)\)이며, \(\delta > 0\)인 한 \(n \to \infty\)일 때 0으로 간다.

실질적 함의: 표본크기를 두 배로 늘리면 검정통계량이 \(\sqrt{2} \approx 1.41\)배가 되어 정규성에 반하는 증거가 커진다. 자료가 정규에 아무리 가까워도 \(n\)이 충분히 크면 기각을 피할 수 없다.


정리하며

정규성 검정의 검정력은 표본크기와 함께 단조롭게 커지며 이것이 실용적 역설을 만든다. 작은 표본은 모수적 추론을 무효화할 만한 위배를 탐지할 검정력이 없다. 큰 표본은 중심극한정리가 모수적 절차의 타당성을 보장하는 상황에서도 온갖 사소한 이탈을 탐지한다. 정규성 검정을 효과적으로 쓰려면 해석을 표본크기에 맞추고 형식적 검정을 시각적 방법과 분야 지식으로 보완해야 한다.