본문 바로가기

통계 | 데이터과학 | R

6-1. 중심극한정리 with R

 


이번편에서는 R로 실제 중심극한정리가 어떻게 구현되는지 포스팅하고자 한다. 


 

1. 유니폼 분포에서 중심극한 정리 확인하기

10000개의 유니폼 분포를 따르는 자료에서  5개의 표본을 10000개 뽑아서 그 평균에 대한 분포를 확인해보자.

 

 

0에서 10까지 유니폼 분포를 따르는 자료를 하나 생성하여 히스토그램을 그려본다

 

hist(runif(10000)*10, main = "")

 

 

means 변수에 10000개의 숫자 공간을 입력한 후 해당 변수에 5개 표본의 평균 값을 적재한 후 means 변수의 히스토그램을 그린다. 

means 변수는 평균을 기준으로 종 모양의 정규분포 형태를 띄는 것을 알 수 있다. 

 

means <- numeric(10000)

for(i in 1:10000){
  
  means[i] <- mean(runif(5)*10)
  
}

hist(means, ylim = c(0,1600))

 

 

실제로 정규분포하는지 QQ plot을 그려보면 정규 분포에 근사함을 알 수 있다. 

 

qqnorm(means); qqline(means)

 

 

 

 

2. 표본 수에 따른 분포 변화 확인

이번에는 표본 수에 따라 표본 분포가 어떻게 변화하는지 확인해보자.

 

 

1에서 5000 사이의 수를 가지는 임의의 수 1000개를 추출하여 모집단을 만들었다. 

그 후 samp_mean에 5개의 표본의 평균값을 1000회 추출하여 히스토그램을 그렸다.  

다소 투박한 정규 분포가 그려지는 것을 확인 할 수 있다. (2000 ~ 3000 사이에 가장 많은 표본 평균 데이터가 존재한다)

 

sample_data <-  data.frame(sample(1:5000,1000))

hist(sample_data$sample)


samp_mean <- NA

for (i in 1:1000) {

  samp_mean[i] <- mean(sample_data[sample(nrow(sample_data),5),])

  i+1
  
}

hist(samp_mean)

 

 

이번엔 100개씩 표본을 뽑아서 1000번 표집한 후 평균값에 대한 히스토그램을 그려보았다. 

위의 케이스보다는 보다 촘촘한 정규분포 형태를 확인할 수 있다. (2400 ~ 2600 사이에 가장 많은 표본 평균 데이터가 존재한다)

 

samp_mean_100 <- NA

for (i in 1:1000) {
  
  samp_mean_100[i] <- mean(sample_data[sample(nrow(sample_data),100),])
  
  i+1
  
}


hist(samp_mean_100)

 

 

 

 

 


Takeaways

-

 

 

 

 

참고자료

1. 마이클 크롤리, THE R BOOK 2nd edition, 에이콘, 359~360p 

2. 피터 브루스, 앤드루 브루스, 데이터 과학을 위한 통계, 한빛미디어, 76~77p