泊松过程的模拟

机器算法验证 r 数据可视化 模拟 随机过程 泊松过程
2022-03-27 11:11:11

我正在尝试使用我在随机过程教科书中找到的下一个算法来模拟复合泊松过程。

  1. S0=0
  2. 生成 iid 指数随机变量X1,X2,
  3. 对于Sn=X1++Xn,n=1,2,
  4. 对于每个对于k=0,1,,Nt=k,SktSk+1
S <- vector(mode="integer", length=100)
S[1] = 0
## Generation of Exponential random variables with parameter lambda
X <- rexp(n=100, rate=0.1)

for(n in 1:100){
  S[n] = sum(X[1:n])
}    

但是,我不清楚如何编写第步,也许我需要将整数放在两个(到达时间)之间?我对计数过程4SkNt

此外,你如何绘制它?

我有类似的东西,但我不清楚到达时间是否可以,因为在左边的第一张图中,我看到每个到达时间不一定在过程的垂直线上,而在右边所有到达时间的长度相同,我认为这与到达时间的独立性相矛盾。

nro<-10
S<-vector(mode="integer",length = nro)
S[1]=0

##Generation of Exponential random variables with parameter lambda
X<-rexp(n =nro,rate = 2)
for(n in 1:nro)
S[n]=sum(X[1:n])
S<-cumsum(X)
n_func <- function(t, S) sapply(t, function(t) sum(S < t))
t_series <- seq(0, max(S), by = max(S)/nro)

#Plot of the trajectory and add lines in the arrival times
par(mfrow=c(1,2))
plot(t_series, n_func(t_series, S),type = 
"s",ylab=expression(N[t]),xlab="t",las=1,cex.lab=0.8,main="Poisson 
   Process",cex.axis=0.8)
grid()
abline(v = S,col="red",lty=2)
plot(t_series, n_func(t_series, S),type = 
"s",ylab=expression(N[t]),xlab="t",las=1,cex.lab=0.8,main="Poisson 
 Process",cex.axis=0.8)
grid()
abline(v = t_series,col="blue",lty=4)

在此处输入图像描述

2个回答

你想得到一个给出事件计数的所以简单地做t

n_func <- function(t, S) sapply(t, function(t) sum(S <= t))
t_series <- seq(0, max(S), by = max(S)/100)
plot(t_series, n_func(t_series, S)

S基本上是样本中每个泊松事件的时间戳。因此,您只想计算在之前带有时间戳的事件的数量。t

泊松过程描述事件如何随时间发生到达间隔时间(即每个连续事件之间的时间)按指数分布。在所提供的算法中,事件发生所经过的总时间。由于您的是每个事件之间的时间,因此您可以将它们从开始到感兴趣的事件相加,以获得直到该事件的总经过时间。N_t发生的事件数。因此,该图将是一组连续整数处的水平线,其中 x 轴是时间。 SnnXiNt

这是一个简单的示例,编码为R

set.seed(3535)             # this makes the example exactly reproducible
                           # there's no need for an explicit s[0]
X = rexp(n=100, rate=0.1)  # step 2
S = cumsum(X)              # step 3
N = 0:100                  # step 4

windows()
  plot(stepfun(x=S, y=N), main="Counting Process",
       xlab="Time", ylab="Number of events")

在此处输入图像描述