inst/doc/popgen_intro.R

## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
options(rmarkdown.html_vignette.check_title = FALSE)

## -----------------------------------------------------------------------------
library(evolved)

## -----------------------------------------------------------------------------
# Define how many samples we want:
rr <- 10000

## -----------------------------------------------------------------------------
binom_nbrs <- rbinom(n = rr, size = 10, prob = 0.5)  # taking 10000 samples of 10

## -----------------------------------------------------------------------------
head(binom_nbrs, 10)

## -----------------------------------------------------------------------------
table(binom_nbrs)

## -----------------------------------------------------------------------------
plot(
  table(binom_nbrs),
  ylab="Frequency", xlab="Number of successes")

## -----------------------------------------------------------------------------
P_x3_s10_p0.5 <- dbinom(x = 3, size = 10, prob = 0.5) 
# x is the integer value we want to know the probability density of

P_x3_s10_p0.5

## -----------------------------------------------------------------------------
# comparing the stochastic realization of x = 3 with the expectation for x = 3
table(binom_nbrs)[4] / rr #why the division?

P_x3_s10_p0.5

## -----------------------------------------------------------------------------
plot(
  table(binom_nbrs)/rr, 
  ylab="Probability", xlab="Number of heads")

# Finally, we can mark the probability we are interested in
# by using a red dot in our plot:
points(x = 3, y = P_x3_s10_p0.5, col = "red", cex = 2)

## -----------------------------------------------------------------------------
popsize <- 10

## -----------------------------------------------------------------------------
time <- 0

## -----------------------------------------------------------------------------
R <- 1.05

## -----------------------------------------------------------------------------
tmax <- 100 # this is the number of generations

## -----------------------------------------------------------------------------
all_generations <- seq(from = 1, to = tmax, by = 1)

## -----------------------------------------------------------------------------
# For each generation, beginning in the generation = 1 and:
for(generation in all_generations){ 
  
  N_t <- popsize[length(popsize)] # by indexing 
  # the vector in this way (i.e. using "[length()]"),
  # we guarantee we are always taking the last value of 
  # this vector.
  
  N_t_plus_one <- N_t * R # this is the application of Euler's formula
  
  #Now, let's store the population size at that generation:
  popsize <- c(popsize, N_t_plus_one)
  
  #let's not forget to record the time that we are on:
  time <- c(time, generation) 
}

## -----------------------------------------------------------------------------
#
plot(NA, xlim=c(0,tmax), ylim=c(0,1500),
     xlab="time", ylab="Population size",
     main="Malthusian growth")
lines(x = time, y = popsize, col = "blue", lwd = 3)

## ---- fig.cap='A white mother Spirit bear and a black cub offspring; the father must have been black and the cub is a heterozygote for the coat color polymorphism (photo mod. from Hedrick and Ritland (2012)', fig.width=2.5, fig.height=2, echo = F----
knitr::include_graphics('spirit_bear.png')

## -----------------------------------------------------------------------------
sim_pops <- OneGenHWSim(n.ind = 100, n.sim = 5, p = 0.467)

#now, checking the result of our simulations:
sim_pops

## -----------------------------------------------------------------------------
# To remember how this works, let's imagine you want to 
# arbitrarily calculate (f(A1) + 3) / 4.5 for all your simulations. 
#You should run:

freqs_A1 <- sim_pops$A1A1 / (sim_pops$A1A1 + sim_pops$A1A2 + sim_pops$A2A2)

result <- (freqs_A1 + 3) / 4.5
result

# the above has no biological "meaning". 
# it is just to remind you how vectorized calculation works

Try the evolved package in your browser

Any scripts or data that you put into this service are public.

evolved documentation built on April 3, 2025, 9:23 p.m.