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=