본문 바로가기
컴퓨터/수학이랑

p-value란 무엇인가

by adnoctum 2010. 8. 2.

   p-value는, 귀무가설(null hypothesis, H0)이 맞다는 전제 하에, 통계값(statistics)[각주:1]이 실제로 관측된 값 이상일 확률을 의미한다.

일반적으로 p-value는 어떤 가설을 전제로, 그 가설이 맞는다는 가정 하에, 내가 현재 구한 통계값이 얼마나 자주 나올 것인가, 를 의미한다고 할 수 있다. p-value는 가설검정이라는 것이 전체 데이터를 갖고 하는 것이 아닌 sampling 된 데이터를 갖고 하는 것이기 때문에 필요하게 되는데, 다음과 같은 경우를 살펴 보자.

다음과 같이 모분포가 10,000 개의 값으로 되어 있다고 하자.

그림 1. 평균 100.3023 을 갖는 모분포의 도수분포표.


위 모분포의 평균은 100.3023 이다. 가설 검증이라는 것은 모분포를 전부 검증할 수 없기 때문에 모분포에서 일부만 추출하여(그렇게 추출된 것을 sample이라 하자) 검사한 후, sample로부터 모분포의 특성을 추정하는 절차이다. 위의 10,000 개가 전체인 모분포에서 100 개만을 sampling 한다고 해보자. 실제 통계검사라는 것이 그렇다. 인구 전체를 다 검사할 수 없으니 일부만을 추출하여 검사하는 것이다. 이 예에서도 전체 10,000 개를 다 검사할 수 없으니 100 개만 선택해서 검사한다고 해보자.

   100 개를 선택하여 구한 평균이 모분포의 평균과 유사할까? 그렇다고 말할 수 없다. 왜냐 하면, 내가 100 개를 고를 때 다음과 같은 곳에 있는 것들이 선택될 수도 있기 때문이다.


그림 2. sampling 의 예. 푸른 네모로 선택된 자료가 sampling 된다면
평균은 150 이 넘게 나올 것이다. 이것은 모분포의 평균과 많이 다르다.


위의 경우처럼, 내가 100 개를 선택했을 때 그 100 개의 평균이 모분포의 평균에 근접한 것이 골라졌다고 말할 수 없는 경우가 얼마든지 발생할 수 있다. 따라서, 문제는 이것이다.

sampling 된 데이터의 평균은 모분포의 평균과 얼마나 유사할 것인가?


실제로 위의 예에서, 10,000 개의 모분포에서 100 개를 sampling 하는 과정을 1,000 번 반복하여 각각의 경우에 대한 평균의 분포를 그려 보면 다음과 같다.


그림 3. 100 개를 sampling 할 때마다 평균을 구하는 작업을 1,000 번
해서 100 개의 평균을 그때그때 구한 후, 그 1,000개의 값을 도수분포표로 나타낸 그림.


위 코드에 필요한 statutil 파일들

statutil.cpp

statutil.h




즉, 가끔이기는 하지만 내가 sampling 한 100 개의 데이터의 평균이 92 가 안 나올 때도 있고 가끔은 108 이 넘어갈 때도 있는 것이다. 물론 많은 경우 100 근처에서 나오기는 한다[각주:2]. 이 상황에서 이제 다음과 같은 문제가 생긴다.

내가 sampling한 데이터의 평균이 96.95 인데, 이것이 모평균이 90 이라는 것을 지지할 수 있을까?


