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

时间:2015-02-21 21:21:13

标签: r for-loop simulation

我试图理解下面的循环,它使用表查找方法来模拟泊松分布的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

1 个答案:

答案 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。)