본문 바로가기

Study/수학과통계

통계적추론 ~ 귀무가설

먼저 추론을 위한 기본 개념이다.

1. 모집단(Population)

 모집단은 내가 관심있어(사용하고자)하는 모든 데이터의 집합이다. $ X = [x_{1},x_{2},\cdots]$

 예를들어 내가 한국 남자의 평균 키를 분석하고자 한다면, 모집단은 전체 한국남자의 키 데이터 들일 것이다.

 $$ex) X = [178,184,\cdots]$$

 

 데이터의 수는 유한개가 될 수도 있고, 무한대로 될 수도 있다.

 하지만 사실상 모집단의 데이터를 수집하는것과 분석하는것은 불가능에 가깝다.

 (자세한 사항은 백영민교수님의 방법론적 사유 책 참조)

 

 일반적으로 모집단의 평균은 $\mu$로, 표준편차는 $\sigma$로 표기한다.

2. 표본(Sample)

 샘플은 내가 분석하고자 모집단에서 표집(sampling)한 데이터이다. $ sample = [x_{1},x_{2},\cdots,x_{n}]$

 위에서 언급했듯이 모집단 전체를 분석하는것은 불가능 하기때문에, 데이터를 표집해서 분석한다.

 즉, 내가 필요한 만큼 n개의 데이터를 모집단에서 가져오는 것이다.

 

 일반적으로 표본에서 평균은 $\bar{X}$로, 표준편차는 $S$로 표기한다.

 또한 이때, $S = \frac{\sigma}{\surd{n}}$으로 설명할 수 있다. 

3.통계적 추론

 통계적 추론을 이야기 하기위해, 표본과 모집단의 평균, 표준편차들의 속성을 먼저 이해해야한다. 

 표본평균 $\bar{X}$는 모집단 평균 $\mu$와 같지 않고(같은 경우도 존재하지만 배제)

 표본분산 $S^{2}$ 는 모집단 분산 $\sigma^{2}$와 같지않다.(마찬가지)

$$\bar{x} \neq \mu \quad S^{2} \neq \sigma^{2}$$

 

 운좋게 우리가 표집한 데이터들이 모집단 데이터와 완벽히 같은 평균과 완벽히 같은 분산을 가질 수도 있지만,

 반대로 정말 운안좋게 표집한 데이터들이 모두 작은값 혹은 모두 큰값으로 존재할 수도 있다.

 따라서 일반적으로 표본과 모집단의 평균과 분산은 같지 않다.

 우리는 단지 표본으로부터 모집단의 평균과 분산을 추론할 뿐이며, 이때 오차가 발생한다.

 $$\bar{X} \rightarrow^{추론} \mu \; S^{2} \rightarrow^{추론} \sigma^{2}$$

$$\epsilon(오차) = \bar{X} - \mu$$

3. 점추정과 구간추정

 점추정(Point Estimation)은 말그대로 어떤 값을 하나의 점을 추정(예측)하는 것이다.

 예를들어, '옆집에 사는 민석이는 키가 185일것이다'에서 나는 '민석'이의 키를 '185'하나의 점으로 추정 하였다. 

 

 둘째로, 구간추정(Interval Estimation)은 신뢰구간(Confidence Interval)로 이야기 하기도 하며,

 역시 말 그대로 어떤 값을 일정한 구간으로 예측을 하는 것이며,

 해당 구간에 값이 존재할거라는 일정한 수준의 확신이(?)(신뢰도) 있는 것이다.

 예를 들어, '옆집에 사는 윤호는 키는 170~175일 것이 95%확실해'에서 나는 '윤호'의 키를 95%라는 확률의 확신을

 갖고  170~175사이의 값으로 예측하였다.

4. 귀무가설과 대립가설

 먼저, 귀무가설(Null Hypothesis)는 Null이라는 단어에서 알 수 있듯이, 차이가 없거나 의미없는 차이의 경우의 가설로,   현실에서, 일반적인 지식 - 통상적인 지식이다. 일반적으로 $H_{0}$로 표기한다.

 예를들어, 내가 코로나에 대한 신약을 개발해 냈다. 이때, '신약은 효과가 없다'라고 가정내리는 것이 귀무 가설이다. 

 기존에 어떤 약도 코로나에 효과를 보이지 못했고(일반적 지식), 내가 개발해낸 신약도 효과가 없을 것(차이가 없다)

 이라고 가정 내리는 것이 귀무 가설인것이다.

 

 반대로, 대립가설(Alternative Hypothesis)는 귀무가설에 대립하는 명제로, 유의미한 차이를 의미한며 $H_{1}$으로 표기한다.

 다시말해, 모집단에서 독립변수(X)와 결과변수(Y) 사이에는 관계가 있고, 독립변수에 따라 결과변수가 변한다는 것을

 의미한다. 현실에서 대립가설은 내가 바꾸고자 하는것, 반대되는것에 해당한다.

 예를들어, '내가 개발해낸 신약은 효과가 있다'는 가설은 기존에 효과가 없던 약과 다른 유의미한 차이를 내포한다. 

 그리고 이러한 대립가설로 시작해서 연구하고 유의미한 결과를 내놓을 수 있다. 

 

