我需要使用rbinom
生成随机数,但我需要在范围内排除0。
我该怎么做?
我想要类似的东西:
k <- seq(1, 6, by = 1)
binom_pdf = dbinom(k, 322, 0.1, log = FALSE)
但我需要获取所有相关数据集,因为如果我执行以下操作:
binom_ran = rbinom(100, 322, 0.1)
我得到的值从0到100。
有什么方法可以解决这个问题吗?
由于
答案 0 :(得分:3)
假设我们有固定的参数:
p :成功的可能性
# Generate initial values
U<-rbinom(n,s,p)
# Number and ubication of zero values
k<-sum(U==0)
which.k<-which(U==0)
# While there is still a zero, . . . generate new numbers
while(k!=0){
U[which.k]<-rbinom(k,s,p)
k<-sum(U==0)
which.k<-which(U==0)
# Print how many zeroes are still there
print(k)
}
# Print U (without zeroes)
U
答案 1 :(得分:1)
除了命中和未命中方法之外,如果你想从二项式的条件分布中取样,假设成功的数量至少为1,你可以计算条件分布,然后直接从中取样。
如果X
是带参数p
和n
的二项式,则很容易理解,那么
P(X = x | X > 0) = P(X = x)/(1-p)
因此以下功能将起作用:
rcond.binom <- function(k,n,p){
probs <- dbinom(1:n,n,p)/(1-p)
sample(1:n,k,replace = TRUE,prob = probs)
}
如果您要使用相同的n
和p
多次调用上述函数,那么您可以预先计算向量probs
并只需使用函数的最后一行你需要它。
我还没有对它进行基准测试,但我怀疑当k
很小,p
不太接近0时n
时,最好采用这种方式。 }较大,但对于较大的k
较大,p
较接近0,n
较小,则上述情况可能更为可取。