使用 R 生成泊松过程

发布于 2024-11-15 01:51:36 字数 116 浏览 3 评论 0原文

我想生成一个过程,其中每一步都有一个泊松随机变量的实现,应该保存该实现,然后应该实现下一个泊松随机变量并将其添加到之前所有实现的总和中。此外,该过程的每一步都应该有可能停止。希望这对你们有意义...任何想法都值得赞赏!

I want to generate a process where in every step there is a realisation of a Poisson random variable, this realisation should be saved and then it should be realize the next Poisson random variable and add it to the sum of all realisations before. Furthermore there should be a chance that in every step this process stops. Hope that makes sense to you guys... Any thought is appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泪之魂 2024-11-22 01:51:36

更紧凑的是,为停止前实现的总步数选择一个几何分布的随机数,然后使用 cumsum 来对许多泊松偏差求和:

stopping.prob <- 0.3  ## for example
lambda <- 3.5         ## for example
n <- rgeom(1,1-stopping.prob)+1  ## constant probability per step of stopping
cumsum(rpois(n,lambda))

More compactly, pick a single geometrically distributed random number for the total number of steps achieved before stopping, then use cumsum to sum that many Poisson deviates:

stopping.prob <- 0.3  ## for example
lambda <- 3.5         ## for example
n <- rgeom(1,1-stopping.prob)+1  ## constant probability per step of stopping
cumsum(rpois(n,lambda))
故事灯 2024-11-22 01:51:36

您对模拟的参数非常模糊,但是这是怎么样的?

随机泊松数的 Lambda。

lambda <- 5

这是函数退出时的阈值。

th <- 0.999

创建一个长度为 1000 的向量。

bin <- numeric(1000)

运行该死的东西。它基本上是掷“骰子”(生成的值在 0 到 1 之间)。如果值低于th,则返回随机泊松数。如果该值高于th(但不等于),则该函数停止。

for (i in 1:length(bin)) {
    if (runif(1) < th) {
        bin[i] <- rpois(1, lambda = lambda)
    } else {
        stop("didn't meet criterion, exiting")
    }
}

删除零(如果有)。

bin <- bin[bin != 0]

您可以使用 cumsum 来累积值的总和。

cumsum(bin)

You are very vague on the parameters of your simulation but how's this?

Lambda for random Poisson number.

lambda <- 5

This is the threshold value when the function exits.

th <- 0.999

Create a vector of length 1000.

bin <- numeric(1000)

Run the darn thing. It basically rolls a "dice" (values generated are between 0 and 1). If the values is below th, it returns a random Poisson number. If the value is above th (but not equal), the function stops.

for (i in 1:length(bin)) {
    if (runif(1) < th) {
        bin[i] <- rpois(1, lambda = lambda)
    } else {
        stop("didn't meet criterion, exiting")
    }
}

Remove zeros if any.

bin <- bin[bin != 0]

You can use cumsum to cumulatively sum values.

cumsum(bin)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文