在r中模拟复合泊松过程

时间:2017-02-09 12:55:47

标签: r simulation

我正在尝试模拟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中模拟这个,以便我可以绘制过程吗?我试过了,但无法完成它。

1 个答案:

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

Figure

该算法由于依赖于低级优化功能,因此速度很快:我测试它的六年制系统每秒将产生超过三百万(时间,值)对。

这通常足以用于模拟,但它并不能完全满足问题,它要求生成模拟到时间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)))