以下问题告诉我们如何从ρ(到达间隔时间)和τ(到达时间)逐步生成泊松过程。
在讲座中介绍的理论结果之一给出了以下直接模拟泊松过程的方法:
• 让τ0 = 0。 • 生成独立同分布的指数随机变量ρ1,ρ2等等。 • 对于n = 1, 2等,令τn = ρ1 + … + ρn。 • 对于每个k = 0, 1等,当τk ≤ t < τk+1时,令Nt = k。
使用该方法,在区间[0,20]上生成一个λ为0.5的泊松过程(Nt)t。
生成10000个λ = 0.5的泊松过程(Nt)t的实现,并使用您的结果估计E(Nt)和Var(Nt)。将估计值与理论值进行比较。
首先,我使用R中的rexp()函数生成了ρ的值。
以下函数是用于在给定k值时找到Nt=k值的。比如说,当k为7时等等。
在讲座中介绍的理论结果之一给出了以下直接模拟泊松过程的方法:
• 让τ0 = 0。 • 生成独立同分布的指数随机变量ρ1,ρ2等等。 • 对于n = 1, 2等,令τn = ρ1 + … + ρn。 • 对于每个k = 0, 1等,当τk ≤ t < τk+1时,令Nt = k。
使用该方法,在区间[0,20]上生成一个λ为0.5的泊松过程(Nt)t。
生成10000个λ = 0.5的泊松过程(Nt)t的实现,并使用您的结果估计E(Nt)和Var(Nt)。将估计值与理论值进行比较。
首先,我使用R中的rexp()函数生成了ρ的值。
rhos <-function(lambda, max1)
{
vec <- vector()
for (i in 1:max1)
{
vec[i] <- rexp(0.5)
}
return (vec)
}
然后,我通过逐步累加 ρ 来创建 τ。
taos <- function(lambda, max)
{
rho_vec <- rhos(lambda, max)
#print(rho_vec)
vec <- vector()
vec[1] <- 0
sum <- 0
for(i in 2:max)
{
sum <- sum + rho_vec[i]
vec[i] <- sum
}
return (vec)
}
以下函数是用于在给定k值时找到Nt=k值的。比如说,当k为7时等等。
Ntk <- function(lambda, max, k)
{
tao_vec <- taos(lambda, max)
val <- max(tao_vec[tao_vec < k])
}
y <- taos(0.5, 20)
x <- seq(0, 20-1, by=1)
plot(x,y, type="s")
输出:
正如您所看到的,泊松过程的图形是空白的,而不是一个阶梯形。
如果我将rexp
更改为exp
,则会得到以下输出:
.. 这是一个阶梯函数,但所有步骤都相等。
为什么我的源代码没有产生预期的输出?
rexp
的正确参数。你正在编写 C-as-R 代码。R 具有矢量化思维方式,并希望您一次生成所有随机抽样。请参阅?rexp
获取一些示例。 - MichaelChiricorexp(n=1, rate=0.5)
;rexp(0.5)
返回一个长度为0的数值向量... - Ben Bolker