비모수 검정

\( \def\defeql{\stackrel{\mathrm{def}}{=}} \def\rR{\mathbb R} \newcommand{\nN}{\mathbb N} \def\st{\bigm\vert} \)비모수 검정법은 모집단이 특정한 분포(예를 들어 정규분포)를 가진다고 가정하지 않고 하는 검정 방법이다. 이 검정법을 분포무관 검정법(distribution free test)라고 부르기도 한다

우리는 4개의 검정방법을 공부할 것이며 이들 모두에 대하여 정규근사를 사용할 것이다. 모집단의 특정한 분포를 가정하지 않아도 우리가 사용할 검정통계량은 2항분포 등의 어떤 분포를 따를 수 있으며, 표본의 크기가 충분히 큰 경우에는 이 검정통계량이 근사적으로 정규분포를 따르게 되는 것을 이용한다. 근사식이 아닌 아닌 더 정교한 알고리듬도 있으나 여기서는 다루지 않는다.

1. 부호검정

이 검정법은 모집단의 중앙값(median)이 특정값과 같은지/큰지/작은지를 검정한다. 예를 들어 $H_0: m = m_0$, $H_1: m\ne m_0$인 경우, 귀무가설이 옳다면 표본의 값이 $m_0$보다 클 확률은 0.5, 작을 확률도 0.5일 것이므로 $m_0$보다 큰 표본 원소의 개수가 표본 크기의 절반보다 과도하게 크거나 작으면 $H_0$를 기각한다. 이 검정법은 한쪽 검정에도 사용할 수 있다.

데이터로부터의 관측값은 $m_0$보다 큰 데이터의 개수 $B$이다. $B$는 당연히 2항분포 $B(n,\frac{1}{2})$를 따르게 될 것인데 우리는 2항분포의 정규근사를 이용하여 $B \sim N(\frac{n}{2}, \frac{n}{4})$으로 놓고 검정통계량을 $Z = \frac{B-n/2}{\sqrt {n} / 2} \sim N(0,1)$로 둔다. 데이터 중에 값이 정확히 $m_0$인 것은 세지 않는다. ($B$와 $n$에서 제외)

(연습문제).  어느 바다의 특정 지역에서의 깊이를 측정하여 다음과 같은 15개의 관측값을 얻었다. 부호검정법을 이용하여 유의수준 5%와 1%에서 각각 $H_0: m = 43.0$, $H_1: m\neq 43.0$을 검정하여라. 오른쪽 검정과 왼쪽 검정도 수행하여라.

46.4, 48.3, 51.9, 38.8, 46.5, 45.6, 52.1, 41.0, 54.2, 44.9, 52.3, 43.6, 48.7, 42.2, 44.9

힌트: $B=12$, $Z=2.32$.

2. 윌콕슨 부호순위 검정

검정 방법

부호검정은 단순하여 이해하기 쉽고 계산식도 간단하다는 장점은 있으나 다음과 같은 경우 그릇된 결론을 얻게 될 것이다.

바다의 깊이를 측정하여 다음과 같은 30개의 관측값 $x_i$들을 얻었다고 하자: 15개의 $x_i$는 42 이상 43 이하이고 15개의 $x_i$는 53 이상 54 이하.

이때 $H_0: m = m_0 = 43.0$, $H_1: m > m_0$를 검정하면, 자료 중에 $m_0$보다 작은 것이 15개, 큰 것이 15개로 동수이므로 $H_0$는 기각되지 않을 것이다. 그러나 $m_0$보다 작은 자료들은 아주 조금 더 작으며 $m_0$보다 큰 자료들은 많이 더 크므로 이러한 검정 결과는 우리의 직관에 부합되지 않는다.

이러한 단점을 보강하는 부호검정법으로 윌콕슨 부호순위 검정(Wilcoxon signed-rank test)이 있다. 다음과 같은 절차를 밟아서 검정통계량 $Z$를 계산한다.

  1. $\vert x_i - m_0\vert$을 오름차순으로 정렬하여 각 $x_i$마다 1부터 30까지의 순위를 준다.
  2. $x_i > m_0$인 $x_i$들의 순위의 합을 구하여 $T^+$로 둔다. 우리의 예에서 $T^+ = 16 + \cdots + 30 = 345$이다.
  3. $\displaystyle Z := \frac{T^+ - n(n+1)/4}{\sqrt{n(n+1)(2n+1)/24}} = \frac{345 - 30\cdot 31 / 4}{\sqrt{30\cdot 31 \cdot 61 / 24}} = 2.314$

