Генерировать процесс Пуассона с использованием R

#r #statistics #poisson #stochastic-process

#r #Статистика #poisson #случайный процесс

Вопрос:

Я хочу сгенерировать процесс, в котором на каждом шаге происходит реализация случайной величины Пуассона, эта реализация должна быть сохранена, а затем она должна реализовать следующую случайную величину Пуассона и добавить ее к сумме всех предыдущих реализаций. Кроме того, должен быть шанс, что на каждом шаге этот процесс останавливается. Надеюсь, это имеет смысл для вас, ребята… Приветствуется любая мысль!

Комментарии:

1. Голосование против заслуживает комментария. Итак, кто бы вы ни были, пожалуйста, напишите, почему вы проголосовали против, чтобы ОП мог узнать, как улучшить свои вопросы.

Ответ №1:

Более компактно, выберите одно геометрически распределенное случайное число для общего количества шагов, пройденных до остановки, затем используйте 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))
  

Комментарии:

1. теперь мне интересно, существует ли ответ в закрытой форме для этого распределения вероятностей… Я слишком занят / ленив, чтобы искать это в Pielou или Bailey, но это может стать хорошим вопросом с перекрестной проверкой…

Ответ №2:

Вы очень расплывчаты в параметрах вашего моделирования, но как это?

Лямбда для случайного числа Пуассона.

 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)
  

Комментарии:

1. было бы более эффективно сначала сгенерировать все runif() и rpois() , затем посмотреть, какое из них является первым однородным числом < th , и сохранить только это количество элементов значений rpoi. Или даже просто выполните runif() шаг, определите, сколько случайных чисел Пуассона вам нужно, и сгенерируйте только это количество. Также лучше инициировать циклы с i in seq_along(bin) .

2. почему вы удаляете нули? они являются законными выводами из распределения Пуассона…