我试图理解下面的循环,它使用表查找方法来模拟泊松分布的5000个观测值。
我不明白为什么在这里将t初始化为-1。
while的使用在这里令人困惑,因为t只有2个值,1和-1。
如果你小于f,则t = 1且xi =? 如果u大于f,则t = -1且xi = 0。 如果有人能解释我这个循环,我将不胜感激。
n=5000 #sample size
lambda=8 #parameter
u=runif(n)
x=0
for(i in 1:n){
t=-1
g=exp(-lambda) # P(X =0)
f=g # P(X ≤0)
x[i]=0
while(t<0){
if(u[i]<f)
t=1
else{
x[i]=x[i]+1
g=g*lambda/x[i] # P (X =i)
f=f+g
}
}
}# P(X≤i)
x
答案 0 :(得分:1)
正如@BondedDust所说,t
是一个标志,指示while循环是应该继续还是结束。
作为一个示例,看看它是如何工作的,您可以将样本更改为n = 3.
n=3 #sample size
lambda=8 #parameter
u=runif(n)
x=0
for(i in 1:n){
cat ("i=" , i, '\n')
t=-1
g=exp(-lambda) # P(X =0)
f=g # P(X ≤0)
x[i]=0
while(t<0){
cat (" t=" , t, '\n')
cat (" g=" , g, '\n')
cat (" f=" , f, '\n')
cat (" u[i]=" , u[i], '\n')
cat (" x[i]=" , x[i], '\n')
cat(" ", u[i] < f, '\n')
if(u[i]<f)
t=1
else{
x[i]=x[i]+1
g=g*lambda/x[i] # P (X =i)
f=f+g
}
}
}# P(X≤i)
因此,如果你运行它并查看转储,你会看到f
单调增加(g必须为正且大于0)。所以最终u [i]将小于f
且标志设置为1,比较为真,while
结束。 (但请记住它是while
。)