This document will demonstrate the quantitative genetic of heterosis and show heterosis in an example maize simulation.
The below simulation will show different types of heterosis presented in the Labroo et. al. figure.
library(AlphaSimR)
Loading required package: R6
# Adding a split in coalescent simulation to model 2 populations that
# diverge 100 generations ago
founderPop = runMacs(nInd=200, nChr=10, segSites=1000,
split=100)
SP = SimParam$
new(founderPop[1:100])$
addTraitAD(1000, meanDD=0.2, varDD=0.1)
# Splitting the two populations in founderPop into two separate populations
A = newPop(founderPop[1:100])
B = newPop(founderPop[101:200])
# Creating fully inbred versions of the two populations
A_inbred = makeDH(A)
B_inbred = makeDH(B)
# Creating an F1 hybrids between populations A and B
F1 = hybridCross(A, B)
# Creating F1 hybrids using the inbred populations
F1_inbred = hybridCross(A_inbred, B_inbred)
# Creating an F2 population by random mating the F1s
F2 = randCross(F1, nCrosses=10000)
# Examine the means of the initial populations
meanG(A)
Trait1
-2.036704e-15
meanG(B)
Trait1
-1.645001
# Examing the means of the inbred populations
meanG(A_inbred)
Trait1
-7.329905
meanG(B_inbred)
Trait1
-8.700199
# Examine the means of the F1 populations
# They should be approximately equivalent
meanG(F1)
Trait1
3.636628
meanG(F1_inbred)
Trait1
3.624459
# Examining mean of F2
meanG(F2)
Trait1
1.350998
# Panmictic Midparent Heterosis
meanG(F1) - (meanG(A)+meanG(B))/2
Trait1
4.459129
# Inbred Midparent Heterosis
meanG(F1) - (meanG(A_inbred)+meanG(B_inbred))/2
Trait1
11.65168
# Baseline Heterosis
(meanG(A)+meanG(B))/2 - (meanG(A_inbred)+meanG(B_inbred))/2
Trait1
7.192552
# F2 Heterosis (about half of panmictic midparent heterosis)
meanG(F2) - (meanG(A)+meanG(B))/2
Trait1
2.173499
## Extra not in heterosis figure
# Create F2 by selfing F1
F2_self = self(F1)
# Selfing removes half of inbred midparent heterosis
meanG(F2_self) - (meanG(A_inbred)+meanG(B_inbred))/2
Trait1
5.852955
The below script simulates a maize population using parameters determined by after tuning. It will also show the correlation between per se and testcross performance.
founderPop = runMacs(nInd=200, nChr=10, segSites=300,
split=100, species="MAIZE", inbred=TRUE)
SP = SimParam$
new(founderPop[1:100])$
addTraitAD(300,
mean=70, # Bushels per acre
var=20, # Inbred variance
meanDD=0.92,
varDD=0.3)$
setVarE(H2=1)
# Create inbred populations
A = newPop(founderPop[1:100])
B = newPop(founderPop[101:200])
# Create all possible hybrids
F1 = hybridCross(A, B)
# Examine means of populations
meanG(A)
Trait1
70
meanG(B)
Trait1
73.53552
meanG(F1)
Trait1
160.3342
# Examine variances
varG(A)
Trait1
Trait1 20
varG(B)
Trait1
Trait1 21.92027
varG(F1)
Trait1
Trait1 22.16816
# Calculating GCA using built-in functions and measuring
# GCA - per se correlation
GCA = calcGCA(F1, use="gv")
head(GCA$GCAf)
cor(GCA$GCAf[,2], gv(A))
Trait1
[1,] 0.8069501
cor(GCA$GCAm[,2], gv(B))
Trait1
[1,] 0.8201194
# Testcross with 1 tester
A = setPhenoGCA(A, testers=B[1])
B = setPhenoGCA(B, tester=A[1])
cor(GCA$GCAf[,2], pheno(A))
Trait1
[1,] 0.8646758
cor(GCA$GCAm[,2], pheno(B))
Trait1
[1,] 0.8487118
# Testcross with 3 testers
A = setPhenoGCA(A, testers=B[1:3])
B = setPhenoGCA(B, tester=A[1:3])
cor(GCA$GCAf[,2], pheno(A))
[,1]
[1,] 0.9306472
cor(GCA$GCAm[,2], pheno(B))
[,1]
[1,] 0.9299701