Summary
대응 표본(paired)의 차이가 0과 다른지 검정하는 비모수 검정. Paired t-test의 비모수 대안. 차이 점수의 부호와 크기(순위)를 모두 고려한다.
용어 설명
- 대응 표본 (Paired samples): 같은 대상을 두 번 측정하여 얻은 짝지어진 데이터 (예: 치료 전/후)
- 차이 점수 (Difference score, D): 각 쌍의 두 측정값의 차이.
- 부호 (Sign): 차이가 양(+)인지 음(−)인지. 변화의 방향 정보
- 순위 (Rank): 차이의 절대값()에 매긴 크기 순서. 변화의 크기 정보
- 정규근사 (Normal approximation): 표본이 클 때 W 통계량의 분포를 정규분포로 근사하여 z-값 계산
Wilcoxon Signed-rank Test
언제 사용하는가?
- Paired t-test 대안: 차이 점수가 정규분포를 따르지 않을 때
- 전후 비교: 소표본 + 비정규 분포
- 순서형 데이터: 차이의 방향과 크기가 의미 있는 순서형
검정 절차
- 각 쌍의 차이 계산:
- 인 쌍 제외
- 에 순위 부여
- 양의 순위합()과 음의 순위합() 계산
- 검정 통계량:
수식 변수 풀이
- : 양의 순위합 — 차이가 양수(개선)인 쌍들의 순위를 모두 더한 값
- : 음의 순위합 — 차이가 음수(악화)인 쌍들의 순위를 모두 더한 값
- : 각 차이 점수의 절대값에 부여된 순위
- : 검정 통계량으로 둘 중 작은 값을 사용
- : H₀ 하에서 W의 기대값
- : W의 표준편차 — 대표본 정규근사에 사용
- 대표본: 정규근사
Example
7명의 피험자, 프로그램 전후 점수:
| 피험자 | 전 | 후 | D | |D| | 순위 |
|--------|-----|-----|---|------|------|
| 1 | 72 | 78 | +6 | 6 | 4.5 |
| 2 | 85 | 82 | -3 | 3 | 2 |
| 3 | 60 | 65 | +5 | 5 | 3 |
| 4 | 90 | 91 | +1 | 1 | 1 |
| 5 | 78 | 85 | +7 | 7 | 6 |
| 6 | 65 | 71 | +6 | 6 | 4.5 |
| 7 | 80 | 72 | -8 | 8 | 7 |
가정
| 가정 | 설명 |
|---|---|
| 대응 표본 | 관측치가 쌍으로 연결됨 |
| 연속형 또는 순서형 | 차이의 크기 비교가 의미 있어야 함 |
| 차이 분포의 대칭성 | 차이가 0을 중심으로 대칭 (엄격한 가정은 아님) |
Effect Size: matched-rank biserial correlation
수식 변수 풀이
- : 효과 크기 — matched-rank biserial correlation
- : 정규근사 z-값 — W 통계량을 표준화한 값
- : 쌍의 수 (D = 0인 쌍 제외)
- Z: 정규근사 z-값
- N: 총 관측치 수 (쌍의 수)
| r 값 | 해석 |
|---|---|
| 0.1 | Small |
| 0.3 | Medium |
| 0.5 | Large |
Sign Test와의 비교
| 구분 | Wilcoxon signed-rank | Sign test |
|---|---|---|
| 정보 이용 | 부호 + 순위(크기) | 부호만 |
| 검정력 | 높음 | 낮음 |
| 가정 | 차이의 대칭성 | 없음 |
| 사용 | 차이 크기 비교 가능 시 | 순위 부여 불가 시 |
Implementation
from scipy import stats import pingouin as pg # === scipy === w_stat, p = stats.wilcoxon(before, after, alternative='two-sided') print(f"W={w_stat:.1f}, p={p:.4f}") # effect size import numpy as np # z-approximation n = len(before) z = (w_stat - n*(n+1)/4) / np.sqrt(n*(n+1)*(2*n+1)/24) r = z / np.sqrt(n) print(f"r = {abs(r):.3f}") # === pingouin === result = pg.wilcoxon(before, after, alternative='two-sided') print(result[['W-val', 'p-val', 'RBC', 'CLES']])
관련 문서
- t-test — 모수 대안 (paired t-test)
- Mann-Whitney U test — 독립 표본 비모수 검정
- 통계 검정법 개요 — 모수/비모수 대응표