Skip to content

Instantly share code, notes, and snippets.

@vankesteren
Created November 19, 2022 18:14
Show Gist options
  • Save vankesteren/b5259c200115f400b5878c3c8c095c7a to your computer and use it in GitHub Desktop.
Save vankesteren/b5259c200115f400b5878c3c8c095c7a to your computer and use it in GitHub Desktop.
Poisson proces simulatie voor OV-fietsen
# Poisson proces simulatie voor OV-fietsen
library(tidyverse)
# parameters
start_fietsen_centraal <- 24
start_fietsen_sloterdijk <- 15
uit_per_minuut_centraal <- 7.14
in_per_minuut_centraal <- 6.14
uit_per_minuut_sloterdijk <- 2.14
in_per_minuut_sloterdijk <- 1.14
minuten <- 15
# run simulatie
iter <- 1000L
out <- matrix(0L, nrow = 0, ncol = 4)
for (i in 1:iter) {
uit_centraal <- rpois(minuten, uit_per_minuut_centraal)
in_centraal <- rpois(minuten, in_per_minuut_centraal)
uit_sloterdijk <- rpois(minuten, uit_per_minuut_sloterdijk)
in_sloterdijk <- rpois(minuten, in_per_minuut_sloterdijk)
out <- rbind(out,
cbind(
i,
0:minuten,
start_fietsen_centraal + c(0, cumsum(in_centraal - uit_centraal)),
start_fietsen_sloterdijk + c(0, cumsum(in_sloterdijk - uit_sloterdijk))
)
)
}
# bereken kans en visualiseer
df <-
out |>
as_tibble() |>
set_names(c("iter", "minuten", "centraal", "sloterdijk")) |>
pivot_longer(c("centraal", "sloterdijk"))
kansen <-
df |>
filter(minuten == {{minuten}}) |>
group_by(name) |>
summarize(kans = mean(value > 2)) |>
mutate(label = paste0(name, " (kans = ", round(kans, 3), ")"))
df <- left_join(df, kansen |> select(name, label), by = "name")
df |>
ggplot(aes(x = minuten, y = value, colour = name, group = paste(iter, name))) +
geom_line(alpha = 0.2) +
geom_hline(yintercept = 0) +
theme_minimal() +
facet_wrap(vars(label)) +
scale_colour_brewer(type = "qual", guide = "none") +
labs(title = "OV-fietsen beschikbaar",
y = "Aantal fietsen", x = "Minuten")
@vankesteren
Copy link
Author

afbeelding

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment