多项模拟

时间:2018-08-22 15:48:29

标签: r conditional simulation multinomial

我目前在R中运行100次多项式仿真,结果2、3、4、5都有一定的概率。我的目标是进行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次绘制),并简单地按上述方法添加结果。 / p>

任何有关如何将上述条件纳入上述代码的帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

也许有更好的方法可以执行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)
    }
}