$H_0$가 참이라면 $n$이 충분히 큰 경우에 $Z \sim N(0,1)$인 것이 알려져 있다. 즉 $P[Z > z_\alpha] = \alpha$이다. 그러므로 $p$-값은 $1 - \text{pnorm}(2.314) = 0.0103$이므로 않으므로, 가령 $\alpha = 0.05$인 경우에는 $H_0$를 여유있게 기각한다.

$x_i = m_0$인 $x_i$들은 자료에서 삭제한다. $n$의 크기도 이에 맞추어 줄여야 한다. 순위를 매길 때 절댓값이 같은 $x_i$들이 존재하면 이들에게는 순위들의 평균값을 순위로 준다. 예를 들어 3위가 2개 있다면 이 두 원소의 순위를 모두 $(3+4)/2 = 3.5$로 주어야 하고, 5위가 3개 있다면 이 세 원소의 순위를 모두 $(5+6+7)/3 = 6$으로 주어야 한다.

순위합의 분포

위에서 설명한 검정방법의 타당성에 대해서 생각해 보자. 표본의 크기가 $n$일 때 순위들은 $1,2,\ldots,n$이 된다. 순위는 평균이 $(n+1)/2$이고 분산이 $(n^2 - 1)/12$인 균등분포를 한다. (참조: 연습문제 4.39) 이러한 분포를 하는 모집단에서 $n/2$개를 취하여 합하면 ($n$이 충분히 크다는 가정하에) 중심극한 정리에 의하여 평균이 $n(n+1)/4$인 정규분포를 하게 된다. 분산은 단순히 원래의 분산 $(n^2 - 1)/12$에 $(n/2)^2$을 곱해서 얻을 수는 없다. 이유는 이때의 표본 $x_i$들은 독립적이지 않기 때문이다.

두 모집단의 비교

이 검정법은 두 모집단의 중앙값을 비교할 때도 사용할 수 있다. 다음과 같은 절차를 밟으면 된다.

집단 A와 B에서 각각 동일한 크기 $n$의 표본을 취하여 그 값들을 $a_1,\ldots,a_n$, $b_1,\ldots,b_n$이라 한다. 각 $i=1,\ldots,n$에 대하여 $x_i = a_i - b_i$로 두고 $x_i$들에 대하여 $m_0=0$로 두고 부호순위 검정을 한다.

실은 (1. 부호검정)도 이런 방식으로 두 모집단의 중앙값을 비교하는 데 사용할 수 있었다.

(예제). 집단 $A$의 관측값은 164, 103, 158, 165, 125, 83, 121, 101, 129, 126, 173, 94이고, 집단 $B$의 관측값은 143, 98, 169, 172, 105, 79, 124, 86, 131, 116, 155, 86이다. 부호순위 검정을 사용하여 집단 A의 중앙값이 집단 B의 중앙값보다 더 크다고 볼 수 있는지 유의수준 5%에서 검정하여라.

(힌트).  다음의 코드를 보라. 만일 $x_i = 0$인 $i$가 존재하거나 abs($x_i$)가 같은 값을 가지는 것들이 있었다면 코드가 더 복잡했을 것이다.

  A = c(164, 103, 158, 165, 125, 83, 121, 101, 129, 126, 173, 94)
  B = c(143, 98, 169, 172, 105, 79, 124, 86, 131, 116, 155, 86)
  D = A - B; D # Difference
  D.abs = abs(D); D.abs # absolute value of D
  sort.idx = order(D.abs); sort.idx
  D.abs[sort.idx]
  D[sort.idx]
  T.plus = 0
  n = length(A)
  for(i in 1:n) {
    if(D[sort.idx[i]] > 0) {
      T.plus = T.plus + i
    }
  }
  # library(comprehenr)
  # T.plus = sum(to_vec(for(i in 1:n) if(D[sort.idx[i]] > 0) i))
  
  cat(sprintf("T.plus = %d\n", T.plus))
  mean = n*(n+1)/4
  sigma = sqrt(n*(n+1)*(2*n+1)/24)
  z.val = (T.plus - mean)/sigma
  cat(sprintf("mean=%.1f, sigma=%.1f, z.val=%.4f\n", mean, sigma, z.val))
  p.val = 1 - pnorm(z.val)
  cat(sprintf("p.val=%.4f\n", p.val))

