Model

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}\)

Numerical solutions

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")