多项模拟
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)
}
}
我目前正在 运行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)
}
}