从带有样本的多项分布中抽取一个巨大的样本(1e09)

ste*_*ffi 0 r random-sample

我想从多项分布中抽样.我会通过使用示例并指定一些概率来做到这一点.例如:我有3个类别,我想抽样10次.

> my_prob = c(0.2, 0.3, 0.5)
> x = sample(c(0:2), 100, replace = T, prob = my_prob)
> head(x)
[1] 2 0 2 1 1 2
Run Code Online (Sandbox Code Playgroud)

我的设置现在仅在以下方面有所不同:我想抽样很多(例如1e09)数字.实际上我只对每个类别的频率感兴趣.所以在上面提到的例子中,这意味着:

> table(x)
x
 0  1  2 
27 29 44 
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何尽可能高效地计算它?

谢谢,斯蒂菲

Max*_*Max 6

你需要rmultinom.

my_prob <- c(0.2,0.3,0.5)
number_of_experiments <- 10
number_of_samples <- 100
experiments <- rmultinom(n=number_of_experiments, size=number_of_samples, prob=my_prob)
experiments

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
     [1,]   14   18   15   19   14   17   23   18   24    15
     [2,]   33   34   36   30   40   30   27   38   24    30
     [3,]   53   48   49   51   46   53   50   44   52    55
Run Code Online (Sandbox Code Playgroud)