본문 바로가기
통계

[답답해서 내가 정리한다] 중심극한정리 central limit theorem

by 프들이 2023. 10. 16.
반응형

일단 우리가 아는 중심극한정리를 여기에 적어 본다.

표본평균의 표본분포에 관한 성질

모집단의 분포가 정규분포 $N(\mu,\sigma^2)$ 일 때 표본평균 $\bar{X}$ 는 정규분포 $N(\mu,\frac{\sigma^2}{n})$ 을 따른다. 한편 모집단의 분포가 정규분포가 아닌 경우에는 위의 사실이 성립하지 않는다고 한다. 하지만! 표본의 크기 n 이 충분히 클 때에는 임의의 모집단으로 부터의 표본평균이라 하더라도 그 분포가 정규분포에 가깝다는 것이 알려져 있는데 이것이 중심극한정리이다.

이것이 무슨 의미인지 간단한 python 코드와 그림으로 정리해 보겠다.

 

import numpy as np
import matplotlib.pyplot as plt
nnsize=10000
x1=np.random.normal(loc=0.0, scale=1.0,size=nnsize)
x2=np.random.normal(loc=10.0, scale=2.0,size=nnsize)
x3=np.random.normal(loc=30.0, scale=1.5,size=nnsize)
X=np.append(x1,[x2,x3])

위 코드에서 $X$라는 분포를 임의로 만들어 보았다. 대략 0, 10, 30의 평균으로 가진 정규분포 세 개가 합쳐진 분포이다.

 

def drawMeanBox(x,pp):
    props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
    mu=np.mean(x)
    pp.axvline(x=mu,color='r')
    pp.text(0.5,0.95,r'$\mu=%.2f$' %(mu), transform=pp.transAxes, fontsize=10,verticalalignment='top', bbox=props)

fig = plt.figure()
pp=fig.add_subplot(1,1,1)
X=np.append(x1,[x2,x3])
n,bins,patch=pp.hist(X,bins=1000)
print("mean is {}".format(np.mean(X)))
drawMeanBox(X,pp)

위 코드를 이용해서 그림을 그려보면 모집단 $X$의 분포가 분명하게 눈에 들어온다.

 

X 의 분포. 0, 10, 30의 평균을 가진 정규분포이다.

여기서 random sampling을 해서 표본집단을 만들어본다. 1000개씩 4번 뽑아서 별개의 4개 세트를 만들겠다. (아래 더보기에 코드참조)

더보기
fig = plt.figure()
pcont=[]
container=[]
samplesize=1000
for ii in [1,2,3,4]:
    pcont.append(fig.add_subplot(2,2,ii))
for ii in [1,2,3,4]:
    xp1=np.random.choice(X, size=samplesize)
    n,bins,patch=pcont[ii-1].hist(xp1,bins=100)
    drawMeanBox(xp1,pcont[ii-1])
    container.append([np.mean(xp1),np.std(xp1)])

모분포 $X$ 에 맞게 0, 10, 30 근처에서 샘플들이 잘 뽑힌 것을 볼 수가 있다. 즉 표본의 크기가 크다고 해서 무조건 정규분포를 따르는 것이 아니다. 그럼 도대체 뭐가 정규분포를 따른 다는 것일까?

 

그림을 잘 보면 각 4개의 표본집단의 각각의 평균을 표시해 놓았는데 13.27, 12.85, 12.95, 13.73으로 서로 약간씩 다른 것을 볼 수가 있다.

 

이번에는 4개 세트만이 아니라 1000개의 세트를 만들어보자. 이를 위해서 다음의 코드를 이용한다.

fig = plt.figure()
pcont=[]
container=[]
samplesize=1000
for ii in [1,2,3,4]:
    pcont.append(fig.add_subplot(2,2,ii))
for ii in [1,2,3,4]:
    xp1=np.random.choice(X, size=samplesize)
    n,bins,patch=pcont[ii-1].hist(xp1,bins=100)
    drawMeanBox(xp1,pcont[ii-1])
    container.append([np.mean(xp1),np.std(xp1)])

이 천 개의 표본집단의 표본평균 $\bar{X}$ 1000개의 분포는 어떻게 생겼을지를 그려보자.

 

fig,ax = plt.subplots()
n,bins,patch=ax.hist(barX[:,0],bins=20, density=True)
drawMeanBox(barX[:,0],ax)

보이는가? 모집단이 이상하게 생긴 집단이라고 하더라도 표본집단의 평균 $\bar{X}$의 분포를 그려보면 정규분포의 형태를 띤다는 것이 중심극한정리이다.

 

 

반응형

댓글