R中用于模拟"Balls in Bins"的程序

4
我想模拟在R中给定数量的球m和固定数量的箱子n的分布。到目前为止,我一直使用Poisson近似与rpois()。这对于n个箱子中有大量球来说是一个不错的近似。
然而,rpois()只允许您指示一个速率lambda,即m/n。因此,正数箱子的数量通常小于球的数量。
是否有人知道一个函数或脚本,可以让我随机分配球到箱子里?
最终,我希望通过引导来计算-log(空箱/总箱子数)的置信区间。这个问题让我很苦恼。

1
很棒的设置。没想到会这样。 - DaveRGP
sample(n, m, replace = TRUE)的意思是从一个包含n个元素的集合中随机抽取m个元素,并允许重复抽取。 - bouncyball
3
这段代码的意思是:生成一个长度为 n,总和为 m 的多项式分布向量,其中每个元素表示在试验中观察到第 i 种结果的次数,而在试验中一共有 x 种结果。 - jeremycg
1个回答

2

我认为你需要多项分布。

这里有一个快速函数 - 我们将m个球放入n个箱子中,并给出x个结果,返回每个x次试验的指标向量:

myfunc <- function(m,n,x){
  out <- rmultinom(x,m,rep(1,n))
  -log(colSums(out == 0)/n)
}

myfunc(10,40,10)
[1] 0.1923719 0.2548922 0.2231436 0.2548922 0.2876821 0.2876821 0.2231436 0.2231436 0.2231436 0.2548922

您可以获得分位数/置信区间:
out = myfunc(10,40,1000)
quantile(out, c(0.05,0.95))
       5%       95% 
0.1923719 0.2876821 

1
大家好,非常感谢你们的帮助,这不仅回答了我的问题,还极大地加快了我的启动速度。我自己对R还比较新,但是一步一步地变得更加熟悉。准备好后,我会发布一些完成的代码。 - Svencken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接