смоделировать процесс выбора из другого пуассоновского процесса - PullRequest
0 голосов
/ 03 февраля 2020

Мне интересно, как симулировать пуассоновский процесс из другого случайной переменной Бернулли с параметром p.

Для имитации первого пуассоновского процесса с параметром \lambda в интервале [0,t], обычно

pois = rpois(1, \lambda)
v = runif(pois, O, t)
w = sort(v)

Теперь я знаю, что мы можем связать случайную величину Бернулли со временем прихода первого пуассоновского процесса, чтобы смоделировать другой пуассоновский процесс с параметром p * \lambda, но как это сделать?

1 Ответ

0 голосов
/ 03 февраля 2020

Я думаю, что вы спрашиваете, как смоделировать время прибытия процесса Poission с заданной лямбдой. Время между поступлениями в пуассоновском процессе определяется экспоненциальным распределением, поэтому, если вы хотите смоделировать x последовательных времен прихода пуассоновского процесса с lamba = 5, вы просто сделаете:

cumsum(rexp(x, lambda))

Итак, например, предположим, что я хочу смоделировать процесс прибытия Пуассона на основе имеющихся у меня данных о Пуассоне. (Нет, поэтому я создам случайную выборку):

set.seed(69)
existing_poisson_data <- rpois(50, 5)
existing_poisson_data
#>  [1]  5  7  6  7  4  8  3  7  3  1  8  4  8  3  3  3  2  6  2  7  4  3  6  4  3  3  6
#> [28]  6  2  4  6  8  4  5  4  6  6  5  4  5 11  4  5  6  3  1  2  3  4  3

Я хочу смоделировать время прибытия для пуассоновского процесса с той же лямбдой и таким же количеством поступлений. Поэтому я могу сделать это:

number_of_arrivals   <- sum(existing_poisson_data)
lambda               <- mean(existing_poisson_data)

simulated_time_diffs <- rexp(number_of_arrivals, lambda)
arrivals             <- cumsum(simulated_time_diffs)

Теперь мы можем видеть, соответствует ли наше прибытие распределению Пуассона:

simulated_histogram <- hist(arrivals, breaks = 0:ceiling(max(arrivals)))

enter image description here

Это выглядит хорошо. Если счетчики на самом деле распределены по Пуассону, их среднее значение должно быть примерно таким же, как их дисперсия:

mean(simulated_histogram$counts)
#> [1] 5.418605
var(simulated_histogram$counts)
#> [1] 5.487265

Вам не нужен дисперсионный тест, чтобы убедиться, что эти данные распределены по Пуассону. Так что теперь вы можете безопасно использовать вашу переменную arrivals в качестве имитации времени прибытия пуассоновского процесса с лямбда-выражением 5.

Итак, если вы хотите смоделировать n поступление для пуассоновского процесса на основе в другом процессе Пуассона с данной lambda и переменной Бернулли p вы бы сделали

arrivals <- cumsum(rexp(n, p * lambda))

В качестве альтернативы, вы можете использовать переменную Бернулли для выборки некоторых поступлений, как это:

arrivals <- arrivals[as.logical(rbinom(length(arrivals), 1, p))]
...