본문 바로가기
드디어 모집단 평균을 구간으로 추정 해보자 으쌰

추정에 대해서 말하자면, 추정을 한다는 것은 모수(Parameter, Θ)를 추정한다는 의미입니다. 수수께끼로 가득한 모집단의 모수 추정하는 본격적인 이야기에 돌입하게 되는 조그마한 푯말 같은 지점입니다. 

이것을 지나고 나면, 허둥대는 법 없이 척척 매끄럽게 모집단의 평균을 구간추정할 수 있지 않을까 생각해봅니다. 

"그래서 말인데" 헷갈리면 안되니까, 모평균을 추정하기 전에 이제까지 보아왔던 여러 가지 값들을 다시 한번 정리하려고 합니다.

이렇게 되어있는데 notation에 매우 익숙해져야 합니다. 그렇지 않으면 정말 헷갈려진다니까요. - 마지막의 표본 평균들의 집단은 중심극한정리 입니다요 -  
이 notation에 익숙 할거라 생각하고, 이제 진짜 처음으로 추정이라는 것을 해 보는 건 어떨까 합니다. 심호흡을 하고요.

어떤 $\bar{X}$를 관측했는데, 그것은 중심극한정리에 의해서 Gaussian 분포의 outcome이고, 그 관측값이 Gaussian분포에서 어디에 위치하는지 계산하는 것입니다. 관측값을 Z값으로 표준화하는 것이죠. 너무 쉽죠? 한눈에 들어옵니다.

그렇긴 해도, 이걸 손쉽게 푸는 방법이 있는데 이걸 예를 통해서 소개하려고 합니다.

예) 온도를 측정하는데 굉장히 잘 측정되는 온도계로 30번 측정했더니 (n=30, N=1) 평균이 20℃이었습니다. 95% 신뢰도로 평균 온도를 구간 추정해 봅시다. (그냥 이것은 원리 파악이니까 표본 평균은 Gaussian 분포를 하고요, 표준오차가 5라고 가정하고 해 봐요. 잘 기억하고 있겠지만, 표준편차가 아니라 표준오차입니다.)

이게 무슨 소리지? 싶은 문제처럼 보이는데, (실은 전혀 어렵지 않고, 간단 간단합니다). 표본 평균이 Gaussian 분포한다고 했으니, 종모양으로 분포하겠군요.

그런데, 우리가 20℃를 관측했습니다. 그렇다면 20℃는 우리의 신뢰구간 안에 포함되어야 한다는 사실입니다. 그것만 알면 됩니다. 이렇게 쉽게 간단하게 한 줄로 넘어갈 얘기가 아니라 내 인생의 세 번째 여자친구와 첫데이트처럼 꼭 기억해야 합니다. "엇, 이 양반이?" 아. 세번째 여자 친구가 없었다면 미안합니다. 꽤나 순정파로군요. 

그러니까 upper bound는 20℃보다 커야 하고, lower bound는 20℃보다 작아야 합니다. 
$$
\begin{align*}
\mu + 1.96\cdot 5 \geq 20℃ \\
\mu - 1.96\cdot 5 \leq 20℃ 
\end{align*}
$$

그러니까 이 두 개의 부등식을 만족하는 구간은
$$ 10.2 \le \mu \le 29.8 $$ 이 되겠습니다. 

이 두개의 부등식을 만족하는 구간 안에 평균이 있을 확률이 95%라고 보면 크게 무리가 없을 텐데 사실은 이것의 의미가 조금 다르긴 합니다. 정확하게 말하면 이런 식으로 표본을 100번 샘플링했을 때 모평균을 포함할 신뢰구간이 95번 나온다는 의미입니다. -라고 썼지만, 뭐, 그냥 일단은 골치 아프니까 그렇구나 정도로 넘어가 주세요.

