Genetic draft, selective interference, and population genetics of rapid adaptation


Fixation in asexual populations

The fixation probability of beneficial mutations decreases with an increasing number of competing beneficial mutations. The fate of a mutation also depends very strongly on the fitness of the individual that first carried the mutations. Both effects can be readily explored in simulations.

To this end, we use FFPopSim in a mode in which we can specify the number of segregating sites. The program will then keep these sites polymorphic and inject a novel mutation in a random individual whenever a locus is monomorphic, i.e., the previous mutation at this locus went extinct or fixed.

For each mutation, the fitness of the original individual and the time of injection is recorded. In addition, FFPopSim keeps a record of the total number of mutations that where injected and all mutation that fixed. From this, we can calculate the fixation probability and study how it depends on the number of segregating sites and the background fitness.

The script discussed here is called fixation_probability_asex and can be downloaded here . We first specify a list of numbers of segregating sites which we want to simulate, along with the population size and the adaptive effect of individual mutations.
Lvalues = [10,30,100,300, 1000]
s = 1e-2 	#single site effect
N = 10000 	#population size
We then loop over the different number of segregating sites, set up the population, burnin and measure the fitness distribution and the fixation probability. The fitness distribution is determined by
tmp_dis = np.asarray(zip(pop.get_clone_sizes(), pop.get_fitnesses()-pop.get_fitness_statistics().mean))
fit_dis,x = np.histogram(tmp_dis[:,1], weights=tmp_dis[:,0], bins=fit_bins, normed=True)
where the first command produces a list of clone sizes and fitness values, while the second produces a histogram. These histograms are accumulated over many samples. Next we obtain the initial fitness backgrounds of all mutations that fixed and the total number of mutations that where injected after the burnin period (the sum of date of birth and sweep time is the time of fixation).
fixed_mutations = np.asarray([(a.birth+a.sweep_time, for a in pop.fixed_mutations])
late_fixed_mutations = fixed_mutations[fixed_mutations[:,0]>burnin,:]
total_mutations = np.sum(pop.number_of_mutations[burnin:])
After repeating this for many samples and all our choices for the number of segregating sites, we find for the fixation probability

The fixation probability is divided by the independent sites expectation 2s. We see that it decreases dramatically with an increasing number of segregating sites. The next graph shows the fitness distribution of the entire population (solid) and of the mutations that fixed (dashed).

With increasing number of segregating sites, the fitness distribution broadens and the fixed mutations originate more and more from the tail of the distribution.