무턱대고 그럴 수는 없다. 왜냐 하면, sampling 된 데이터의 평균이 96.95 인 것은 평균이 100 인 위 예의 분포에서도 충분히 나올 수 있는 값이므로 모평균이 몇인지 명확히 알 수 없기 때문이다. 

   정리를 하면, 가설검증이라는 것은 전체 데이터의 일부만을 추출하여 평균을 내고, 그 평균이 전체 데이터의 평균을 잘 반영한다는 가정 하에 전체 데이터의 평균을 구하는 작업인데, 아무리 무작위 추출을 잘 한다 하더라도 추출된 데이터의 평균은 전체 데이터의 평균에서 멀어질 수 있게 된다. 따라서, 내가 추출한 이 데이터의 평균이 원래의 전체 데이터의 평균과 얼마나 다른 값인지를 알 수 있는 방법이 필요하게 된다. 이와 같은 문제 때문에 나온 값이 p-value 이다.

   쉽게 알 수 있도록 극단적인 예를 하나 들어 보자. 만약 모분포가 그림 1 과 같아서 평균이 100 이고 분산이 30(실제로 30이다)인 데이터에서 50 개를 sampling 한다고 할 때, 그 50개의 평균이 1 이 나올 경우는 얼마나 될까? 실제 그림에서도 그렇고, 생각으로도 그렇고 아마 그런 경우는 나오긴 나와도 거의 안 나올 것이다. 반대로, sampling 된 50 개의 데이터의 평균이 500 일 확률은? 데이터에 500 이 넘는 자료가 없다면 모를까, 그런 경우가 아주 안 나온다고 말할 수는 없겠지만, 아주 희박하게 나온다는 것은 짐작할 수 있고, 실제로도 그렇다. 즉,

우리는 평균이 100 이라는 가정 하에서는 sampling 된 데이터의 평균이 100 근처에 있을 것이라는 생각을 하게 되고, 따라서, 역으로, sampling 된 데이터의 평균이 100 에서 멀면 멀수록 모분포의 평균이 100 이 아닐지도 모른다는 생각을 하게 된다.



이것이 정확히 p-value 가 나온 논리이며, 그 의미이다. 즉,

"모분포의 평균이 100 이다"라는 귀무가설이 참이라는 가정 하에서, 100 개의 데이터를 sampling 할 때 이론적으로 나올 수 있는 평균의 분포에서, 지금 내가 갖고 있는 값인 95 보다 큰 값이 나올 수 있는 확률. 그것이 p-value 이다. 위의 예에서 본 것과 같이, 만약 그럴 확률이 매우 낮다면 우리는 귀무가설을 기각할 수 있게 된다. 왜냐 하면, 우리는, 우연히 발생할 가능성이 매우 희박한 사건이 실제로 발생했을 경우, 그것은 우연이 아니라고 생각하는 경향이 있고, p-value 역시 그와 같은 경향을 따른 것이기 때문이다. 시험에서 우연히 100 점을 받을 확률은 매우 낮은데 정말로 100 점을 받은 사람이 있다면, 그가 우연히 100 점을 받았다고 생각하기보다는 '우연히' 100 점을 받은 것은 아니라고 생각한다. 또한 로또를 연속 5번 맞춘 사람이 있다면, 우연히 그런 일이 일어날 가능성은 매우 작으므로 그 일은 우연이 아니라고 생각하고, 뭔가 모종의 음모가 있다고 의심해 보게 된다. 다시 예를 들면,

내가 50 개의 데이터를 추출했고 그 평균이 95 이다. 나는 아마도 이 데이터가 평균이 100 이고 분산이 30 인 모분포 P에서 왔을 것 같다. 그런데 평균이 100 이고 분산이 30 인 모분포에서 50 개를 추출할 때 그 50개의 평균이 95가 나올 확률(A)이 0.001 이라면?  즉, 평균이 100, 분산이 30인 모분포에서 50개를 선택했을 때 평균이 95가 나오는 경우가 매우 드물다면, 아마도 내가 갖고 있는 데이터는 P에서 왔다고 말하기 조금 꺼려진다. 반대로 그럴 확률(A)이 0.65 라면, 그렇다면 이런 경우는 그리 어려운 일이 아니므로 그럴듯 하다. 즉, 우리는 통계적으로 일어나기 매우 어려운 일이 일어났을 때, 그 일은 아마도 우연히 일어났다기 보다는 다른 이유 때문에 일어났다고 생각한다. 즉, 평균이 100, 분산이 30인 모분포에서 50개를 추출했는데 그 평균이 95였다, 그런데 이런 경우 평균이 95이거나 그보다 클 확률이 0.00001 밖에 안 된다면, 아마도 이렇게 확률이 적은 일이 지금 실제로 일어났다고 생각하기 보다는 애초에 가졌던 가설, 즉, 데이터 50개를 추출한 모분포가 평균이 100 이고 분산이 30 이다, 이 가설이 아닐 것이라고 생각한다는 것이다.

