如果这个问题很简单,请道歉。
想象一下,我们选择了20个球,概率为0.5+1:20/50
。
P=0.5+1:20/50
ONE=function(M,n) {
N=1:n
m=length(M)
for(j in 1:n) {
N[j]=sum(runif(m)<M)
}
N
}
mean.1=mean(ONE(P,100000))
mean.2=mean(rbinom(100000,size=20,prob=P))
在这里很容易看到,使用这两种方法都是相同的。但是当我想要计算P(X <= 5)时,其中X表示选择的球数,发生了奇怪的事情:
ONE.p=function(M,n) {
N=1:n
m=length(M)
for(j in 1:n) {
N[j]=sum(runif(m)<M)
}
sum(N<=5)/n
}
p.1=ONE.p(P,100000)
p.2=sum(rbinom(100000,size=20,prob=P)<=5)/100000
此处,p.1
几乎为0
,但p.2
估计为e-3
级。使用hist()
,我们可以看到:
hist(ONE(P,100000))
hist(rbinom(100000,size=20,prob=P))
第二个更广泛。我认为这两个提供相同的计算。但我对结果感到困惑。任何帮助表示赞赏。
答案 0 :(得分:0)
观察次数与每次观察的试验次数之间存在差异。 rbinom
假设在每次观察中,概率是相同的,但不同观察值之间的概率可能不同。在ONE
函数中,您完全假定为对位。以下是这种差异的一个小例子:
# 2 observations of size 2.
# in the first observation, both trials have 0 probability,
# in the second observation, both trials have probability 1.
rbinom(2, 2, 0:1)
# replicate 2 observations of size 1 twice.
replicate(2, sum(rbinom(2, 1, 0:1)))
平均值是相同的,因为总和是相同的。
Nsims <- 100000
sum(rbinom(Nsims*20, 1, prob=P))
sum(rbinom(20, Nsims, prob=P))
sum(rbinom(Nsims, 20, prob=P))
# this is different because it only uses P[1]
sum(rbinom(1, 20*Nsims, prob=P))
因此,如果您想使用rbinom
执行您的功能,请按以下步骤操作:
require(ggplot2)
require(reshape2)
Nsims <- 100000
df <- data.frame(v.ONE = ONE(P,Nsims),
v.replicate = replicate(Nsims, sum(rbinom(20, size=1, prob=P))),
v.size20 = rbinom(Nsims, size=20, prob=P))
df.melt <- melt(df, measure.vars=c("v.ONE", "v.replicate", "v.size20"))
ggplot(df.melt, aes(factor(value), fill=variable)) + geom_histogram(position="dodge")