R 中循环的解释 - 泊松变量的模拟

interpretation of loop in R - simulation of Poisson variable

我试图理解下面的循环,它使用 table-look up 方法模拟泊松分布的 5000 个观测值。

我不明白为什么t在这里初始化为-1。

while 的使用在这里令人困惑,因为 t 只有 2 个值,1 和 -1。

如果u小于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

正如@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。)