몬테카를로 시뮬레이션 02

Matt Lee·2021년 10월 24일
0
post-thumbnail

이번에는 1부터 1000까지의 정수 중에서 랜덤으로 추출한 수가 3,4 또는 6으로 나누어 떨어질 확률에 대한 몬테카를로 시뮬레이션을 테스트 해 보겠습니다.

NOTE: 위에 경우에 대한 수학적 확률은 Inclusion-exclusion principle(포함배제의 원리)에서 n=3 인 케이스로

ABC=A+B+CABACBC+ABCABC=A+B+CABACBC+ABC|A \cup B\cup C|=|A|+|B|+|C|-|A\cap B|-|A\cap C|-|B\cap C|+|A\cap B\cap C||A\cup B\cup C|=|A|+|B|+|C|-|A\cap B|-|A\cap C|-|B\cap C|+|A\cap B\cap C|

계산 결과는 (333+200+1666633166+33)1000=0.467\frac{(333 + 200 + 166 - 66 - 33 - 166 + 33)}{1000} = 0.467 입니다.

몬테카를로 시뮬레이션을 통해 수확적 확률로 근사 되는지 테스트를 해 보겠습니다.

코드 설명
함수를 통해 몬테카를로 시뮬레이션의 시행과 성공을 정의 정의합니다.
num := 정수를 random으로 {1,...,1000}\{1,...,1000\}, 사이에서 한 개 추출 한 뒤 3 또는 5 또는 6으로 나누어 떨어지면 1 그렇지 않으면 0을 반환 합니다.

set.seed(7)
simdivis <- function() {
  num <- sample(1:1000, 1)
  if (num%%3==0 || num%%5==0 || num%%6==0) 1 else 0
}

코드 설명
몬테카를로 시뮬레이션의 복제를 정의 합니다.
replicate 함수를 통해 위의 코드에서 정의 된 시행을 백만번 수행 합니다. 그 후 mean 함수를 통해서 백만번 중에서 성공한 횟수의 proportion을 계산 합니다. 계산 결과는 수행을 많이 하면 할 수록(n 값을 크게 잡을 수록) 수학적 확률인 0.4670.467로 근사됩니다.

mean(replicate(1000000, simdivis()))
## [1] 0.467296

결과해석
mean(simlist)의 결과가 0.467296로 수학적 확률인 0.467로 소수점 이하 세 째 자리 까지 잘 근사되었음을 확인 할 수 있습니다. 이론적으로는 시행을 무한번으로 한다면 정확히 0.467로 수렴 됩니다.

Reference

본 포스팅은 Probability: With Applications and R 2nd Edition by Amy S. Wagaman (Author), Robert P. Dobrow ISBN-13: 978-1119692386 을 참조 하였습니다.

Book link => click here

profile
미국에 서식 중인 응용 수학과 대학원생, 아직은 잉여지만 그래도 행복 :)

0개의 댓글