5. 가설검정

 가설검정은 자신이 주장하는 대립가설이 옳은지 논리적으로 증명해 내 가는 과정이다.

 먼저, 기존의 사실 $H_{0}$과 내가 주장하는 사실 $H_{1}$이 있다면, 둘은 대립되기에 하나는 참이며 하나는 거짓이다.

 가설 검정에 대표적인 예로 형사가 용의자를 범인으로 추정해가는 과정이 있다.

 무죄추정의 원칙에 따라, 기존의 사실에서 용의자는 무죄에 해당한다. $H_{0}$: 용의자는 무죄

 형사인 내가 봤을때, 해당 용의자는 범죄자가 확실하다(유죄) $H_{1}$: 용의자는 유죄

 이 상황을 표로 정리하자면 아래와 같다.

진짜 진실\나의 가설(판단) $H_{0}$ - 시민(무죄) $H_{1}$ - 마피아(유죄)
범죄 저지르지 않음($H_{0} True$) 옳은 추정(RightDecision) 1종 오류(Type 1 Error)
범죄 저지름($H_{1} True$) 2종 오류(Type 2 Error) 옳은 추정(RightDecision)

 먼저 1종 오류는 귀무가설이 참인데 대립가설을 채택하는 오류(잘못)이고, 2종 오류는 대립가설이 참인데 귀무가설을 채택하는 오류이다. 

 예시에서 형사인 내가 마피아라고 생각한 사람이 알고보니 선량한 시민인 경우 1종오류이며,

 내가 선량한 시민이라고 생각한 사람이 알고보니 마피아인 경우 2종오류에 해당한다. 

 

 이때, 1종 오류의 최대 허용률($H_{1}$을 선택했을때 발생하는 오류)의 최대 허용확률을 $\alpha$라고 표기하며, 

 유의수준이라고 한다. 2종 오류의 확률은 $\beta$라고 표기하며 $1 - \beta$가 검정력이라고 한다.

 만약, 내가 중요한것이 체포율, (즉 억울한 사람이 생기는것 보단 범죄를 저질렀음에도 체포되지 않는게 더 부조리하다고 생각할경우) 1종 오류 최대 허용률 $\alpha$값을 높게 설정해야 한다.

 반대로, 내가 중요한것이 인권 (즉 범죄를 저지르지 않았는데 억울하게 잡히는 경우는 없어야 한다고 생각하는 경우)는 1종 오류 최대허용률을 낮춰야 한다.

  

 처음 공부할때, 제일 이해안되고 막막했던게 이것의 방법론적 부분이다. 다음 예시를 통해 이해해보자.

예제

시청에서 시민들을 대상으로 콜레스트롤 수치를 낮추기 위한 프로그램을 실시했다.

프로그램을 기획한 나는 '콜레스트롤 수치가 기존과 같이 변화가 없다'는 귀무가설$H_{0} :$ 프로그램 효과 없음 과 '프로그램을 통해 콜레스트롤 수치가 감소했다'는 대립가설 $H_{1}:$ 프로그램 효과 있음 을 세울 수 있다. 

이를 검증하기 위해 나는 프로그램 실시 이후 40명의 시민을 표집하였고, 기존 모집단인 부대에서 체지방률의 평균은 200이며 표준편차는 24이다.

$$n = 40 \; \mu_{체지방} = 200 \sigma = 24$$

$$H_{0}: \mu_{체지방} = 200 \; H_{1}: \mu_{체지방} < 200$$

$$모집단 X \sim N(\mu , \sigma^{2}) \; \bar{X} \sim N(\mu, \frac{\sigma^{2}}{n})$$

 

이때, 만약 내가 표집한 40명의 평균 콜레스트롤 수치가 198로 측정됐다면($\bar{X} = 198$), H0와 H1중 어떤것을 채택할 것인가?

이때, 문제는 실제로 프로그램의 효과가 전혀 없는 귀무가설이 참인 상황에서도 40명을 표집했을때, 콜레스트롤 수치가 198이하일 확률이 30%라는 것이다. 즉 실제로는 아무 변화가 없었음에도 40명씩 10번을 표집했을때 3번 정도는 평균 콜레스트롤 수치가 198 이하의 값을 얻을 수 있다는 것이다.

따라서 이때, '프로그램이 성공적이다'라고 가정하는 대립가설을 채택하는 것은 위험할 것이다.

  +)이러한 수치는 정규분포를 표준화 해서 얻을 수 있다.

더보기