예를 더 들면 조금 마음이 편해지니까, 하나 더 들어보면, 평균값을 추정하는데, 4개의 데이터를 관측했을 때, 이 4개의 데이터의 평균은 200, 표준편차는 10이었을 때 모평균을 95% 신뢰도로 추정한다면. 이때 $\bar{X}=200, \sigma=10, n=4$ 이군요. 그러면 중심극한정리를 이용해서 모평균은 $\mu$를 중심으로 $\pm1.96 \cfrac{\sigma}{\sqrt{n}}$일텐데, 이떄 우리가 관측한 표본의 평균 200은 이 구간 안에서 관측되면 됩니다.  

그러니까 
$$
\begin{align*}
\mu +z_{2.5\%}\cfrac{10}{\sqrt{4}} \geq 200,\\  \mu -z_{2.5\%}\cfrac{10}{\sqrt{4}} \leq 200 \\
\end{align*}
$$
이렇게 표현할 수 있는데 이때 $z_{2.5\%}$는 95% 신뢰도를 위해서 오른쪽 2.5%의 Gaussian 분포의 값이고, 이게 1.96입니다. 결국, 
$$
\begin{align*}
\mu +1.96\cfrac{10}{\sqrt{4}} \geq 200,\\  \mu -1.96\cfrac{10}{\sqrt{4}} \leq 200
\end{align*}
$$
의 부등식을 만족하면 됩니다. 

흠 그러니까 이렇게 어느 정도 추정이 되겠군요.

그런데, 여기에서 웃기는 일이 벌어지는데 우리가 모집단의 분산을 알리가 없습니다. 모집단의 평균도 모르는데, 모집단의 분산을 알리가 있을까요. 그냥 연습과 원리를 깨닫는 방법으로는 매우 유용한 방법입니다. 조건은 즉, 표본 평균은 완벽한 정규분포를 이룬다는 가정 하에서 구한 신뢰구간 추정량이라는 것입니다. 

일단은, 이 방법을 알고 있는 것만으로도 그 원리는 깨우쳤다고 봐야 하지 않을까요.라고 자기만족 행복 회로를 돌려보지만요. 일단은 조금 더 현실적으로 어떤지 잘 살펴보는 것이 명백하게 더 나을 것 같습니다. 

다시 한번 말하지만, 모평균을 추정할 때, 당연히 우리는 σ(모표준편차)를 알리가 없습니다. 그러니까, s(표본표준편차)로 대치하면 t분포가 된다는 사실을 잘 기억해 봐요. 
이때는 통계량 $\cfrac{\bar{X}-\mu}{\dfrac{s}{\sqrt{n}}}$이 t분포를 따른다는 점을 기억하면 더욱 좋습니다. - 사실 표본 평균의 표준 편차가 $\frac{\sigma}{\sqrt{n}}$이니까, z분포에서 표준편차σ만 표본 표준편차 s로 바꾼 것입니다. 

그렇긴 한데, 왜죠? 이전에 분산의 불편 추정량을 사용해서 하면 되지 않을까? 맞습니다요. 표본의 크기가 클 때는 모분산 대신에 표본의 분산(불편 추정량)으로 대신 사용해서 방금 했던 방법을 그대로 사용합니다. 

그래서 분산의 불편 추정량(표본 분산, s²)을 사용하는 표본 평균의 분포가 Gaussian과 닮은 t-분포라는 것 입니다. 모표준편차를 모를 때, 모표준편차 대신에 분산의 불편추정량을 이용하게 되면 표본평균의 분포가 Gaussian을 따른다고 가정하기보다는, 더 극단치가 나올 확률이 더 큰 모양새의 정규분포 비슷한 분포가 될 것이라는 가정이 더 합리적이라는 뭐 그런 것이죠.

그래서 이때는 t-분포에서 분산의 불편 추정량을 이용해서 평균의 추정하게 됩니다. 당연히 자유도는 n-1이겠지요? 