(단평).  R이 제공하는 붙박이함수 wilcox.test()를 이용하면 윌콕슨 부호순위 검정을 주어진 자료로부터 다음과 같이 간편하게 실행할 수 있다.

  A = c(164, 103, 158, 165, 125, 83, 121, 101, 129, 126, 173, 94)
  B = c(143, 98, 169, 172, 105, 79, 124, 86, 131, 116, 155, 86)
  wilcox.test(A, B, alternative="greater", paired=TRUE)

3. 윌콕슨 순위합 검정

윌콕슨 순위합 검정(Wilcoxon rank-sum test)은 순서척도에 의한 자료를 분석하는 대표적인 방법이다. 두 독립적인 모집단의 중앙값이 같은지를 다음과 같이 검정한다.

표본 $A$의 원소들과 표본 $B$의 원소들을 합하여 각 원소에 순위를 준다. 순위는 (동일한 값이 없다는 가정 하에) 1부터 $n_A + n_B$ 사이의 어느 자연수가 될 것이다. 동일한 값이 있는 경우에는 순위의 평균값을 준다. $A$의 원소들의 순위합 $W_A$와 $B$의 원소들의 순위합 $W_B$는 귀무가설이 옳다면 표본의 크기에 비례할 것이다.

즉 $W_A : W_b = n_A : n_B$가 성립해야 하며 이 등식의 오차가 과도하면 $H_0$를 기각하게 된다. 정확히 말하면

\[ W_A \sim N(n_A(n_A + n_B + 1)/2, n_A n_B(n_A + n_B + 1)/12) \]

이다.

$n_A = n_B$인 경우에는 위의 식에 $n_A = n_B = n/2$를 넣어 보면 평균은 $n(n+1)/4$로 계산되어 부호순위 검정에서의 식과 동일하고, 분산은 $n^2(n+1)/48$로 계산되어 $n(n+1)(n+\frac{1}{2})/48$과 비슷하지만 동일하지는 않다. 부호순위 검정의 실험설계를 보면 표본들을 얻은 후에도 두 표본의 원소들을 어떻게 짝짓느냐에 따라 부호순위합이 달라지지만 순위합 검정에서는 이 짝짓는 단계가 존재하지 않는다는 점에서 다르다.

(연습문제 1). 집단 $A$의 관측값은 95, 66, 42, 82, 71, 68, 52, 86이고, 집단 $B$의 관측값은 49, 39, 80, 65, 30, 62, 53, 49, 55, 60이다. 순위합 검정을 사용하여 이 두 집단의 관측값에 차이가 있다고 볼 수 있는지 유의수준 5%에서 검정하여라. 또한 $p$-값도 계산하여라.

$A$의 7번째 원소 52를 49로 바꾸었을 때는 결과가 어떻게 되는가?   (힌트) $Z = 2.044$로 계산된다. 다음의 코드가 도움될 것이다.

  A = c(95,66,42,82,71,68,52,86)
  B = c(49,39,80,65,30,62,53,49,55,60)
	MatA = cbind(A, rep("A", n_A <- length(A))); # MatA
	MatB = cbind(B, rep("B", n_B <- length(B))); # MatB
	MatC = rbind(MatA, MatB); # MatC
	sort.idx = order(MatC[,1]); # sort.idx
	MatC = MatC[sort.idx,]
	N = nrow(MatC) # N = n_A + n_B
	dimnames(MatC) = list(1:N, c("value", "level"))
	MatC

