p값 혹은 유의확률에 대한 흔한 오개념들
Significance probability p value
🚧 이 포스트는 아직 이관 작업이 완료되지 않았습니다 🚧
가설검정에서 검정통계량이 귀무가설을 기각하도록 나타날 확률로써 귀무가설을 기각하게 되는 최소의 유의수준을 유의확률Significance Probability 혹은 p값p-value이라 한다.
[1]** p값은 확률, 즉 $0 \le p \le 1$ 이다.
- [2]: 유의수준 $\alpha$ 에서 $p \le \alpha$ 이기만 하면 귀무가설은 기각된다.
- [3]: 귀무가설이 기각되는 것에는 좋고 나쁨이 없다. 즉, p값이 높고 낮음에 좋고 나쁨은 없다.
- [4]: 단, 회귀관계가 있다는 것을 입증하고 싶다면 p값은 작은 게 좋은 것이다.
- [5]: 단, 모형이 적합하다는 것을 입증하고 싶다면 p값은 큰 게 좋은 것이다.
*상자 안에 적힌 것은 오개념을 말하는 게 아니다.솔직히 정의는 읽을수록 헷갈리기만 하니까 개념적으로 이해하고 번호가 매겨진 노트들을 꼼꼼히 읽어 숙지하도록 하자. 열심히 공부해도 귀무냐 대립이냐로 흔들면 누구나 흔들릴 정도로 헷갈리기 때문에 개념을 제대로 받아들이는 게 답이다. 유의확률을 제대로 이해하지 못하고 기초가 안 되면 통계학을 정상적인 시간 내에 공부하는 것은 거의 불가능하다.p값은 쉽게 말해 ‘검정통계량이 그렇게 나올 확률’을 말한다. 이 확률이 크면 클수록 ‘귀무가설이 사실이라면 흔히 일어나는 일’이고, 귀무가설을 기각할 근거가 부족해 귀무가설을 채택되는 것이다. 야매로 설명하자면 p값은 귀무가설이 유지될 가능성 혹은 귀무가설이 맞다는 증거가 얼마나 믿을만한지를 나타내는 수치다.
[1]** 을 이해하지 못하는 경우는 십중팔구 p값의 정의를 이해하지 못하고 다른 과학계에서의 어떤 계수처럼 알고 있다. p값은 결국 가설검정이라는 것도 절대적인 것은 아니므로, 확률적으로 얼마나 믿을만한지를 말하기 위해 도입된 것이다.
[2]** 에 대한 가장 흔한 오개념 중 하나는 p값이 적을수록 더 강하게 귀무가설을 기각한다고 하는 믿음이다. 물론 p값이 더 작으면 더 작은 유의수준에 대해서도 귀무가설을 기각할 수 있는 것은 사실이지만, 그 ‘정도’는 관계 없다. $0.001$ 이든 $10^{-8}$ 이든 아주 작은 양수 $\varepsilon >0$ 만큼이든 유의수준보다만 작으면 다 똑같은 기각이다.
[3]**의 경우엔 평상시에 공부를 안 하다가 급히 벼락치기를 하는 학생들이 가장 궁금해 하지만 그 답은 없다. 무엇이 좋냐 나쁘냐는 각자가 결과로 판단할 뿐 데이터를 다루는 사람은 그런 판단을 할 필요도 없고 해서도 안 된다.
[4]**와 **[5]**는 적을까 말까 고민하다가 정말 급한 사람이 있을까 싶어서 적었다. 시간이 충분하다면 깊게 생각하고 통계량들이 무슨 의미일까 알고 결정하도록 하자.유의확률이라는 개념을 이해하고 나면 귀무가설과 대립가설이 왜 그렇게 제멋대로 정해져있는지 알 수 있다. 누군가 악의적으로 헷갈리라고 그렇게 한 것이 아니라, 검정통계량이 어떤 분포를 따르는가에 따라 달려 있는 것이다.
예를 들어 t검정 혹은 z검정의 검정통계량은 가운데보단 양쪽꼬리로 갈수록 일어나기 힘들기 때문에 절댓값이 크면 기각된다. 적합도검정에서 검정통계량은 카이제곱분포를 따르고, $0$ 에 가까울수록 잘 적합됐다는 의미이므로 값이 크면 기각된다.
위의 두 예시에서 딱히 어떤 것을 귀무가설이라고 하지도 않았는데 뭐가 기각됐는지 느낌이 왔다면 p값을 이해했다고 봐도 좋다. 적어도 가설검정에서 귀무가설과 대립가설은 이렇듯 검정통계량의 분포에 따라 결정된다.기각역을 정할 땐 기각역을 최대로 한다는 원칙 하에서 정해지므로 이 ‘일어나기 힘든 일’이라는 설명이 말이 된다. 기본적으로 주어진 유의수준에서 기각역을 어떻게 정하는지를 상상해 보면 납득이 될 것이다.
위의 기각역들은 모두 분포함수 아래의 넓이가 같지만 $x$ 축 상에서의 길이는 판이하게 다름을 알 수 있다. 양쪽꼬리검정의 기각역으로 셋 중에 하나를 상식선에서 고르라고 한다면 누구나 첫번째를 고를 것이다.
아래는 위 그림을 그리기 위한 코드다.
win.graph(9,3)
par(mfrow=c(1,3))
plot(0,0,type='n',xlim=c(-4,4),ylim=c(-0.08,0.4),xlab=NA,ylab=NA)
polygon(c(seq(qt(0.975,14),5,0.01),qt(0.975,14)),
c(dt(seq(qt(0.975,14),5,0.01),df=14),0),
col='yellow',lty=0)
polygon(c(seq(-5,qt(0.025,14),0.01),qt(0.025,14)),
c(dt(seq(-5,qt(0.025,14),0.01),df=14),0),
col='yellow',lty=0)
abline(h=0)
lines(seq(-5,5,0.01),dt(seq(-5,5,0.01),df=14))
plot(0,0,type='n',xlim=c(-4,4),ylim=c(-0.08,0.4),xlab=NA,ylab=NA)
polygon(c(seq(qt(0.95,14),5,0.01),qt(0.95,14)),
c(dt(seq(qt(0.95,14),5,0.01),df=14),0),
col='yellow',lty=0)
abline(h=0)
lines(seq(-5,5,0.01),dt(seq(-5,5,0.01),df=14))
plot(0,0,type='n',xlim=c(-4,4),ylim=c(-0.08,0.4),xlab=NA,ylab=NA)
x<-c(seq(qt(0.50,14),qt(0.55,14),0.01))
y<-c(dt(seq(qt(0.50,14),qt(0.55,14),0.01),df=14))
x<-c(x[1],x,x[length(x)])
y<-c(0,y,0)
polygon(x,
y,
col='yellow',lty=0)
abline(h=0)
lines(seq(-5,5,0.01),dt(seq(-5,5,0.01),df=14))