R로 간단히 구현한 큰 수의 법칙 간접 증명

R을 이용해서 큰 수의 법칙을 간단한 프로그래밍을 통해 간접적으로 증명해 보는 테스트 입니다.

일단 큰 수의 법칙은 다음과 같은데요.

간단히 설명하면 어떤 실제 사건의 수학적 확률이 E(X)라고 할 때 실제사건의 표본의 수를 무한대로 늘리면 실제 사건의 확률도 수학적 확률가 점점 같아 진다 라는 법칙입니다.

동전을 가지고 예를 들어 보면 동전의 앞이 나올 수학적 확률은 1/2 입니다.그런데 동전을 10번 정도 던져 보면 앞이 7번 뒤가 3번 정도 나올 수도 있겠지요.

이 때 동전을 100번 정도 던져 보면 결과가 좀더 수학적 확률과 비슷한 앞52 뒤48 정도 나올 수 있겠고이 횟수를 1000회 10000회 계속 늘리면 늘릴 수록 결국에는 수학적 확률 1/2에 접근 해 나간 다는 것입니다.

아무튼 서론은 이 정도 하고요. R에는 다양하게 표본을 샘플링 할 수 있는 함수 들이 있는데

그 중에서 rnorm 이라는 함수는 표준정규분포에 따라 숫자를 생성 해 주는 함수입니다. 이 함수의 평균의 0이고 표준편차는 1이기 때문에 결론적으로 이 함수를 사용 했을 때 이 함수의 값을 i라고 할 때

-1 < i < 1 보다는 작게 생성되는 비율이 아래의 정규 분포표에서의 중심극한정리에 따르면

-1시그마에서 1시그마 사이의 값인 64.2% 이므로 i의 발생 확률이 64.2%에 근접해 지면

큰 수의 법칙을 간접적으로 증명 했다고 볼 수 있습니다.

자 이제 바로 R코드로 넘어 가겠습니다.

> N <- 5

> counter <- 0

> for(i in rnorm(N)){

+ if(i > -1 & i < 1){

+ counter <- counter + 1

+ }

+ }

>

> counter / N

[1] 0.8

# 해석

rnorm 함수로 생성된 5개의 표본 중 -1 < i < 1 사이에 들어가는 표본의 비율이 약 80%입니다.

> N <- 10

> counter <- 0

> for(i in rnorm(N)){

+ if(i > -1 & i < 1){

+ counter <- counter + 1

+ }

+ }

>

> counter / N

[1] 0.7

# 해석

rnorm 함수로 생성된 10개의 표본 중 -1 < i < 1 사이에 들어가는 표본의 비율이 약 70%입니다.

> N <- 100

> counter <- 0

> for(i in rnorm(N)){

+ if(i > -1 & i < 1){

+ counter <- counter + 1

+ }

+ }

>

> counter / N

[1] 0.72

# 해석

rnorm 함수로 생성된 100개의 표본 중 -1 < i < 1 사이에 들어가는 표본의 비율이 약 72%입니다.

> N <- 1000

> counter <- 0

> for(i in rnorm(N)){

+ if(i > -1 & i < 1){

+ counter <- counter + 1

+ }

+ }

>

> counter / N

[1] 0.684

# 해석

rnorm 함수로 생성된 1000개의 표본 중 -1 < i < 1 사이에 들어가는 표본의 비율이 약 68.4%입니다.

> N <- 100000

> counter <- 0

> for(i in rnorm(N)){

+ if(i > -1 & i < 1){

+ counter <- counter + 1

+ }

+ }

>

> counter / N

[1] 0.68243

# 해석

rnorm 함수로 생성된 10만개의 표본 중 -1 < i < 1 사이에 들어가는 표본의 비율이 약 68.2%입니다.

결론
테스트 결과의 해석 부분을 참조 하시면 확인 하 실 수 있는데 사건의 시행 횟수를
5회, 10회, 100회, 1000회, 10만회에 걸쳐 늘리면 늘릴 수록 표준정규분포 곡선의
68.2%에 근접하는 값이 나오는 것을 확인 할 수 있습니다.
즉, 결과적으로
큰 수의 법칙에 맞게 결과가 발생 함을 간단한 코드를 통해 확인했습니다.

References

https://www.udemy.com/r-programming/