모집단 전체 시민의 콜레스트롤 수치가 $N(40,24^{2})$인 정규분포를 따르고 있기 때문에,

표폰집단의 콜레스트롤 수치는 $N(40,\frac{24^{2}}{40})$인 정규분포를 따르고 있다.

표본집단의 정규분포를 표준화시키면 아래와 같다.

$$ z = \frac{x - \mu}{\sigma} [표준화 식] \; -0.527 = \frac{198 - 200}{\frac{24}{\surd{40}}} $$

이때, z-table에서 -0.527이란 값을 찾아보았을땐, 0.3이란 값이 나온다.

즉, 평균이 200이고 표준편차가 24인 정규분포를 따르는 콜레스트롤 수치들에서 198이라는 수치는 30%발생 할 수 있다는 말이다. 

 

그렇다면, 프로그램이 성공적이라고 말했을때 신뢰도 95%의 믿을만한 판단을 내리기 위한 평균 콜레스트롤 수치는 몇이 될지가 중요한 요점이다(다시말해 프로그램이 실패했을 경우 표본의 평균 콜레스트롤 수치값이 해당 값으로 나올 확률은 5%이하)

 

이를 계산하기 위해서는 우리가 가지고 있는 정보를 다시 잘 활용해야한다.

먼저 해당값이 나올 확률은 5%이하가 되어야 하니 먼저 z-table에서 0.05값에 가장 가까운 z값을 찾아 준다.

z = -1.64정도가 될 것이다. 그럼 이것을 이용해 다시 표준화 식에서 x값을 구해준다.

$$ -1.64 = \frac{x - 200}{\frac{24}{\surd{40}}} $$

이것을 만족하는 x값은 193.78로 계산된다. 

다시말해 표본 집단의 콜레스트롤 수치가 193.78 이하 값이 나왔을때, 귀무가설 $H_{0}$ : '프로그램이 효과 없다'를 기각하고  $H_{1}$ : '프로그램이 효과 있다'를 채택했을때, 95%의 신뢰도를 가질 수 있으며 약 5%정도만이 오류가 발생한다.

 

이러한 귀무가설의 검정은 3가지로 나눌 수 있다.

1. One-Tail Test(Left) : $H_{1}$ : '표본집단의 평균은 모집단 평균보다 작다' (예제)

2. Two-Tail Test : $H_{1}$ : '표본집단의 평균은 모집단 평균과 같지 않다'

3. One-Tail Test(Right) : $H_{1}$: '표본집단의 평균은 모집단 평균보다 크다'

 

표준정규분포에서 확률을 계산하는 적분값을 p-value라고 한다. 

p-value에 대한 포스트는 다음에~

 

예제 파이썬 코드

import math
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

a = (198-200) / (24/math.sqrt(40)) #예시문제 평균 198일때의 z값
print(x)

def norm(x,mu, sigma):
    return np.exp(-(x-mu)**2/(2*(sigma**2))) / (np.sqrt(2*np.pi)*sigma)

X = np.linspace(128,272,100)
Y = norm(X,200,24)

plt.style.use('ggplot')
plt.plot(X,Y)
plt.axvline(x = 200,color = 'b')
plt.axvline(x = 198, color = 'r')

1번 결과창

import scipy.stats as stats

def standardization(x,mu,sigma):
    return (x - mu) / sigma
area = stats.norm(0,1).cdf(a) #norm(0,1)의 누적분포 함수
print('모집단 콜레스트롤 수치 평균이 200일때 표본집단 수치가 198나올 확률 {}'.format(round(area,2)))
X_norm = standardization(X,200,24)
Y_norm = norm(X_norm,0,1)

plt.style.use('ggplot')
plt.plot(X_norm,Y_norm,color = 'black')
plt.fill_between(X_norm,0,Y_norm,where = (X_norm <= a),facecolor='pink' ) #확률 면적 색채우기
plt.axvline(x = 0,color = 'b',linestyle = '--')
plt.axvline(x = a, color = 'r',linestyle = '--')

2번 결과창

z = stats.norm.ppf(.05) #ppf - percent point function 
print(round(z,2))
x_bar = (z * (24/math.sqrt(40))) + 200
print(round(x_bar,4))

plt.style.use('ggplot')
plt.plot(X_norm,Y_norm,color = 'black')
plt.fill_between(X_norm,0,Y_norm,where = (X_norm <= z),facecolor='pink' )
plt.axvline(x = 0,color = 'b',linestyle = '--')
plt.axvline(x = z, color = 'r',linestyle = '--')

3번 결과창

 

'Study > 수학과통계' 카테고리의 다른 글

시계열 데이터 Time Series Data  (0) 2020.11.01
선형회귀분석 Linear Regression , SSE, OLS  (0) 2020.10.23
Two sample t - test  (0) 2020.10.21
p-value와 t분포  (0) 2020.10.19
0. 평균과 표준편차  (0) 2020.10.14