9.3 Welch t-test의 검정력 구하기
\(X_1 \sim N(10, 2^2)\) 과 \(X_2 \sim N(12, 2^2)\) 으로부터 각각 10개의 난수를 발생시켜 t 검정을 하는 것은 다음과 같다.
= rnorm(10, 10, 2)
x1 = rnorm(10, 12, 2)
x2 t.test(x1, x2)
Welch Two Sample t-test
data: x1 and x2
t = -1.6245, df = 13.539, p-value = 0.1273
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-2.9748010 0.4153159
sample estimates:
mean of x mean of y
10.28960 11.56934
만약 위의 것을 Sim.t() 라는 함수를 만들어 수행한다면 다음과 같이 할 수 있다.
= function(mu1, mu2, sig1, sig2, n1, n2)
Sim.t
{= rnorm(n1, mu1, sig1)
x1 = rnorm(n2, mu2, sig2)
x2 t.test(x1, x2)$p.value
}Sim.t(10, 12, 2, 2, 10, 10)
[1] 0.0006798321
R에서 기본적으로 제공하는 함수 power.t.test()를 이용하여 각 군당 10명, 두 군의 평균의 차이는 2, 표준편차는 2로 동일한 경우에 대한 검정력은 다음과 같이 구할 수 있다.
power.t.test(n=10, delta=2, sd=2)
Two-sample t test power calculation
n = 10
delta = 2
sd = 2
sig.level = 0.05
power = 0.5619846
alternative = two.sided
NOTE: n is number in *each* group
위 함수는 각 군의 표본 크기가 다르거나, 표준편차가 다른 경우에는 사용할 수 없다. 따라서, 다음과 같은 simulation 함수를 작성하여 좀 더 일반적인 경우에도 구할 수 있다.
= function(mu1, mu2, sig1, sig2, n1, n2, N=2000)
Power.t
{= rep(NA, N)
Res for (i in 1:N) {
= rnorm(n1, mu1, sig1)
x1 = rnorm(n2, mu2, sig2)
x2 = t.test(x1, x2)$p.value
Res[i]
}return(sum(Res < 0.05)/N)
}
만약 power.t.test()를 이용하여 풀었던 문제를 우리가 작성한 Power.t()를 이용하여 푼다면 다음과 같다.
Power.t(10, 12, 2, 2, 10, 10)
[1] 0.546
두 군의 크기가 다르거나 표준편차가 다른 경우에도 다음과 같이 구할 수 있다.
Power.t(10, 12, 2, 3, 30, 30)
[1] 0.8415
지금까지는 귀무가설(\(H_0\))이 \(\mu_1 = \mu_2\)이고, 따라서, 대립가설이 \(\mu_1 \neq \mu_2\)인 경우이다. 이 경우 두 평균의 차이가 얼마인지에 대한 설정이 없으므로, 이것만으로는 검정력(power)을 구할 수 없다. 이 때 가정하는 두 군의 차이값에 대한 미지의 진실을 가정하고 이에 따라 검정력을 구하게 된다. 이 때 두 값의 차이에 대한 가정을 ’최소검출자’라고도 한다.
만약 귀무가설이 \(\mu_1 - \mu_2 < 2\) (즉, 대립가설이 \(\mu_1 - \mu_2 \geq 2\)이다.) 가 된다면 위의 R script를 어떻게 바꾸어야 하는지 생각해보라.