【问题标题】:Multinomial random generation with maximum size in each box每个盒子中具有最大尺寸的多项式随机生成
【发布时间】:2020-08-05 15:46:21
【问题描述】:

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

set.seed(1)
draw = rmultinom(n = 1, size = 1000, prob = c(67,211,264,166,144,52,2,175))

在这种情况下,大小为1000,指定放入八个盒子的对象总数(problength),prob = c(67,211,264,166,144,52,2,175) 是八个盒子的概率向量(内部归一化为总和 1)。此外,我希望c(67,211,264,166,144,52,2,175) 成为八个框中每个框的最大尺寸的向量。

但是在这种情况下,可以生成高于 c(67,211,264,166,144,52,2,175) 的数字(例如在上面的示例中,draw[7,]=4 高于 2),而我希望每个数字都小于或等于prob 中指定的每个框的最大大小,除了 drawsize = 1000

您知道任何功能或任何简单的方法吗?我找不到答案。

【问题讨论】:

    标签: r random multinomial


    【解决方案1】:

    来自wikipedia:“对于 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 2016-10-27
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多