This notebook shows a simple, one-locus, two allele simulation of
genetic drift
options(tidyverse.quiet = TRUE)
library(tidyverse)
library(ggplot2)
## These are the parameters you can play with
##
n_gen <- 100
n_e <- 100
## This is the simulation
##
p <- numeric(n_gen)
p[1] <- 0.5
for (i in 2:n_gen) {
k <- rbinom(1, 2*n_e, p[i-1])
p[i] <- k/(2*n_e)
}
## This is the code to plot the results
##
dat <- tibble(generation = seq(1:n_gen),
p = p)
p <- ggplot(dat, aes(x = generation, y = p)) +
geom_point() +
geom_line() +
theme_bw() +
xlab("Generation") +
ylab("p") +
ylim(0, 1)
p

LS0tCnRpdGxlOiAiR2VuZXRpYyBkcmlmdCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBub3RlYm9vayBzaG93cyBhIHNpbXBsZSwgb25lLWxvY3VzLCB0d28gYWxsZWxlIHNpbXVsYXRpb24gb2YgZ2VuZXRpYyBkcmlmdCAKCmBgYHtyfQpvcHRpb25zKHRpZHl2ZXJzZS5xdWlldCA9IFRSVUUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpCgojIyBUaGVzZSBhcmUgdGhlIHBhcmFtZXRlcnMgeW91IGNhbiBwbGF5IHdpdGgKIyMKbl9nZW4gPC0gMTAwCm5fZSA8LSAxMDAKCiMjIFRoaXMgaXMgdGhlIHNpbXVsYXRpb24KIyMKcCA8LSBudW1lcmljKG5fZ2VuKQpwWzFdIDwtIDAuNQpmb3IgKGkgaW4gMjpuX2dlbikgewogIGsgPC0gcmJpbm9tKDEsIDIqbl9lLCBwW2ktMV0pCiAgcFtpXSA8LSBrLygyKm5fZSkKfQoKIyMgVGhpcyBpcyB0aGUgY29kZSB0byBwbG90IHRoZSByZXN1bHRzCiMjCmRhdCA8LSB0aWJibGUoZ2VuZXJhdGlvbiA9IHNlcSgxOm5fZ2VuKSwKICAgICAgICAgICAgICBwID0gcCkKcCA8LSBnZ3Bsb3QoZGF0LCBhZXMoeCA9IGdlbmVyYXRpb24sIHkgPSBwKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9saW5lKCkgKwogIHRoZW1lX2J3KCkgKwogIHhsYWIoIkdlbmVyYXRpb24iKSArCiAgeWxhYigicCIpICsKICB5bGltKDAsIDEpCnAKYGBgCgoK