f1 <- function(p = 0.5, t, s){
q <- 1-p
w_bar <- 1-t*p^2-s*q^2
delta_p <- (p*q*2*(s-p*(s+t))) / (2*w_bar)
return(list(delta_p, w_bar))
}
parameters <- data.frame(t = c(-0.5, 0 , 0.5, -0.5),
s = c( 0.5, 0.5, 0.5, -0.5))
models <- c("Additive", "Dominance", "Overdominance", "Underdominance")
par(mfrow = c(2,2))
ps <- seq(0.0, 1, 0.05)
for(i in 1:4){
res <- sapply(ps, function(x){f1(p = x, t = parameters$t[i], s = parameters$s[i])})
res <- data.frame(delta_p = unlist(res[1,]), w_bar = unlist(res[2,]))
par(mar = c(5.1,4.1, 4.1, 4))
plot(ps, res$delta_p, type = "o", col = "dodgerblue4", pch = 16,
ylab = NA, xlab = NA, axes = F, main = models[i],
ylim = c(min(res$delta_p), max(res$delta_p)*1.2))
limits <- round(seq( min(res$delta_p), max(res$delta_p), length.out = 10), 3)
axis(side = 2, cex = 1.2, col = "dodgerblue4", col.axis = "dodgerblue4",
at = limits)
mtext(side = 2, "Variation in allele frequency", cex = 1, col = "dodgerblue4", line = 2.5)
grid()
abline(h = 0, col = "dodgerblue4", lty = 3)
par(new = T)
plot(ps, res$w_bar, lty = 2, lwd = 2, type = "b", col = "palegreen4", axes = F, xlab = NA,
ylab = NA, ylim = c(min(res$w_bar), max(res$w_bar)))
mtext(side = 4, line = 2, "Average Fitness", cex = 1, col = "palegreen4",
ylim = c(min(res$w_bar)*0.9, max(res$w_bar)))
limits <- round(seq( min(res$w_bar), max(res$w_bar), length.out = 10), 3)
axis(side=4, cex = 1.2, col = "palegreen4", col.axis = "palegreen4",
at = limits)
if( i == 3){
abline(v = ps[which.max(res$w_bar)], lty = 3, col = "palegreen4", lwd = 2)
} else if (i == 4) {
abline(v = ps[which.min(res$w_bar)], lty = 3, col = "palegreen4", lwd = 2)
}
axis(side = 1, cex = 1.2, col = "gray50", col.axis = "gray50")
mtext(side = 1, "Allele frequency (p)", cex = 1, line = 2, col = "gray50")
}
