我有一个带有观察到的 bin 计数的直方图。我想根据观察到的计数运行模拟,以了解相同数量的观察结果可能如何不同地发生。我将直方图转换为向量,并将观察到的计数作为向量的一个元素。rbinom(n, size, prob)
我使用基于 bin 频率的概率从二项式分布(来自 )生成的随机数来模拟每个 bin 。
我的问题是模拟观察计数为零的箱。当 bin 计数为零时,prob
=0,因此该 bin 的模拟计数始终为零。这是非物质的,不是我想要的。目前,我通过用 1 的 bin 计数覆盖零 bin 计数来解决这个问题。我不确定这样做的效果,所以我不知道我的模拟是否会超出我的容差。我正在寻找比我的临时方法更好或更优雅的问题解决方案。
有任何想法吗?谢谢你。
这是我的相关代码:
sim.vector <- function(x, n = length(x)) {
sum.vector <- round(sum(x), 0) # the number of observations
x.dummy <- x
x.dummy[x.dummy == 0] <- 1 # override bins with zero counts
f <- x.dummy / sum(x) # the frequency of each bin
x.sim <- rep(0, n)
while(sum.vector != sum(x.sim)) { # make sure the simulation has the same
# number of total counts as the observation
for (i in 1:n) {
p.target <- f[i] # set the probability of each bin to the frequency
x.sim[i] <- rbinom(1, sum.vector, p.target) # create a random binomial
}
}
return(x.sim)
}