Intuition : nous verrons une baisse du taux de yeux bleus jusqu’à un certain seuil pour une population importante. Pour une population faible : disparition des yeux bleus ou des yeux marrons après un certain temps due à la forte influence de l’aléatoire.

set.seed(150)
nextGen = function(Po){
  P = nrow(Po) 
  fm = matrix(nrow = 0, ncol = 2)
  for(i in 1:P)
    fm = rbind(fm, sample(1:P,2))
  Af = cbind(fm[,1],sample(1:2,P,T))
  Am = cbind(fm[,2],sample(1:2,P,T))
  cbind(Po[Af],Po[Am])
}

count = function(Po){
  c(sum(Po[,1] & Po[,2]),sum(!Po[,1] & !Po[,2]))
}

init = function(P,I,BB0,MM0){
  P0 = cbind(rep(T,P),rep(F,P))
  for(i in 1:BB0)
    P0[i,2]=T
  for(i in 1:MM0)
    P0[i+BB0,1]=F
  P0
}

draw = function(P,I,BB,MM){
  plot(c(0,I),c(0,1),type="n",xlab="Generation", ylab="", cex.axis = 0.5, cex.lab = 0.5)
  polygon(c(c(0,I),c(I,0)),c(c(0,0),c(1,1)), col="burlywood")
  polygon(c(0:I,rev(0:I)),c(BB/P,rep(0,I+1)), col="skyblue")
  polygon(c(0:I,rev(0:I)),c(1-MM/P,rep(1,I+1)), col="tan4")
}

simulation = function(P,I,BB0,MM0){
  BB = numeric(I+1)
  MM = numeric(I+1)
  
  Pi = init(P,I,BB0,MM0)
  C = count(Pi)
  BB[1] = C[1]
  MM[1] = C[2]
  for(i in 1:I){
    Pi = nextGen(Pi)
    C = count(Pi)
    BB[i+1] = C[1]
    MM[i+1] = C[2]
  }
  draw(P,I,BB,MM)
}

Question 1

for(i in 1:4)
  simulation(P=20,I=20,BB0=4,MM0=12)

for(i in 1:4)
  simulation(P=20,I=20,BB0=12,MM0=4)

for(i in 1:4)
  simulation(P=20,I=20,BB0=5,MM0=5)

for(i in 1:4)
  simulation(P=20,I=100,BB0=5,MM0=5)

for(i in 1:4)
  simulation(P=20,I=20,BB0=10,MM0=10)

for(i in 1:4)
  simulation(P=20,I=20,BB0=2,MM0=2)

On observe quelque fois une disparition d’une couleur, car une fois que cette couleur a un taux faible, elle a moins de chances de subsister dans la population: un individu ayant cette couleur d’yeux a moins de chances d’être choisi comme père/mère, et a aussi moins de chances d’être associé avec un individu ayant la même couleur d’yeux. De plus, on observe qu’avec une quantité faible de personnes avec 2 allèles différentes, la quantité de personnes avec des allèles identiques a tendance à baisser à la génération d’après, et inversement.

Question 2

  simulation(P=2000,I=100,BB0=400,MM0=1200)

  simulation(P=2000,I=100,BB0=1200,MM0=400)

  simulation(P=2000,I=100,BB0=500,MM0=500)

Le système à grande population est plus stable que le précédent, et les proportions de couleurs évoluent peu au cours des générations. Cela peu s’expliquer par le fait que sur une population, on dispose de moins de tirages aléatoires, donc l’impact d’un seul tirage est élevé. Lorsque l’on observe une population plus importante, on effectue beaucoup plus de tirages, qui auront tendance à se stabiliser.

Question 3

simulation(P=20,I=2000,BB0=5,MM0=5)

nextGen = function(Po){
  P = nrow(Po) 
  fm = matrix(nrow = 0, ncol = 2)
  for(i in 1:(P-2))
    fm = rbind(fm, sample(1:P,2))
  Af = cbind(fm[,1],sample(1:2,P-2,T))
  Am = cbind(fm[,2],sample(1:2,P-2,T))
  rbind(rbind(cbind(Po[Af],Po[Am]),c(T,T)),c(F,F))
}  

simulation(P=20,I=2000,BB0=5,MM0=5)

simulation(P=20,I=2000,BB0=0,MM0=20)

En comparaison avec un système “normal”, le système avec préservation rend le système plus stable, car une couleur d’yeux ne peux plus disparaître du système. On observe aucune tendance particulière sur le long terme, quelque soient la population de départ.

Question 4 Mon intuition initiale pour des populations faibles était correcte. Cependant, mon intuition sur les populations fortes concernant la proportion de yeux bleus s’est révélée erronée car le taux semble peu changer au cours des générations. Une autre hypothèse à tester serait de savoir si le nombre de personnes ayant des allèles différentes a tendance à se stabiliser selon la population initiale, et vers quelle valeur.