비모수 검정 모음¶
개요¶
이 페이지는 핵심 비모수 검정들을 하나의 참고 자료로 모아, 각 검정을 언제 쓰는지와 서로 어떻게 연결되는지를 정리한다. 비모수 방법은 분포 가정을 최소한으로만 한다 --- 대개 관측값이 독립이고 연속분포에서 나왔다는 것뿐이다. 정규성을 정당화할 수 없거나, 자료가 순서형이거나, 이상치가 우려될 때 없어서는 안 될 도구이다.
비모수 검정의 분류¶
아래 표는 주요 검정을 실험설계에 따라 정리한 것이다.
| 설계 | 검정 | 사용하는 정보 |
|---|---|---|
| 일표본 / 대응 | 부호검정 | 차이의 부호 |
| 일표본 / 대응 | Wilcoxon 부호순위 | 차이의 부호순위 |
| 독립 이표본 | Wilcoxon 순위합 | 합친 표본의 순위 |
| 독립 이표본 | Mann--Whitney \(U\) | 쌍별 비교 (순위합과 동치) |
| \(k\)개 독립표본 | Kruskal--Wallis \(H\) | 합친 표본의 순위 |
| \(k\)개 독립표본 | Mood 중앙값검정 | 전체 중앙값 위/아래 도수 |
| 무작위성 | Wald--Wolfowitz 런 검정 | 이진 수열의 런 |
검정력과 가정¶
각 검정은 일반성과 검정력 사이의 스펙트럼 위에 놓인다.
부호검정. 가정이 가장 약하다. 차이가 독립이고 연속이기만 하면 된다. 차이의 부호만 쓴다.
여기서 \(n_+\)는 양의 차이 개수, \(n\)은 0이 아닌 차이의 개수이다. 사실상 이항검정이다.
Wilcoxon 부호순위검정. 차이의 분포가 중앙값을 중심으로 대칭이라는 가정을 추가한다. 부호에 더해 순위 크기까지 쓰므로 더 많은 정보를 회수한다.
귀무 평균과 분산은
순위합 / Mann--Whitney. 독립인 두 표본에서 \(N\)개 관측값 전체에 순위를 매긴다. 통계량 \(U\)는 승수를 센다.
귀무가설 아래에서 \(\operatorname{E}[U] = mn/2\)이다.
Kruskal--Wallis \(H\). 순위합을 \(k\)개 집단으로 일반화한다.
Mood 중앙값검정. 각 관측값을 "전체 중앙값 위/아래"라는 이진 지시값으로만 쓰는, 다집단 검정 중 가장 로버스트한 방법이다.
선택 지침¶
다음 흐름이 선택 과정을 요약한다.
- 표본이 대응인가 독립인가?
- 대응 \(\to\) 2단계로.
- 독립 \(\to\) 3단계로.
- 대응: 차이의 분포가 대칭인가?
- 예 \(\to\) Wilcoxon 부호순위 (더 강력).
- 아니오 또는 모름 \(\to\) 부호검정 (더 안전).
- 독립: 집단이 몇 개인가?
- 두 집단 \(\to\) Mann--Whitney \(U\) 또는 Wilcoxon 순위합.
- 셋 이상 \(\to\) Kruskal--Wallis \(H\) (또는 추가 로버스트성이 필요하면 Mood 중앙값검정).
보기 1. 꼬리가 무거우면 ARE 가 1 을 넘는다. 같은 대응자료 15쌍에 세 검정을 적용하면 p-값이 부호검정 \(0.0209\), 부호순위검정 \(0.0086\), 순위합검정 \(0.1409\) 로 나온다.
(1) 셋 가운데 쓰면 안 되는 것은 무엇인가. 나머지 둘의 p-값 순서가 ARE \(0.955\) 대 \(0.637\) 로 예측되는 것인지 따져 보시오.
(2) 아래 "두꺼운 꼬리 분포에서는 ARE 가 1 을 넘는다" 를 수로 확인하시오. 대칭밀도 \(f\), 분산 \(\sigma^2\) 에서 윌콕슨 부호순위검정의 \(t\) 검정 대비 ARE 는
이다. 정규·로지스틱·이중지수·균등에서 부호검정의 \(4\sigma^2 f(0)^2\)(연습문제 2)과 함께 계산하시오.
풀이
(1) 순위합검정을 쓰면 안 되고, 나머지 둘의 순서는 ARE 가 보장하지 않는다.
자료는 같은 학생 15명을 처치 전후로 잰 대응자료다. ranksums 는 두 열을 서로 독립인 표본으로 보므로 짝 구조를 버린다. 그 \(p = 0.1409\) 는 "보수적인 결과" 가 아니라 잘못 적용한 검정의 값이고, 다른 둘과 견줄 수 있는 수가 아니다.
남은 둘의 순서는 조금 더 조심해야 한다. ARE 가 뜻하는 것은
정규모집단에서, 귀무가설로 수렴하는 국소 대립가설 열에 대해, \(n \to \infty\) 에서 같은 검정력을 얻는 데 필요한 표본크기의 비
다. ARE \(= 0.955\) 는 "윌콕슨이 \(t\) 검정의 검정력에 맞추려면 관측값이 \(1/0.955 = 1.047\) 배 필요하다" 는 뜻이고, \(0.637\) 은 부호검정에 \(1/0.637 = 1.571\) 배가 필요하다는 뜻이다. 세 조건이 모두 붙어 있다.
그러므로 ARE 는 한 자료에서 어느 검정의 p-값이 작을지 보장하지 않는다. 이 자료에서 부호순위검정이 이긴 것은 음의 차이 둘이 하필 가장 작은 쪽(\(-2\) 와 \(-3\))이어서 \(W^- = 11\) 로 작게 나왔기 때문이다. 같은 부호 구성에서 크기만 뒤바꾸면 부호검정의 p-값은 \(0.0209\) 그대로인데 부호순위검정은 \(0.1095\) 로 올라가 순서가 뒤집힌다(일표본 비모수 검정 보기 5 가 그 자료를 만든다).
(2) 분포를 바꾸면 ARE 가 1 을 넘는다. 네 대칭분포에서 두 공식을 계산하면
| 분포 | \(\sigma^2\) | \(f(0)\) | \(\int f^2\) | 부호 ARE \(= 4\sigma^2 f(0)^2\) | 윌콕슨 ARE \(= 12\sigma^2(\int f^2)^2\) |
|---|---|---|---|---|---|
| 정규 \(\mathcal N(0,1)\) | \(1\) | \(0.398942\) | \(0.282095\) | \(2/\pi = 0.636620\) | \(3/\pi = 0.954930\) |
| 로지스틱 | \(\pi^2/3 = 3.289868\) | \(1/4\) | \(1/6\) | \(\pi^2/12 = 0.822467\) | \(\pi^2/9 = \mathbf{1.096623}\) |
| 이중지수 | \(2\) | \(1/2\) | \(1/4\) | \(\mathbf{2.000000}\) | \(\mathbf{1.500000}\) |
| 균등 | \(1/12\) | \(1\) | \(1\) | \(1/3 = 0.333333\) | \(1.000000\) |
정규분포는 \(t\) 검정의 고향이므로 둘 다 1 아래다. 그런데 꼬리를 무겁게 하면
- 로지스틱에서 윌콕슨 ARE 가 \(\pi^2/9 = 1.0966\) 으로 1 을 넘는다. 정규보다 꼬리가 조금 두꺼운 것만으로도 순위검정이 \(t\) 검정을 앞선다.
- 이중지수(라플라스)에서는 윌콕슨 \(1.5\), 부호검정 \(2.0\) 으로 둘 다 1 을 넘고, 순서까지 뒤집힌다. 부호검정이 윌콕슨보다 나아진다 — 이 분포에서 \(f(0)\) 이 뾰족해 중앙값 근처의 정보가 가장 값지기 때문이다.
- 반대로 균등분포에서는 꼬리가 아예 없어 부호검정이 \(1/3\) 로 최악이 되고 윌콕슨은 정확히 \(1\) 이다.
이 네 줄이 비모수 검정을 쓰는 참된 이유를 말해 준다. "정규성이 성립할 때 5% 손해" 는 최악의 경우이고, 꼬리가 조금만 무거워지면 손해가 이익으로 바뀐다. 반면 \(t\) 검정이 이기는 범위는 정규분포 주변으로 좁다.
수치적으로.
import numpy as np
from scipy import stats
paired_data = np.array([
[93, 76], [70, 72], [81, 75], [65, 68], [79, 65],
[54, 54], [94, 88], [91, 81], [77, 65], [65, 57],
[95, 86], [89, 87], [78, 78], [80, 77], [76, 76]
])
post, pre = paired_data[:, 0], paired_data[:, 1]
# 부호검정(정규근사)
diffs = post - pre
nonzero = diffs[diffs != 0]
n_plus = (nonzero > 0).sum()
n = len(nonzero)
z_sign = (2 * n_plus - n) / np.sqrt(n)
p_sign = 2 * stats.norm.cdf(-abs(z_sign))
print(f"Sign test: Z = {z_sign:.4f}, p = {p_sign:.4f}")
# Sign test: Z = 2.3094, p = 0.0209
# Wilcoxon 부호순위검정
stat_sr, p_sr = stats.wilcoxon(post, pre, alternative="two-sided",
method="approx", zero_method="pratt")
print(f"Signed-rank test: W = {stat_sr}, p = {p_sr:.4f}")
# Signed-rank test: W = 11.0, p = 0.0086
# Wilcoxon 순위합검정 — 이 대응자료에는 맞지 않는다. 견주어 보려고 싣는다
stat_rs, p_rs = stats.ranksums(post, pre)
print(f"Rank-sum test: Z = {stat_rs:.4f}, p = {p_rs:.4f}")
# Rank-sum test: Z = 1.4725, p = 0.1409
출력:
Sign test: Z = 2.3094, p = 0.0209
Signed-rank test: W = 11.0, p = 0.0086
Rank-sum test: Z = 1.4725, p = 0.1409
| 검정 | \(p\)값 | 적절한가 |
|---|---|---|
| Wilcoxon 부호순위 | \(0.0086\) | 예 |
| 부호검정 | \(0.0209\) | 예 (더 보수적) |
| Wilcoxon 순위합 | \(0.1409\) | 아니오 |
대응자료에 적절한 두 검정 중에서는 부호순위검정이 정보를 더 많이 쓰므로 \(p\)값이 작다.
from scipy import integrate
cases = {
"정규 N(0,1)": stats.norm(),
"로지스틱": stats.logistic(),
"이중지수": stats.laplace(),
"균등 U(-.5,.5)": stats.uniform(loc=-0.5, scale=1),
}
print("분포 sigma^2 f(0) int f^2 부호 ARE 윌콕슨 ARE")
for name, dist in cases.items():
var, f0 = dist.var(), dist.pdf(0)
I, _ = integrate.quad(lambda x: dist.pdf(x) ** 2, -60, 60, limit=400)
print(f"{name:<14} {var:>9.6f} {f0:>9.6f} {I:>9.6f}"
f" {4 * var * f0 ** 2:>10.6f} {12 * var * I ** 2:>11.6f}")
print(f"\n이론값: 2/pi = {2 / np.pi:.6f}, 3/pi = {3 / np.pi:.6f},"
f" pi^2/12 = {np.pi ** 2 / 12:.6f}, pi^2/9 = {np.pi ** 2 / 9:.6f}")
출력:
분포 sigma^2 f(0) int f^2 부호 ARE 윌콕슨 ARE
정규 N(0,1) 1.000000 0.398942 0.282095 0.636620 0.954930
로지스틱 3.289868 0.250000 0.166667 0.822467 1.096623
이중지수 2.000000 0.500000 0.250000 2.000000 1.500000
균등 U(-.5,.5) 0.083333 1.000000 1.000000 0.333333 1.000000
이론값: 2/pi = 0.636620, 3/pi = 0.954930, pi^2/12 = 0.822467, pi^2/9 = 1.096623
rng = np.random.default_rng(0)
B, m = 2000, 20
delta = 0.5
print(f"n = {m}, delta = {delta}, 반복 {B} 회, alpha = 0.05")
print("분포 t 검정 윌콕슨 부호검정")
for name, draw in (("정규", lambda: rng.normal(0, 1, m)),
("이중지수", lambda: rng.laplace(0, 1, m))):
p_t, p_w, p_s = [], [], []
for _ in range(B):
d = draw() + delta
p_t.append(stats.ttest_1samp(d, 0).pvalue)
p_w.append(stats.wilcoxon(d).pvalue)
p_s.append(stats.binomtest(int((d > 0).sum()), m).pvalue)
rate = lambda p: np.mean(np.array(p) < 0.05)
print(f"{name:<9} {rate(p_t):>7.3f} {rate(p_w):>8.3f} {rate(p_s):>10.3f}")
print(f"몬테카를로 오차 <= {np.sqrt(0.25 / B):.3f}")
출력:
n = 20, delta = 0.5, 반복 2000 회, alpha = 0.05
분포 t 검정 윌콕슨 부호검정
정규 0.566 0.552 0.392
이중지수 0.348 0.406 0.385
몬테카를로 오차 <= 0.011
네 분포의 ARE 가 이론값 \(2/\pi\), \(3/\pi\), \(\pi^2/12\), \(\pi^2/9\), 그리고 \(2.0\), \(1.5\), \(1/3\), \(1.0\) 과 소수 여섯째 자리까지 모두 맞는다. 수치적분으로 구한 \(\int f^2\) 가 로지스틱에서 \(1/6\), 이중지수에서 \(1/4\), 균등에서 \(1\) 로 떨어지는 것도 확인된다.
둘째 모의실험이 유한 \(n\) 에서 그 역전을 보여 준다. 정규에서는 $t > $ 윌콕슨 \(>\) 부호(\(0.566 / 0.552 / 0.392\))인데 이중지수에서는 \(t\) 가 꼴찌로 내려간다(\(0.348\)). 다만 역전이 절반만 일어났다 — ARE 가 예측하는 "부호 \(>\) 윌콕슨" 까지는 가지 않고 \(0.385\) 대 \(0.406\) 이다(몬테카를로 오차 \(\pm 0.011\)). 이상한 일이 아니다. ARE 는 \(\delta \to 0\), \(n \to \infty\) 의 극한값이고 여기서는 \(n = 20\), \(\delta = 0.5\) 로 둘 다 극한과 멀기 때문이다. 유한 \(n\) 에서는 부호검정의 이산성 손실(기각역을 촘촘히 채울 수 없는 것)이 ARE 의 이득을 상당 부분 먹는다.
순위합검정의 \(p\)값은 비교 대상이 아니다
순위합검정의 \(0.1409\)가 가장 크다고 해서 "가장 보수적인 검정"이라고 읽으면 안 된다. 이 검정은 대응 구조를 버렸으므로 애초에 잘못 적용된 것이다. 학생 15명의 처치 전 점수와 후 점수는 독립이 아니다.
대응자료를 독립표본으로 분석하면 개인차가 모두 잡음으로 들어가 검정력을 크게 잃는다. 여기서는 그 손실이 \(p\)값 16배로 나타났다.

