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
。)
我试图理解下面的循环,它使用 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
。)