@Henry 와 마찬가지로 귀하의 솔루션이 Monte Carlo라고 생각하지 않습니다. 분명히, 당신은 배포판에서 샘플링하지만 데이터 생성 프로세스를 모방하는 것과는별로 관련이 없습니다. Monte Carlo를 사용하여 이론적 인 솔루션이 올바르다는 것을 누군가에게 확신 시키려면 데이터 생성 프로세스를 모방하는 솔루션을 사용해야합니다. 나는 그것이 다음과 같은 것이라고 상상할 것입니다 :
boxes <- list(
c(0, 0),
c(0, 1),
c(1, 1)
)
count_successes = 0
count_valid_samples = 0
for (i in 1:5000) {
sampled_box <- unlist(sample(boxes, 1)) # sample box
sampled_balls <- sample(sampled_box) # shuffle balls in the box
if (sampled_balls[1] == 1) { # if first ball is golden
if (sampled_balls[2] == 1) { # if second ball is golden
count_successes = count_successes + 1
}
count_valid_samples = count_valid_samples + 1
}
}
count_successes / count_valid_samples
또는 "벡터화 된"코드 사용 :
mean(replicate(5000, { # repeat 5000 times, next calculate empirical probability
x <- boxes[[sample(3, 1)]] # pick a box
if (x[sample(2, 1)] == 1) # pick a ball, check if it is golden
return(sum(x) == 2) # check if you have two golden balls in the box
else
return(NA) # ignore if sampled ball is silver
}), na.rm = TRUE) # not count if silver
첫 번째 공이 이미 그려져 있고 황금색이라는 사실을 조건으로하므로 위의 코드는 단순히 두 개의 상자 boxes <- list(c(0, 1), c(1, 1))
를 사용한 다음 샘플링 x <- boxes[[sample(2, 1)]]
할 수 있으므로 1/3을 만들지 않기 때문에 코드가 더 빠릅니다. 우리가 할인하는 빈 실행. 그러나 문제가 간단하고 코드가 빠르게 실행되므로 전체 데이터 생성 프로세스를 명시 적으로 시뮬레이션하여 결과가 올바른지 "확실히"확인할 수 있습니다. 게다가이 단계는 두 경우 모두 동일한 결과를 생성하므로 필요하지 않습니다.
x <- boxes[[sample(3, 1)]]
3 개의 상자에서 상자를 가져 오라는 의미입니까? 그렇다면 이미 금 공을 고른 것을 알고 왜 필요한가?