У меня есть таблица, которая содержит список «событий». Каждое событие имеет среднюю годовую ставку вместе с двумя параметрами формы для генерации случайного значения из распределения бета-версии.
Общее среднее число событий в год представляет собой сумму столбца Rate в таблице и составляет Предполагается, что это распределение Пуассона.
Я хочу сгенерировать симуляцию Монте-Карло таким образом, чтобы для каждого моделирования я генерировал случайное число событий из распределения Пуассона, а затем для каждого случайно сгенерированного события я хочу нарисовать случайное Строка из исходного FreqTable пропорционально ставкам в нем и объединить параметры формы из этой строки. Затем я хочу сгенерировать случайную потерю из бета-распределения, используя эти параметры формы.
Ниже приведен некоторый воспроизводимый код, демонстрирующий мою первоначальную попытку сделать это с использованием a для l oop. Я застрял в точке, где мне нужно объединить параметры формы из FreqTable, найдя наиболее близкое совпадение со значением 'rand' в FreqTable $ CumulativeRate. Я пытался использовать dete_index из библиотеки purr, но я не могу заставить это работать в al oop.
. Я намереваюсь сгенерировать как минимум 100k симуляций, когда код работает, и я Я знаю, что для l oop, возможно, не самый эффективный способ сделать это, но (с моей ограниченной способностью кодирования) это все, что я мог придумать!
FreqTable <- data.frame(Event=c(1:10),
Rate=seq(0.1, 1, length.out = 10),
shape1=c(3:12),
shape2=c(5:14))
annual_freq <- sum(FreqTable$Rate)
FreqTable$CumulativeRate <- cumsum(FreqTable$Rate)/annual_freq
sims = 10
LossesList <- list()
for (i in 1:sims){
num_losses <- rpois(1, annual_freq)
sim_number <- rep(i, num_losses)
rand <- runif(num_losses, 0, 1)
losses_list <- cbind(sim_number, rand)
# PSEUDO CODE
#look up shape parameters from FreqTable by using the nearest match on FreqTable$CumulativeRate from the rand value generated above
#then generate a random variable from the Beta distribution for each row in the losses_list using the looked up shape parameters for that row
LossesList[[i]] <- losses_list
}
SimulatedResults <- unlist(losses_list)