\(p\)값이 16배로 벌어진 이유는 같은 자료를 두 방식으로 그려 보면 바로 드러난다. 왼쪽 (가)는 학생 한 명을 선 하나로 이었고, 오른쪽 (나)는 그 선을 끊고 처치 전 15개와 처치 후 15개를 각각 한 무더기로 세었다.
(가)에서 눈에 들어오는 것은 선의 방향이 거의 한쪽이라는 사실이다. 올라간 학생이 10명, 내려간 학생이 2명, 변하지 않은 학생이 3명이다. 부호검정이든 부호순위검정이든 보는 것이 정확히 이 방향이고, \(10\) 대 \(2\)는 우연으로 설명하기 어렵다. 차이의 평균은 \(5.47\)점이고 차이의 표준편차는 \(6.12\)점이라 신호 대 잡음비가 \(5.47 / 6.12 \approx 0.89\)로 꽤 크다.
(나)에서는 그 신호가 사라진다. 두 히스토그램이 \(65\)점부터 \(95\)점까지 거의 완전히 겹친다. 당연하다. 학생들의 원래 실력 차이가 \(54\)점부터 \(95\)점까지 \(40\)점 넘게 퍼져 있어서, 모두가 공유한 \(5.5\)점의 상승분을 완전히 덮어 버리기 때문이다. 순위합검정이 보는 것은 이 겹친 두 무더기뿐이므로 \(p = 0.1409\)가 나온다. 반면 부호순위검정은 학생 개개인을 자기 자신과 비교해 실력 차이를 애초에 소거하므로 \(p = 0.0086\)에 이른다.
대응설계의 가치가 여기에 있다. 대응은 "자료를 두 번 재는 번거로운 방법"이 아니라 개인차라는 가장 큰 잡음원을 차이 계산 한 번으로 제거하는 장치이다. 그 구조를 분석에서 버리면 설계로 벌어 둔 검정력을 고스란히 반납하게 된다. 이 자료에서는 그 값이 \(p\)값 16배였다.
해석¶
- 비모수 \(\neq\) 무가정. 모든 검정이 여전히 독립성을 요구한다. 부호순위검정은 대칭성을 추가로 요구한다. Kruskal--Wallis는 집단 분포의 모양이 같지 않으면 위치 이동만이 아니라 임의의 분포적 차이를 검정한다.
- 점근상대효율(ARE). 정규성 아래에서 Wilcoxon 부호순위검정의 대응 \(t\) 검정 대비 ARE는 \(3/\pi \approx 0.955\)로 검정력 손실이 매우 작다. 두꺼운 꼬리 분포에서는 ARE가 \(1\)을 넘는다.
- 다중비교. Kruskal--Wallis가 \(H_0\)을 기각하면 사후 쌍별 검정(예: Dunn 검정)에 Bonferroni나 Holm 보정을 적용하여 어느 집단이 다른지 밝힌다.
연습문제¶
연습문제 1. 한 연구자가 대응 관측값 12개를 갖고 있는데 차이가 대칭인지 확신할 수 없다. 부호검정과 Wilcoxon 부호순위검정 중 무엇을 써야 하는가? 근거와 맞교환을 설명하라.
풀이
부호검정을 써야 한다. Wilcoxon 부호순위검정은 \(H_0\) 아래에서 차이의 분포가 중앙값을 중심으로 대칭임을 요구한다. 이 가정이 깨지면 \(W^+\)의 귀무분포가 틀리고 제1종 오류가 부풀려질 수 있다.
맞교환은 검정력이다. 부호검정은 차이의 부호만 쓰고 크기 정보를 버리므로, 대칭성이 실제로 성립한다면 검정력이 낮다. 그러나 이 경우에는 연구자가 대칭성을 확인할 수 없으므로 제1종 오류를 통제하는 안전성이 검정력보다 중요하다.
표본이 더 크다면 차이의 히스토그램으로 대칭성을 평가한 뒤 부호순위검정으로 바꿀 수 있다. 다만 \(n = 12\)로는 히스토그램으로 대칭성을 판정하기 어렵다. 맥락 지식(예: "이 측정값은 바닥효과가 있어 차이가 오른쪽으로 치우친다")이 있다면 그것이 더 믿을 만한 근거이다. \(\square\)
연습문제 2. 정규성 아래에서 부호검정의 일표본 \(t\) 검정 대비 점근상대효율이 \(2/\pi \approx 0.637\)임을 보여라.
풀이
ARE는 두 검정의 효능(efficacy) 제곱의 비이다. 검정통계량 \(T_n\)의 효능은
으로 정의된다.
\(t\) 검정. \(T_n = \bar{D}\)이고 \(\operatorname{E}_\delta[\bar D] = \delta\)이므로 미분값이 \(1\)이다. \(\operatorname{Var}_0(\bar D) = \sigma^2/n\)이므로
부호검정. \(T_n = \hat{p} = n_+/n\)이라 하자. \(D_i \sim \mathcal{N}(\delta, \sigma^2)\)이면
이고, \(\delta = 0\)에서 미분하면
이다(\(f\)는 \(D_i\)의 밀도함수). \(\operatorname{Var}_0(\hat p) = 1/(4n)\)이므로
ARE.
일반적으로 밀도 \(f\)와 표준편차 \(\sigma\)를 갖는 대칭분포에서 \(\text{ARE}(\text{부호}, t) = 4\sigma^2 f(0)^2\)이다. 이 공식이 유용한 것은 다른 분포에서도 바로 계산할 수 있기 때문이다.
| 분포 | \(\sigma^2\) | \(f(0)\) | ARE |
|---|---|---|---|
| Normal | \(1\) | \(1/\sqrt{2\pi} = 0.3989\) | \(0.637\) |
| Laplace (\(\text{Var} = 1\)) | \(1\) | \(1/\sqrt{2} = 0.7071\) | \(2.000\) |
| Uniform\((-\sqrt3, \sqrt3)\) | \(1\) | \(1/(2\sqrt3) = 0.2887\) | \(0.333\) |
라플라스에서 부호검정이 \(t\) 검정보다 두 배 효율적임에 주목하라. 꼬리가 두꺼울수록 \(f(0)\)이 커지고 부호검정이 유리해진다.
연습문제 3. 독립인 세 집단이 다음 자료를 냈다.
- 집단 A: \(5, 8, 12, 15\)
- 집단 B: \(7, 11, 14, 18, 20\)
- 집단 C: \(3, 6, 9\)
Kruskal--Wallis 검정과 Mood 중앙값검정을 파이썬으로 수행하고 \(p\)값을 비교하라.
풀이
from scipy import stats
a = [5, 8, 12, 15]
b = [7, 11, 14, 18, 20]
c = [3, 6, 9]
print(stats.kruskal(a, b, c))
# KruskalResult(statistic=4.0295, pvalue=0.13335)
r = stats.median_test(a, b, c)
print(r.statistic, r.pvalue, r.median)
print(r.table)
# 4.8 0.09072 10.0
# [[2 4 0]
# [2 1 3]]
출력:
KruskalResult(statistic=4.029487179487184, pvalue=0.13335459246779172)
4.8 0.0907179532894125 10.0
[[2 4 0]
[2 1 3]]
| 검정 | 통계량 | \(p\)값 |
|---|---|---|
| Kruskal--Wallis | \(H = 4.029\) | \(0.1334\) |
| Mood 중앙값 | \(\chi^2 = 4.800\) | \(0.0907\) |
놀랍게도 Mood 중앙값검정의 \(p\)값이 더 작다. "Kruskal--Wallis가 언제나 더 강력하다"는 통념이 이 자료에서는 성립하지 않는다.
이유는 이 자료의 구조에 있다. 전체 중앙값은 \(10\)이고, 집단 C는 값이 \(3, 6, 9\)로 전부 중앙값 아래이다. Mood 검정에게 이는 매우 강한 신호이다(\(0\) 대 \(3\)). 반면 Kruskal--Wallis는 집단 C의 순위가 \(1, 2, 4\)로 낮긴 하지만 집단 A의 \(3, 5, 8, 10\)과 상당히 겹친다는 것도 함께 본다.
더 근본적으로, 표본이 \(4, 5, 3\)으로 매우 작아 두 검정 모두 \(\chi^2\) 근사가 믿을 만하지 않다. 이 크기에서 \(p\)값의 순서를 두고 검정력을 논하는 것은 무리이다.
교훈: "검정 A가 검정 B보다 강력하다"는 진술은 언제나 분포와 대립가설의 종류에 대한 평균을 두고 하는 말이다. 개별 자료에서는 어느 쪽이든 이길 수 있다. 자료를 본 뒤 \(p\)값이 작은 검정을 고르면 실제 유의수준이 명목값을 크게 넘는다. \(\square\)
연습문제 4. Kruskal--Wallis가 단순한 중앙값 검정이 아닌 이유를 설명하라. 실제로 무엇을 검정하며, 어떤 추가 가정 아래에서 위치이동 검정이 되는가?
풀이
Kruskal--Wallis 검정의 귀무가설은 \(H_0{:}\; F_1 = F_2 = \cdots = F_k\), 즉 모든 집단이 같은 분포에서 왔다는 것이다. 이는 분포의 동일성에 대한 검정이지 중앙값이 같은지에 대한 검정이 아니다. \(H_0\)을 기각한다는 것은 집단들이 위치, 척도, 모양 또는 그 조합에서 다르다는 뜻일 수 있다.
분포들이 위치만 다르다는 위치이동 가정(\(F_j(x) = F(x - \mu_j)\), \(F\)는 공통 모양)을 추가하면 분포가 다를 수 있는 유일한 통로가 평균/중앙값이 되므로, 이 경우 Kruskal--Wallis가 중앙값(또는 평균) 동일성 검정이 된다.
위치이동 가정이 없으면 유의한 Kruskal--Wallis 결과가 중심이 아니라 산포의 차이를 반영할 수 있고, 이를 중앙값 검정으로 해석하는 연구자를 오도한다.
Kruskal-Wallis 연습문제 3에서 이를 정량적으로 확인했다. 중앙값이 모두 정확히 0이지만 왜도가 다른 세 집단에서 \(n = 100\)일 때 기각률이 \(0.614\)까지 올라간다. \(\square\)
연습문제 5. Kruskal--Wallis 결과가 유의한 뒤 어느 쌍이 다른지 알고 싶다. Dunn 검정을 기술하고 다중비교 보정이 왜 필요한지 설명하라.
풀이
Dunn 검정은 원래의 Kruskal--Wallis 합친 순위에서 얻은 평균순위를 이용해 \(\binom{k}{2}\)개의 모든 집단 쌍을 비교한다. 평균순위가 \(\bar{R}_i\), \(\bar{R}_j\)인 집단 \(i\)와 \(j\)에 대해
이며 \(N\)은 전체 표본크기이다. 각 \(Z_{ij}\)를 표준정규분포와 비교한다.
다중비교 보정(Bonferroni, Holm, Benjamini--Hochberg 등)이 필요한 이유는 \(\binom{k}{2}\)개의 검정을 수행하면 집단별 오류율이 부풀려지기 때문이다. \(m\)개의 쌍을 각각 유의수준 \(\alpha\)로 검정하면 검정들이 독립일 때 적어도 하나가 거짓 기각될 확률이 \(1 - (1 - \alpha)^m\)까지 올라간다.
| \(k\) | \(m = \binom{k}{2}\) | 보정 없는 FWER |
|---|---|---|
| 3 | 3 | \(0.143\) |
| 5 | 10 | \(0.401\) |
| 8 | 28 | \(0.762\) |
\(k = 8\)이면 모든 집단이 동일해도 76%의 확률로 "유의한" 쌍을 하나 이상 찾게 된다.
Bonferroni 보정은 각 쌍별 검정에 \(\alpha/m\)을 쓰므로 전체 집단별 오류율을 \(\alpha\) 이하로 보장한다. Holm 절차는 FWER을 똑같이 통제하면서 균일하게 더 강력하므로 대체로 더 낫다.
Dunn 검정의 쌍은 독립이 아니다
위 표의 \(1 - (1-\alpha)^m\)은 검정들이 독립일 때의 값이다. Dunn 검정의 쌍별 비교는 같은 순위를 공유하므로 서로 상관되어 있고, 실제 FWER은 이보다 낮다. 그럼에도 보정 없이는 \(\alpha\)를 넘으므로 보정이 필요하다. Bonferroni는 독립 여부와 무관하게 유효하다는 것이 그 장점이다. \(\square\)
정리하며¶
비모수 방법을 한 지도로 정리했다.
| 모수적 | 비모수 대안 |
|---|---|
| 일표본 \(t\) | 부호검정, 윌콕슨 부호순위 |
| 대응 \(t\) | 윌콕슨 부호순위 |
| 이표본 \(t\) | 만–휘트니 \(U\) |
| 일원배치 분산분석 | 크루스칼–월리스 |
| 피어슨 \(r\) | 스피어만 \(\rho\), 켄달 \(\tau\) |
- 가정이 최소한이다. 대개 독립성과 연속성뿐이며, 정규성을 요구하지 않는다.
- 순위로 바꾸는 것이 공통 수법이다. 값 대신 순서만 쓰므로 이상치와 분포 모양에 강건하다.
- "가정이 없다"는 말은 과장이다. 만–휘트니는 두 분포의 모양이 같다고 가정해야 중앙값 비교로 읽을 수 있고, 대부분의 검정이 연속성을 요구한다.
- 검정력 손실은 작다. 정규 자료에서도 점근효율이 \(3/\pi\approx0.955\) 수준이며, 비정규 자료에서는 오히려 앞선다.
- 순서형 자료에는 이쪽이 옳다. 2장에서 본 대로 순서형에 평균을 쓰면 부호화가 답을 바꾼다.
다음 절부터 각 검정을 자세히 다룬다.