이쯤에서 다시 p-value의 정의를 살펴 보면,

p-value는 귀무가설이 맞다는 전제 하에, 관측된 통계값 혹은 그 값보다 큰 값이 나올 확률이다.

따라서 p-value가 너무 낮으면, 그렇게 낮은 확률의 사건이 실제로 일어났다고 생각하기 보다는 귀무가설이 틀렸다고 생각하게 된다. 그래서 귀무가설을 기각하고 대립가설을 채택하게 된다. 그림으로 보면 다음과 같다.


그림 4. p-value의 개념. 이론적으로 가능한 통계값의 분포에서, 실제로 관측한 통계값 이상이 나올 확률.



그림에서 보면, 실제로 가능한 m(평균)의 분포가 위와 같을 때, 내가 구한 평균이 m2 라면 p-value가 매우 작다. 이럴 경우, 그렇게 희박한 일이 실제로 일어났다고 하기 보다는 저 이론적 분포를 가져온 가설(귀무가설)이 잘못되었다고 생각하겠지. 반대로 m1과 같이 귀무가설 하에선 별스럽지 않은 일이라면 아마도 귀무가설이 맞을 것이다.

   위에서는 물론 주로 평균만을 갖고 예를 들었으나, 당연히 평균과 분산이 동시에 주어져야 위와 같은 가설검증을 할 수 있다. 또한, 모분포의 평균과 분산이 몇 일 것이다, 란 조건이 있으면, 거기서 n 개를 sampling 했을 때 그 n 개의 평균이 얼마나 잘 나올 수 있는 값인지는 중심극한정리와 표준정규분포의 성질을 이용하여 정확히 계산가능하다. 따라서 그 경우마다 p-value를 구할 수 있게 된다.

자, 그렇다면 p-value 에 대한 다음의 오해들 - 위키에서 가져옴 - 을 생각해 보자.

1. p-value는 귀무가설이 참일 확률이 아니다 : 귀무가설이 참일 확률은 구할 수 없다.
2. p-value는 통계값이 우연일 확률이 아니다 : p-value가 낮아도 귀무가설이 참일 수 있고, p-value가 높아도 귀무가설은 틀릴 수 있다.
3. p-value는 귀무가설을 기각하면 안되는데 기각할 확률이다 : 길어서 뒤로 뺌.
4. p-value는 반복실험을 했을 때 동일하지 않은 결론이 나오는 확률이 아니다 : 100 번을 sampling 하면 5번 정도는 p-value 0.05 에 걸리겠지. 이 경우, 95번은 귀무가설 채택, 5번은 기각, 이라는 것은 p-value 0.05 를 기준으로 그 이하는 좀 일어나기 어려우니까 그냥 귀무가설이 틀렸다고 하자, 라는 가정 때문이지 p-value 때문은 아니다.
5. 1-(p-value)는 대립가설이 맞을 확률이 아니다 : p-value와 대립가설은 별로 관련이 없다. 순전히 '귀무가설이 맞다는 전제 하에' 나온 값이 p-value이고, p-value를 구함에 있어 대립가설은 그 어디에서도 작용하지 않는다.
6. significance level은 p-value에 의해 결정되는 것이 아니다 : alpha는 연구자의 주관이며, 관례적으로 0.05, 0.01 을 사용할 뿐이지. 난 microarray 가 지저분하기 때문에 0.10 정도를 사용할 때도 있다.
7. 생략.

