Let \(x\) be the frequency of n10 and \(1-x\) the frequency of ab10 in a panmictic population of inifnite size. In the absence of drive, the frequency of n10 in the next generation is simply \(x'=x^2+\frac{1}{2}*2x(1-x)\), as \(\frac{1}{2}\) of the alleles produced by heterozygotes will be n10.
We then introduce drive, such that heterozygotes for ab10 produce ab10:n10 in the ration \(d\):\((1-d)\) during female meioisis. Since all individuals are hermaphorditic, this corresponds to only half the gametic output of heterozygotes, so the frequency of n10 in the next generation becomes:
\(x'=x^2+x*(1-x)*(1.5-d)\)
Note that udner no drive (\(d=0.5\)), this reduces to Hardy-Weinberg equilibrium.
Finally, we introduce selection (\(s\)) and dominance (\(h\)), such that n10 homozygotes have relative fitness of \(1\), heterozygotes have fitness \(1-hs\), and ab10 homozygotes have fitness of \(1-s\). The frequency of n10 in the next generation is now:
\((x^2+x(1-x)(1.5-d)(1-hs))/(x^2+2x(1-x)(1-hs)+(1-x)^2(1-s))\)
We can solve this for equilibrium, when \(x'=x\) and we get nontrivial equilibria at:
\(x = -\frac{2d(hs - 1) - 3hs + 2s + 1}{4hs - 2s}\)
We can now evaluate the frequency of n10 under different conditions (\(d\), \(h\), and \(s\)). We will limit drive to plausible ranges \(0.5\leq\leq0.85\), and test several values of \(h={0,0.1,0.25,0.5,0.75,1}\)
d=50:85/100
s=1:100/100
h=c(0,0.1,0.25,.5,.75,1)
p<-function(pars){
d=pars[1]; s=pars[2]; h=pars[3];
return(-1/2*(2*(h*s - 1)*d - 3*h*s + 2*s + 1)/(2*h*s - s))
}
vals=expand.grid(d,s,h)
colnames(vals)=c("d","s","h")
pvals=apply(vals,1,p)
We observe ab10 in natural populations at \(\approx15\%\) so we will filter these results for n10 frequencies of frequencies \(80\%\leq x \leq 90\%\).
library(dplyr)
library(cowplot)
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
cbind(vals,pvals) %>%
filter(pvals<=0.9,pvals>=0.8) %>%
ggplot(aes(y=d,x=s,color=as.factor(h)))+
geom_point()+
scale_color_manual(values=cbPalette[1:6])+
background_grid(major = "xy", minor = "xy")