多项模拟

Multinomial Simulation

我目前正在 运行R 中进行 100 次多项式模拟,结果分别为 2、3、4、5,每个都有一定的概率。我的 objective 是抽 120 次,每次抽到上述结果之一。最后,我总结了模拟的结果。我已经能够使用以下代码紧凑地实现这一点:

> y<-c(2,3,4,5)
> replicate(100, sum(rmultinom(120,size=1,prob=c(0.1,0.2,0.6,0.1))*y))

但是,我想添加额外的条件,如果结果 5(概率为 0.1 的最后一行)在任何模拟中被绘制 10 次 运行 然后停止模拟(120 次绘制)并简单地添加结果如上。

如能提供有关如何在上述代码中加入此条件的任何帮助,我们将不胜感激。

也许有更好的方法来完成 OP 的要求,但我相信以下方法可以做到。

set.seed(4062)    # Make the results reproducible

y <- c(2, 3, 4, 5)
n <- 100
m <- integer(n)

for(i in 1:n){
    r <- rmultinom(120, size = 1, prob = c(0.1, 0.2, 0.6, 0.1))*y
    if(sum(r == 5) >= 10){
        r <- apply(r, 2, function(x) x[x != 0])
        j <- which(r == 5)[10]
        m[i] <- sum(r[seq_len(j)])
    }else{
        m[i] <- sum(r)
    }
}