불편추정량을 이용해서 모분산을 대신하게 되면 원래 $\cfrac{\sigma^2}{n}$ 인데, $\cfrac{s^2}{n}$가 됩니다. ($s^{2} = \frac{1}{n-1} \sum \limits_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}$, n-1자유도로 표본 분산을 계산하는 것 잊지 마세요.)

그러니까, t분포를 이용하게 되면 모평균으로부터 $\pm t_{2.5\%, dof}\cfrac{s}{\sqrt{n}}$ 사이에 관측값이 있으면 됩니다. 

예를 들어, 
어떤 모집단에서 표본 500개를 추출해서 표본 평균이 100,000이 나왔고, 표본 분산이 2,000,000이 나왔다고 한다면 

$$
\begin{align*}
\mu + t_{2.5\%, 499}\cfrac{\sqrt{2000000}}{\sqrt{500}} \geq 100000 \\
\mu - t_{2.5\%, 499}\cfrac{\sqrt{2000000}}{\sqrt{500}} \leq 100000
\end{align*}
$$

을 만족하는 범위를 찾으면 됩니다. 여기에서 $t_{2.5\%,499}$ 이게 좀 어렵게 느껴질 수 있지만 자유도(n-1)는 499, 확률이 2.5%인 t값을 찾으면 됩니다. 

괜찮았나요?

t값을 테이블에서 찾는 방법은 자유도와 확률을 가지고 거꾸로 t값을 찾게 되는데, 아래와 같은 table에서 찾습니다. 
(ν : 자유도, α : 유의수준, 1-α : 신뢰수준)

예를 들어, 6개의 표본에서 상위 5%가 나오는 t값을 구하려면 세로축 자유도 = 5, 상위 5%니까, 0.05을 찾으면 2.0150입니다. 

t값을 테이블에서 찾으려면 조금 괴로우니까, 

from scipy import stats
#Studnt, n=6, p<0.05%, Single tail (자유도 5)
print (stats.t.ppf(1-0.05, 5))
→ 2.015048372669157

# 다른 예로는 
#Studnt, n=1000, p<0.05, 2-tail, (자유도 999)
print (stats.t.ppf(1-0.025, 999))
→ 1.9623414611334487

#Studnt, n=1000, p<0.05%, Single tail (자유도 999)
print stats.t.ppf(1-0.05, 999)
→ 1.646380345427535

이런 식으로 곧바로 계산할 수 있습니다. 

본문의 예를 계산하려면 

stats.t.ppf(1-0.025, 499) = 1.9647293909876649

이니까, 대략 1.96을 이용하면 되겠네요. - 표본의 크기가 커지니까, z분포와 비슷한 값이 나오는군요 -

여기에서 ppf는 percent point function이라고 해서, 확률을 Percent로 넣으면 그때의 Random Variable의 값을 return하는 함수입니다. 사실상 분포를 표로 찾아볼 때는 확률을 정하고 (신뢰수준) 그때의 Random Variable의 값을 찾는 것이니까 사실상 ppf는 엄청나게 유용한 함수입니다. 

정리하면 모집단 평균의 구간 추정을 할 때, σ가 알려져 있지 않을 경우 (당연히 현실세계에서의 이야기겠군요) s를 σ의 추정치로 사용하고, μ의 구간 추정은 t분포에 기초한다로 정리할 수 있겠습니다. 

 자유도가 30을 초과하면 t값은 정규분포 z의 값과 거의 같아지기 시작합니다. 결국 표준정규분포의 z는 t테이블의 ∞자유도 값으로 대치할 수 있습니다.

사실 구간으로 평균을 추정했지만 점추정이라는 것도 있습니다. 점추정 방법에는 여러가지가 있습니다만, 점추정 방법은 다음 기회에 다루도록 하겠습니다. 


친절한 데이터 사이언스 강좌 글 전체 목차 (링크) -



댓글





친절한 데이터 사이언스 강좌 글 전체 목차 (링크) -