#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. почему вы удаляете нули? они являются законными выводами из распределения Пуассона…