R 每个框中具有最大大小的多项式随机生成

R 每个框中具有最大大小的多项式随机生成,r,random,multinomial,R,Random,Multinomial,在R中,我想生成一个给定大小N的多项式分布随机数向量,例如使用rmultinom,但每个K框都有一个最大大小。 例如: set.seed(1) draw = rmultinom(n = 1, size = 1000, prob = c(67,211,264,166,144,52,2,175)) 在这种情况下,大小为1000,指定放入八个框中的对象总数(prob的length),以及prob=c(67211264166144,52,2175)八个框的概率向量(内部标准化为和1)。此外,我希望c(

在R中,我想生成一个给定大小N的多项式分布随机数向量,例如使用
rmultinom
,但每个K框都有一个最大大小。 例如:

set.seed(1)
draw = rmultinom(n = 1, size = 1000, prob = c(67,211,264,166,144,52,2,175))
在这种情况下,大小为
1000
,指定放入八个框中的对象总数(
prob
length
),以及
prob=c(67211264166144,52,2175)
八个框的概率向量(内部标准化为和1)。此外,我希望
c(67211264166144,52,2175)
是八个框中每个框的最大大小的向量

然而,在这种情况下,可以生成高于
c(67211264166144,52,2175)
(例如,在上面的示例中,
draw[7,]=4
大于2)的数字,而我希望每个数字小于或等于
prob
中指定的每个框的最大大小,除了
绘制
size=1000

你知道有什么函数或简单的方法吗?我找不到答案。

来自:“对于n个独立试验,每个试验都导致k个类别中的一个类别的成功,每个类别都有一个给定的固定成功概率,多项式分布给出了不同类别成功次数的任何特定组合的概率。”

这里的关键字是独立的。对每个类别的绘制次数的限制意味着采样不是独立的。如果你的问题是多项式问题,那么所有数字都可以从方框7中提取出来是可能的,尽管可能性很小。这不是您想要的,因此不能使用
rmultinom

这里有一种不同的方法:

# vector of item counts
m <- c(67,211,264,166,144,52,2,175)
# expand the item counts in to a single vector with i repeated m[i] times
d <- unlist(lapply(1:length(m), function(x) rep(x, m[x])))
# sample from d without replacement
s <- sample(d, size=1000, replace=FALSE)
# count the number of items of each type were sampled
table(factor(s))

  1   2   3   4   5   6   7   8 
 63 197 242 153 135  48   2 160
#项目计数向量
M