(단평).  R이 제공하는 붙박이함수 wilcox.test()를 이용하면 윌콕슨 순위합 검정을 주어진 자료로부터 다음과 같이 간편하게 실행할 수 있다.

  wilcox.test(A, B, alternative="two.sided", correct=F) 

(예제). $n_{A} = n_{B} = 2$이고 크기가 같은 원소가 없는 경우에 $W_{A}$의 평균과 분산을 직접 계산해 보자. $A$의 원소의 순위는 (1,2), (1,3), (1,4), (2,3), (2,4), (3,4) 의 6개 경우 중 하나가 될 것이며 각각의 확률은 $\frac{1}{{}_{4}C_{2}} = \frac{1}{6}$이 될 것이다. 각 경우의 순위합은 3, 4, 5, 5, 6, 7이다. 따라서 평균은 $\frac{3+4+5+5+6+7}{6} = \frac{30}{6} = 5$이고, 분산은 $\frac{3^{2} + 4^{2} + 2\times 5^{2} + 6^{2} + 7^{2}}{6} - 5^{2} = \frac{160}{6} - 25 = \frac{10}{6} = \frac{5}{3}$가 된다.

(연습문제 2). $(n_{A}, n_{B}) = (2,3)$인 경우에 $W_{A}$의 평균과 분산을 직접 계산하여라.

4. 런 검정

런 검정(Run test)은 0,1 또는 $a,b$와 같은 2개의 기호로 이루어진 유한열(finite sequence)이 랜덤한지를 판별하는 검정법이다. 0-블럭과 1-블럭(혹은 $a$블럭과 $b$-블럭)의 개수가 너무 적거나 혹은 너무 많으면 랜덤하지 않다고 판정한다.

두 종류의 블럭을 모두 런(run)이라 부르기로 햔다. 예를 들어 0000011111은 런의 개수가 2로 너무 적으므로 랜덤하지 않고, 0101010101은 런의 개수가 10으로 너무 크므로 랜덤하지 않다고 보는 것이다.

0의 개수가 $m$, 1의 개수가 $n$인 0,1-수열의 런을 $R$이라 했을 때 \begin{align*} & \mu_R = \frac{2mn}{m+n}+1, \\ & \sigma^2_R = \frac{2mn(2mn-m-n)}{(m+n)^2(m+n-1)} \end{align*} 이 되며 검정통계량 $\frac{R-\mu_R}{\sigma_{R}}$은 표준정규분포를 따른다. 단, $m,n>10$을 가정해야 한다. 런검정은 양면검정이므로 항상 $z_{\alpha/2}$를 사용해야 한다.

(연습문제).  다음 수열이 무작위인지 런검정하여라: 00 1 000 11 0 111 0 1 0 1 00 111

(힌트) $R=12$, $\mu_R=11.48$, $\sigma_R = 2.228$, $z=0.2334$

(단평).  이 검정법을 일반화 하면 5지선다형 시험문제의 해답이 랜덤하도록 문제와 해답들을 배치하는 데도 적용할 수 있다.


순위 상관계수

순위 상관계수(rank correlation coefficient)는 위에 설명한 검정방법들과 성격이 다르다. 두 모집단이 서로 독립인지를 검정할 수 있는데 일단 순위 상관계수의 정의를 알아 보자.

순위 상관계수는 스피어만(Spearman) 상관계수라고도 하며 $r_{\text{sp}}$로 나타내고 다음의 식으로 계산한다.

데이터는 $\{(x_1,y_1),\ldots(x_n,y_n)\}$이다. $x_i$들을 정렬하여 $x_i$의 순위를 $R_i$로 두고, $y_i$들을 정렬하여 $y_i$의 순위를 $S_i$로 둔다.

\[ r_{\text{sp}} = \frac{\sum_{i=1}^n \bigl(R_i - (n+1)/2\bigr)\bigl(S_i - (n+1)\bigr)}{n(n^2-1)/12} \]

두 확률변수 $X$와 $Y$가 독립이면 각 모집단에서 대표본을 추출하였을 때 $r_{\text{sp}}\sqrt{n-1} \sim N(0,1)$임이 알려져 있다. 이를 이용하여 $X$와 $Y$에 선형관계가 없다는 귀무가설을 검정할 수 있다.

[홈으로]