#r #simulation
#r #Симуляция
Вопрос:
Я все еще относительно новичок в R, поэтому я борюсь с повторением строк кода несколько раз и сохранением результата для каждого повторения.
Цель состоит в том, чтобы случайным образом (с равной вероятностью) назначить количество событий, в моем случае 100, за 20-летний период. Поскольку дни не имеют значения, я использую количество месяцев для определения периода. Впоследствии я подсчитываю события за каждый 24-месячный период в течение 20 лет. Наконец, извлекая максимальное количество событий, происходящих в течение 24-месячного периода.
Несмотря на беспорядок и, вероятно, неэффективность, код работает по назначению. Однако я хочу повторить этот процесс 1000 раз, чтобы получить распределение всего максимального количества событий, происходящих за 24 месяца, для сравнения с моими реальными данными.
вот мое кодирование на данный момент:
library(runner)
library(dplyr)
#First I set the period from the year 2000 to 2019 with one-month increments.
period <- seq(as.Date("2000/1/1"), by = "month", length.out = 240)
#I sample random observations assigned to different months over the entire period.
u <- sample(period, size=100, replace=T)
#Make a table in order to register the number of occurrences within each month.
u <- table(u)
#Create a data frame to ease information processing.
simulation <- data.frame(u)
#Change the date column to date format.
simulation$u <- as.Date(simulation$u)
#Compute number of events taking place within every 24-month period (730 = days in 24 months).
u <- u %>%
mutate(
Last_24_month_total = sum_run(
x = simulation$Freq,
k = 730,
idx = as.Date(simulation$u, format = "%d/%m/%Y"))
)
#extract the maximum number of uccurences within a 24 month period
max <- max(u$Last_24_month_total)
Может ли кто-нибудь помочь мне понять, как переписать этот процесс, чтобы облегчить тысячу повторений при сохранении максимального значения для каждого повторения?
Спасибо
Комментарии:
1. в конце концов, вы можете использовать
replicate()
Ответ №1:
Как @jogo предложил в комментариях, вы можете использовать replicate
.
Я упростил ваш код.
library(runner)
library(dplyr)
seq_dates <- seq(as.Date("2000/1/1"), by = "month", length.out = 240)
replicate(100,
seq_dates %>%
sample(100, replace = TRUE) %>%
table() %>%
sum_run(730, idx = as.Date(names(.))) %>%
max)