我正在尝试模拟r中的复合泊松过程。该过程由$ \ sum_ {j = 1} ^ {N_t} Y_j $定义,其中$ Y_n $是i.i.d序列独立的$ N(0,1)$值,$ N_t $是参数$ 1 $的泊松过程。我试图在没有运气的情况下模拟这个。我有一个算法来计算如下: 将cPp从0模拟到T:
发起:$ k = 0 $
重复$ \ sum_ {i = 1} ^ k T_i< T $
设置$ k = k + 1 $
模拟$ T_k \ sim exp(\ lambda)$(在我看来是$ \ lambda = 1 $)
模拟$ Y_k \ sim N(0,1)$(这只是一个特殊情况,我希望能够将此更改为任何分发)
轨迹由$ X_t = \ sum_ {j = 1} ^ {N_t} Y_j $给出,其中$ N(t)= sup(k:\ sum_ {i = 1} ^ k T_i \ leq t)$
有人可以帮我在r中模拟这个,以便我可以绘制过程吗?我试过了,但无法完成它。
答案 0 :(得分:2)
使用cumsum
表示确定时间N_t和X_t的累计总和。此说明性代码指定模拟的次数n
,模拟n.t
中的时间和x
中的值,以及(显示已完成的内容)绘制轨迹。< / p>
n <- 1e2
n.t <- cumsum(rexp(n))
x <- c(0,cumsum(rnorm(n)))
plot(stepfun(n.t, x), xlab="t", ylab="X")
该算法由于依赖于低级优化功能,因此速度很快:我测试它的六年制系统每秒将产生超过三百万(时间,值)对。
这通常足以用于模拟,但它并不能完全满足问题,它要求生成模拟到时间T.我们可以利用前面的代码,但解决方案有点棘手。它计算了在时间T之前在泊松过程中将发生多少次的合理上限。它产生到达间隔时间。这包含在一个循环中,该循环将在(罕见)事件中重复实际未到达时间T的过程。
额外的复杂性不会改变渐近计算时间。
T <- 1e2 # Specify the end time
T.max <- 0 # Last time encountered
n.t <- numeric(0) # Inter-arrival times
while (T.max < T) {
#
# Estimate how many random values to generate before exceeding T.
#
T.remaining <- T - T.max
n <- ceiling(T.remaining + 3*sqrt(T.remaining))
#
# Continue the Poisson process.
#
n.new <- rexp(n)
n.t <- c(n.t, n.new)
T.max <- T.max + sum(n.new)
}
#
# Sum the inter-arrival times and cut them off after time T.
#
n.t <- cumsum(n.t)
n.t <- n.t[n.t <= T]
#
# Generate the iid random values and accumulate their sums.
#
x <- c(0,cumsum(rnorm(length(n.t))))
#
# Display the result.
#
plot(stepfun(n.t, x), xlab="t", ylab="X", sub=paste("n =", length(n.t)))