As we recall from the first vignette, in a way to implement a set of simulations in the AlphaSimR package four steps must be followed:
In this vignette, we will cover the last step of the simulation: examining the results. For such, we will compare two implementations over a few generations of selection.
We will start by loading the packages.
## Warning: package 'AlphaSimR' was built under R version 4.3.3
## Carregando pacotes exigidos: R6
## Warning: package 'ggplot2' was built under R version 4.3.3
rm(list=ls())
# Creating the founding genome
founderGenomes = runMacs(nInd = 100,
nChr = 4,
segSites = 20,
species = "MAIZE")
# Setting up trait characteristics
SP = SimParam$new(founderGenomes)
SP$addTraitA(nQtlPerChr = 20,
mean = 10,
var = 1)
# Generating base population
basePop = newPop(founderGenomes)
# Set simulation parameters
nSelected1 = 10 # Scenario 1
nSelected2 = 50 # Scenario 2
##------------------- For the first scenario
# Select the best performing individuals according to their phenotype
basePopSelected = basePop
# Allocate vectors
nGenerations = 10 + 1 # +1 to store starting generation
meanGAll = numeric(nGenerations)
varGAll = numeric(nGenerations)
# Save the starting values
meanGAll[1] = meanG(basePop)
varGAll[1] = varG(basePop)
# To make the for loop below simpler we will make a copy of the object basePopSelected
newPopSelected = basePopSelected
# Selection over many generations
for (generation in 1:(nGenerations - 1)) {
# Cross parents, phenotype progeny, and select new parents
newPop = randCross(newPopSelected, nCrosses = nInd(basePop))
newPop = setPheno(newPop, h2 = 0.5)
newPopSelected = selectInd(pop = newPop,
nInd = nSelected1,
use = "pheno")
# Save summaries
meanGAll[1 + generation] = meanG(newPop)
varGAll[1 + generation] = varG(newPop)
}
# Now save these outputs by copying the objects
meanGAll_n10 = meanGAll
varGAll_n10 = varGAll
##------------------- For second scenario
# Allocate vectors
nGenerations = 10 + 1 # +1 to store starting generation
meanGAll = numeric(nGenerations)
varGAll = numeric(nGenerations)
# Save the starting values
meanGAll[1] = meanG(basePop)
varGAll[1] = varG(basePop)
# To make the for loop below simpler we will make a copy of the object basePopSelected
newPopSelected = basePopSelected
# Selection over many generations
for (generation in 1:(nGenerations - 1)) {
# Cross parents, phenotype progeny, and select new parents
newPop = randCross(newPopSelected, nCrosses = nInd(basePop))
newPop = setPheno(newPop, h2 = 0.5)
newPopSelected = selectInd(pop = newPop,
nInd = nSelected2,
use = "pheno")
# Save summaries
meanGAll[1 + generation] = meanG(newPop)
varGAll[1 + generation] = varG(newPop)
}
# Now save these outputs by copying the objects
meanGAll_n50 = meanGAll
varGAll_n50 = varGAll
Let’s plot and see the changes over time
par(mfrow = c(2, 1),
mar = c(4, 4, 1, 1))
# Plot mean of genetic values over time
meanRanges = range(c(meanGAll_n10, meanGAll_n50))
plot(x = 1:nGenerations, y = meanGAll_n10, type = "l", col = "black", lwd = 3,
xlab = "Generation", ylab = "Mean of genetic values", ylim = meanRanges)
lines(x = 1:nGenerations, y = meanGAll_n50, type = "l", col = "purple", lty = 2, lwd = 3)
legend(x = "topleft", legend = c(10, 50), title = "nSelected",
lwd = 3, lty = c(1, 2), col = c("black", "purple"), bty = "n")
# Plot variance of genetic values over time
varRanges = range(c(varGAll_n50, varGAll_n10))
plot(x = 1:nGenerations, y = varGAll_n10, type = "l", col = "black", lwd = 3,
xlab = "Generation", ylab = "Variance of genetic values", ylim = varRanges)
lines(x = 1:nGenerations, y = varGAll_n50, type = "l", col = "purple", lty = 2, lwd = 3)
legend(x = "topright", legend = c(10, 50), title = "nSelected",
lwd = 3, lty = c(1, 2), col = c("black", "purple"), bty = "n")
Post doc, University of Florida, deamorimpeixotom@ufl.edu↩︎