제1편
안녕하세요! 오늘은 초보 통계학자분들이 자주 듣고 헷갈려하실 만한 주제, 바로 "p-value(피값)"에 대해 이야기해보려고 합니다. 통계학을 공부하다 보면 p-value라는 단어를 자주 접하게 되는데요, 이 값이 뭔지, 왜 중요한지, 어떻게 해석해야 하는지 쉽게 설명드리겠습니다.
귀무가설(Null Hypothesis, H₀):이란?
귀무가설은 우리가 검정하려는 기본 가설로, 보통 "특별한 변화나 효과가 없다"는 가정을 뜻합니다. 예를 들어:
"신약은 기존 약과 효과 차이가 없다."
"동전은 공정하다(앞면이 나올 확률이 50%)."
"두 집단의 평균은 같다."
우리가 증명하고 싶은 것입니다. "경제학과 학생들의 평균 키는 170cm가 아니다"가 됩니다.
확률 분포는 데이터가 특정 값들을 가질 확률을 나타낸 함수입니다. 예를 들어, 정규분포(normal distribution)는 데이터가 평균을 중심으로 대칭적으로 분포하며, 평균에서 멀어질수록 값이 나타날 확률이 작아지는 분포를 말합니다.
많은 통계적 검정은 정규분포를 기반으로 합니다. 왜 그럴까요? 바로 중심극한정리 때문입니다.
중심극한정리는 이렇게 말합니다: "모집단의 분포가 어떻든 간에, 표본 크기가 충분히 크면 (보통 30 이상), 표본 평균의 분포는 정규분포에 가까워진다."
Python 코드를 실행하면, 동전을 30번 던졌을 때 나타날 수 있는 모든 경우에 대한 확률 분포와 함께, p-value 영역(관측값 이상 영역의 확률)을 시각화한 그래프가 나타납니다. 아래의 시뮬레이션의 경우 앞면이 22번이 나왔는데요 p-value region이 중심부(평균)가 아닌 오른편 끝쪽으로 나왔습니다. 22번이라는 의미는 이론적 평균 15번 보다 더 많은 결과가 나왔다는 의미입니다.
p-value는 어떻게 구하는 걸까요?
우리의 케이스에서
n=30, i=22, p=0.5입니다.
(n, x)는 조합이고 python 공식으로는
n=30;i=22; p=0.5;
import math
print(math.comb(n, i))
5852925입니다.
그럼 p-value를 계산해 보면
n_val=30
i_val=22
p_val=0.5
binom_coeff = math.comb(n_val, i_val) # 이항 계수 C(n, i) #조합공식
prob=binom_coeff * (p_val ** i_val) * ((1 - p_val) ** (n_val - i_val)) #이항분포 공식
print(prob)
0.0054509611800313
로 매우 적은 숫자가 나옵니다.
그리고 공식을 드리진 안 핬지만 22,23,... 30까지 나올 가능성을 모두 합치니
P(X=22) = 0.00545096
P(X=23) = 0.00189599
P(X=24) = 0.00055300
P(X=25) = 0.00013272
P(X=26) = 0.00002552
P(X=27) = 0.00000378
P(X=28) = 0.00000041
P(X=29) = 0.00000003
P(X=30) = 0.00000000
p-value: 0.0081 이 됩니다.
p-value가 작다면: 관측된 결과(앞면 22번)가 우연히 나타날 가능성이 낮다는 뜻입니다. 따라서, 동전이 공정하지 않을 가능성이 높습니다.
p-value가 크다면: 관측된 결과가 우연히 나타날 가능성이 충분히 크다는 뜻입니다. 따라서, 동전이 공정하다는 가설을 기각할 수 없습니다.
이 분포에서 우리는 동전의 앞면이 22가 상 나올 확률을 계산해 보았는데, 동전이 22일 확률은 물론 22 이세 30까지 모두를 합쳐도 0.0081로 1% 이하의 가능성이므로 이 동전을 fair 한 동전이 아니다고 판정할 수가 있습니다. 다음 편 추가로 더 설명을 드릴게요. 이런 현상이 나올 확률이 매우 낮다 많다만 이해하세요. 사람이 140세에 사망을 했다면 매우 드문 현상이고 이 분이 오래 살게 된 동기를 연구하는 것은 매우 유의미하다(의미가 있다, 학술적 가치가 있다) 이렇게 해석을 하는 겁니다.