This code illustrates properties of the binomial distribution in the
context of genetic drift. p_0
is the allele frequency in
the parental population, n_e
is the effective size. Notice
that the median outcome is the same as p_0
, indicating that
half of the time the allele frequency is less than or equal to
p_0
and half the time it is greater than or equal to
p_0
.
Try some different values of p_0
to convince yourself
this is true.
options(tidyverse.quiet = TRUE)
library(tidyverse)
library(ggplot2)
p_0 <- 0.5
n_e <- 100
## Take 10000 samples from a binomial distribution with number of gametes
## equal to 2 times the effective population size and allele frequency p_0
##
dat <- tibble(p = rbinom(10000, 2*n_e, p_0)/(2*n_e))
median <- quantile(dat$p, c(0.5))
title <- sprintf("Median outcome: %4.2f", median)
p <- ggplot(dat, aes(x = p)) +
geom_histogram(binwidth = 1/(2*n_e)) +
geom_vline(xintercept = p_0, color = "salmon", linetype = "dashed") +
xlab("p") +
ggtitle(title) +
theme_bw()
p

LS0tCnRpdGxlOiAiQmlub21pYWwgZGlzdHJpYnV0aW9uIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpUaGlzIGNvZGUgaWxsdXN0cmF0ZXMgcHJvcGVydGllcyBvZiB0aGUgYmlub21pYWwgZGlzdHJpYnV0aW9uIGluIHRoZSBjb250ZXh0IG9mIGdlbmV0aWMgZHJpZnQuIGBwXzBgIGlzIHRoZSBhbGxlbGUgZnJlcXVlbmN5IGluIHRoZSBwYXJlbnRhbCBwb3B1bGF0aW9uLCBgbl9lYCBpcyB0aGUgZWZmZWN0aXZlIHNpemUuIE5vdGljZSB0aGF0IHRoZSBtZWRpYW4gb3V0Y29tZSBpcyB0aGUgc2FtZSBhcyBgcF8wYCwgaW5kaWNhdGluZyB0aGF0IGhhbGYgb2YgdGhlIHRpbWUgdGhlIGFsbGVsZSBmcmVxdWVuY3kgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBwXzBgIGFuZCBoYWxmIHRoZSB0aW1lIGl0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgcF8wYC4KClRyeSBzb21lIGRpZmZlcmVudCB2YWx1ZXMgb2YgYHBfMGAgdG8gY29udmluY2UgeW91cnNlbGYgdGhpcyBpcyB0cnVlLiAKCmBgYHtyfQpvcHRpb25zKHRpZHl2ZXJzZS5xdWlldCA9IFRSVUUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpCgpwXzAgPC0gMC41Cm5fZSA8LSAxMDAKCiMjIFRha2UgMTAwMDAgc2FtcGxlcyBmcm9tIGEgYmlub21pYWwgZGlzdHJpYnV0aW9uIHdpdGggbnVtYmVyIG9mIGdhbWV0ZXMKIyMgZXF1YWwgdG8gMiB0aW1lcyB0aGUgZWZmZWN0aXZlIHBvcHVsYXRpb24gc2l6ZSBhbmQgYWxsZWxlIGZyZXF1ZW5jeSBwXzAKIyMKZGF0IDwtIHRpYmJsZShwID0gcmJpbm9tKDEwMDAwLCAyKm5fZSwgcF8wKS8oMipuX2UpKQptZWRpYW4gPC0gcXVhbnRpbGUoZGF0JHAsIGMoMC41KSkKdGl0bGUgPC0gc3ByaW50ZigiTWVkaWFuIG91dGNvbWU6ICU0LjJmIiwgbWVkaWFuKQpwIDwtIGdncGxvdChkYXQsIGFlcyh4ID0gcCkpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEvKDIqbl9lKSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHBfMCwgY29sb3IgPSAic2FsbW9uIiwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogIHhsYWIoInAiKSArCiAgZ2d0aXRsZSh0aXRsZSkgKyAKICB0aGVtZV9idygpCnAKYGBgCgo=