why does rbinom(1,1) differ from sample(0:1,1) with the same seed?
This article is originally published at https://xianblog.wordpress.com
<pre class="default s-code-block hljs less" style="padding-left:40px;"><code>> <span class="hljs-selector-tag">set</span><span class="hljs-selector-class">.seed</span>(<span class="hljs-number">1</span>) > <span class="hljs-selector-tag">rbinom</span>(<span class="hljs-number">10</span>,<span class="hljs-number">1</span>,<span class="hljs-number">0.5</span>) <span class="hljs-selector-attr">[1]</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">0</span> > <span class="hljs-selector-tag">set</span><span class="hljs-selector-class">.seed</span>(<span class="hljs-number">1</span>) > <span class="hljs-selector-tag">sample</span>(c(<span class="hljs-number">0</span>,<span class="hljs-number">1</span>), <span class="hljs-number">10</span>, replace = TRUE) <span class="hljs-selector-attr">[1]</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">0</span> <span class="hljs-selector-tag">1</span> <span class="hljs-selector-tag">1</span></code></pre>
This rather legitimate question was posted on X validated last week, the answer being that the C codes behind both functions do not use pseudo-random generators in the same manner. For instance, rbinom
does get involved beyond a mean value of 30 (and otherwise resorts to the inverse cdf approach). And following worries about sample biases, sample
was updated in 2019 (and also seems to resort to the inverse cdf when the mean is less than 200). However, when running the above code on my machine, still using the 2018 R version 3.4.4!, I recover the same outcome:
> set.seed(1)
> rbinom(10,1,0.5)
[1] 0 0 1 1 0 1 1 1 1 0
> set.seed(1)
> sample(c(0,1), 10, replace = TRUE)
[1] 0 0 1 1 0 1 1 1 1 0
> set.seed(1)
> qbinom(runif(10),1,0.5)
[1] 0 0 1 1 0 1 1 1 1 0
> set.seed(1)
> 1*(runif(10)>.5)
[1] 0 0 1 1 0 1 1 1 1 0
Thanks for visiting r-craft.org
This article is originally published at https://xianblog.wordpress.com
Please visit source website for post related comments.