3. p-value는 귀무가설을 기각하면 안되는데 기각할 확률이다 : 아무래도 가장 혼란스러운 오해가 아닌가 십다. 귀무가설을 잘못 기각했는지, 아니면 맞게 기각했는지는 확인할 수 없다. 즉, 귀무가설을 잘못 기각했다는 것은 확률값이 아니다. 귀무가설이 맞다는 전제 하에 나온 분포에서 무엇인가를 하는 것이기 때문에, 그리고 p-value가 0.001 이에서 귀무가설을 기각했다고 해서 그것이 귀무가설이 맞음에도 불구하고 p-value가 낮았기 때문에 기각했다고는 말히기는 좀 어려운데 왜냐 하면 그 0.1%의 경우에 대해서 귀무가설이 사실은 맞은 가설인지를 확인할 방법이 없기 때문이다. 그리고 정의상 p-value는 그런 개념이 아니다. 만약 애초에 귀무가설이 틀렸다고 해보자. 그런 상황에서도 여전히 p-value는 구해지는데, 그런 p-value가 과연 귀무가설을 잘못 기각한 확률이 되는가? 아마도 3번과 같은 오류는, 귀무가설이 맞다는 전제 하에 모든 일이 이루어진다면 맞는 말이긴 한데, 애초부터 귀무가설이 틀릴 수도 있고, 그렇더라도 p-value는 여전히 구해지기 때문에 뭐라 말할 수 없게 되는 것이다.



자, 이제 위의 일반적인 경우에 더해서, pearson's correlation coefficient (PCC) 에 대한 p-value를 생각해 보자. 왜 이런 문제가 생기느냐 하면, 비록 모분포에서는 pcc가 거의 0 에 가깝다고 하더라도 우연히 PCC가 좀 크게 sampling 될 수도 있기 때문이다. 다음과 같다.


위의 데이터는 딱 봐도 PCC가 0에 가깝다는 것을 알 수 있다. 실제로 계산해 보면 0.00395613이 나온다. 위의 데이터를 모분포 라 하자. 데이터는 10,000 개 이다. 위와 같은 모분포에서 100 개의 데이터만 무작위로 선택하여 PCC를 계산하는 과정을 1,000 번을 하면 PCC의 분포는 다음과 같다. 




즉, 전체 10,000 개의 데이터인 모분포는 비록 PCC가 0.00395613 이지만, 그 1만개의 모분포에서 100 개만을 sampling 해서 PCC를 계산한다면 가끔씩은 0.2가 넘는 값이 나올 수도 있는 것이다. 자, 이 예제에서 모분포의 PCC가 0.00395613 이 아니라 0 이라고 해보자. 그러더라도 100 개를 sampling 하는 작업을 한 PCC의 분포는 위의 분포와 크게 달라지지 않을 것이다. 이제, 다음과 같은 문제가 발생한다.

내가 100 개의 데이터로부터 PCC를 구했더니 0.15가 나왔다. 이 0.15 라는 값은 통계적으로 유의미한 값인가? 즉, 원래의 모분포는 PCC가 0 인데 위의 경우처럼 우연히 0.15가 나온 것인가, 아니면 정말로 모분포의 PCC가 0 이 아니기 때문에 0.15가 나온 것인가?


왜 위와 같은 문제가 발생하느냐 하면, 위 예제 데이터로 보여준 것과 같이 비록 PCC가 0 이더라도 sampling 을 하게 되면 우연히 PCC 가 0.2 가 넘게 나올 수도 있기 때문이다. 따라서 내가 현재 갖고 있는 0.15라는 값이 과연 그렇게 우연히 나온 값인지, 아니면 정말로 PCC가 0 이 아니기 때문에 나온 값인지 궁금하게 된다. 궁금해 할 수 있어야 한다. 바로 위와 같은 경우 때문에 pearson's correlation coefficient 에서도 p-value라는 것이 필요하게 되는 것이다. 그리고, 이 경우, 통계값으로 pcc 가 사용되었다. 만약 이와 같은 상황에서 pcc=0.35에 대한 p-value 가 0.001 이 나왔다면, 귀무가설인 pcc = 0 인 상황에서는 아무리 여러 번 sampling 해도 우연히 pcc가 0.35가 잘 나오기 힘드니까 그런 일이 지금 일어났다고 생각하기 보다는 애초에 pcc=0 이라는 가정이 틀린 것이고, 따라서 p == 0 은 아니라고 생각하는 편이 좀 더 합리적이라는 결론에 도달하게 된다. 



  1. statistics란 분포로부터 계산되는 값을 말하는데, 흔히 평균, 또는 평균의 차이, 분산, nth moment 등이 있을 수 있다. [본문으로]
  2. 현재 '평균'을 statistics로 사용하고 있다. 이런 경우 중심극한정리에 따라 그림 3의 그래프는 정규분포로 간다는 것을 알 수 있다. [본문으로]