Question 0 : Décrire l’intuition

Les allèles donnant la couleur bleue étant récessifs par rapport aux allèles donnant la couleur marron, on pourrait intuiter que la population sera constituée au fil du temps avec de moins en moins de personnes porant des yeux bleus. Cependant, les enfants gagnant un allèle aléatoire des 2 parents, la chute ne serait pas nette mais plutôt progressive. On peut cependant penser qu’il est possible d’avoir des cas extrêmes où la population comporterait énormément de personnes aux yeux bleus ou qu’il n’y en ai qu’une petite partie qui en porte.

Question 1 : Cas d’une petite population

Pour modéliser ce problème, on va s’intéresser aux nombres d’allèles que possède une personne (0 signifiant les allèles “marron-marron”, 1 : “marron-bleu” et 2 : “bleu-bleu”). Pour commencer, l’on étudie les cas où la population est réduite : ici, on prendra P = 20.

generer_pop = function(P = 20, mm = 12, bb = 4) {
pop <- c()
if (mm >= 1) {
  for (j in 1:mm) {
    pop <- c(pop, 0);
  }
}
if (bb >= 1) {
  for (k in 1:bb) {
    pop <- c(pop, 2);
  }
}
if (P-mm-bb >= 1) {
  for (l in 1:(P-mm-bb)) {
    pop <- c(pop, 1);
  }
}
pop
}

new_population = function(pop, P = 20, mm = 12, bb = 4) {

for (cmpt in 1:P) {
  couple = sample(size=2, pop, replace = T);
  parent1 = ifelse(couple[1]==0,0, 
         ifelse(couple[1]==1, sample(0:1, 1),1));
  parent2 = ifelse(couple[2]==0,0, 
         ifelse(couple[2]==1, sample(0:1, 1),1));
  pop[cmpt] = parent1 + parent2;
}
pop
}

evolution_pop = function(P = 20, mm = 12, bb = 4, i = 20) {
  MM <- c()
  BB <- c()
  MM[1] = mm;
  BB[1] = bb;
  pop = generer_pop(P, mm, bb);
  for (gen in 2:i) {
    pop = new_population(pop, P, mm, bb);
    BB[gen] = sum(pop [! pop %in% c(0,1)])/2;
    MM[gen] = length(pop [! pop %in% c(1,2)]);
  }
  return(list(MM, BB));
}

tracer_graphe = function(N=10, P = 20, mm = 12, bb = 4, i = 20) {
  set.seed(7)
  alleles = evolution_pop(P, mm, bb, i);
  plot((alleles[[2]]/P)*100, (alleles[[1]]/P)*100, main = "Proportion de porteurs de 2 allèles marrons par rapport à la proportion de porteurs de yeux bleus", xlab = "BBi/P", ylab = "MMi/P", xlim = c(0,100), ylim = c(0,100), type='l', col="blue")
  for (j in 1:N) {
  alleles = evolution_pop(P, mm, bb, i);
  lines((alleles[[2]]/P)*100, (alleles[[1]]/P)*100, col="blue");
  }
}
tracer_graphe(N = 10, P=20, mm=12, bb=4, i=20);

Le premier graphe représente 10 cas d’évolutions différents sur une vingtaine de générations et où le nombre de yeux bleus est très réduit sur la population de base (20% ici). Dans ce graphe, on peut observer que la proportion de porteurs de yeux bleus passe plutôt à la baisse. Cependant, il existe des cas où la population devient entièrement à yeux marrons où personne ne porte d’allèles bleus et le contraire où toute la population devient à yeux bleus.

tracer_graphe(N = 10, P=20, mm=4, bb=12, i=20);

Dans ce graphe, on étudie une population où 60% de la population est à yeux bleus dans la population de base. On remarque que les populations gardent une grande partie d’habitants à yeux bleus mais que le nombre de personnes possédant des yeux marrons à 2 allèles est très rarement au dessus de 20%.

tracer_graphe(N = 10, P=20, mm=5, bb=5, i=20);

Ici, la tendance est à la diminution du nombre de personnes à 2 allèles marrons. Plus le nombre de personnes aux yeux bleu est grand, moins on a de personnes avec 2 allèles marrons. L’évolution de la population vers un grand nombre de yeux bleus est donc possible.

tracer_graphe(N = 10, P=20, mm=5, bb=5, i=100);

En augmentant le nombre de générations possibles à 100 générations, la courbe se lisse et se rapproche de plus en plus à un modèle d’exponentielle décroissante. Les différents cas de population commencent à suivre le meme modèle.

tracer_graphe(N = 10, P=20, mm=5, bb=5, i=500);

Avec un nombre de génération très grand (ici 500), les chance que la population ait un nombre de personnes avec 2 allèles marrons est plus restreint. On remarque que la concentration de la courbe se situe plutot vers le bas du graphe.

tracer_graphe(N = 10, P=500, mm=400, bb=50, i=200);

On passe à une population plus grande avec 500 habitants et sur 200 générations avec une proportion de yeux marrons à 2 allèles très élevé. On remarque sur le graphe que le maximum de personnes aux yeux bleus n’atteint jamais plus de 85% sur une génération alors que l’on atteint les 100% sur certains cas de population sur les doubles allèles marrons. Cela s’explique par le fait que avec si peu de personnes aux yeux bleus, il faut plus de générations pour pouvoir possiblement atteindre les 100% de yeux bleus et qu’il est plus probable d’avoir une population à forte concentration de personnes avec 2 allèles marrons.

tracer_graphe(N = 10, P=500, mm=400, bb=50, i=500);

On remarque qu’avec un très grand nombre de générations, les 100% de yeux marrons à 2 allèles ou les 100% à yeux bleus est possible. Cependant, on observe quand même que la tendance est à la diminution du nombre de yeux bleus. Les courbes sont plus concentrées vers la gauche du graphe.

Question 2 : Cas d’une grande population

tracer_graphe(N = 10, P=2000, mm=1200, bb=400, i=100);

Dans le cas d’une population encore plus large avec 2000 habitants sur 100 générations, on n’atteint jamais les 0% d’yeux bleux ni un grand nombre de yeux bleus. On remarque un grand pic à 20% d’yeux bleus car l’on commence avec une population de base avec un trè grand nombre de yeux marrons à double allèles.

tracer_graphe(N = 10, P=2000, mm=400, bb=1200, i=100);

Dans le case inverse avec une grande population de yeux bleus à 60%, la population reste aux alentours de 40 à 80% d’yeux bleus si l’on prend sur 100 générations. On observe un pic qui indique que le nombre de yeux marrons à double allèles chute fortement au fil des générations et ne remonte peu ou pas.

tracer_graphe(N = 10, P=2000, mm=500, bb=500, i=100);

Dans le cas d’une distribution équitable de yeux marrons à 2 allèles et de yeux bleus, la tendance est à une population qui change peu sur peu de génération.

Question 3 : Cas d’une petite population avec préservation

new_population_preservation = function(pop, P = 20, mm = 12, bb = 4) {

for (cmpt in 1:P-2) {
  couple = sample(size=2, pop, replace = T);
  parent1 = ifelse(couple[1]==0,0, 
         ifelse(couple[1]==1, sample(0:1, 1),1));
  parent2 = ifelse(couple[2]==0,0, 
         ifelse(couple[2]==1, sample(0:1, 1),1));
  pop[cmpt] = parent1 + parent2;
}
pop[P-1] = 0;
pop[P-2] = 2;
pop
}

evolution_pop_preservation = function(P = 20, mm = 12, bb = 4, i = 20) {
  MM <- c()
  BB <- c()
  MM[1] = mm;
  BB[1] = bb;
  pop = generer_pop(P, mm, bb);
  for (gen in 2:i) {
    pop = new_population_preservation(pop, P, mm, bb);
    BB[gen] = sum(pop [! pop %in% c(0,1)])/2;
    MM[gen] = length(pop [! pop %in% c(1,2)]);
  }
  return(list(MM, BB));
}
  
tracer_graphe_preservation = function(N=10, P = 20, mm = 12, bb = 4, i = 20) {
  set.seed(7)
  alleles = evolution_pop_preservation(P, mm, bb, i);
  plot((alleles[[2]]/P)*100, (alleles[[1]]/P)*100, main = "Proportion de porteurs de 2 allèles marrons par rapport à la proportion de porteurs de yeux bleus", xlab = "BBi/P", ylab = "MMi/P", xlim = c(0,100), ylim = c(0,100), type='l', col="blue")
  for (j in 1:N) {
  alleles = evolution_pop_preservation(P, mm, bb, i);
  lines((alleles[[2]]/P)*100, (alleles[[1]]/P)*100, col="blue");
  }
}

On se place maintenant dans le cas d’une préservation des diversités génétiques sur les allèles.

tracer_graphe_preservation(N = 10, P=20, mm=5, bb=5, i=2000);

Sur une petite population de 10 personnes, sur 2000 générations, on remarque que l’on peut passer d’une population avec beaucoup de yeux bleus qu’avec aucun. Cependant, on observe que les cas où une génération possède peu de personnes avec 2 allèles différentes sont très rares.

tracer_graphe_preservation(N = 10, P=2000, mm=1200, bb=400, i=200);

On observe que les chemins pris par les populations sont très peu diverses sur un nombre de génération petite.

tracer_graphe_preservation(N = 10, P=2000, mm=1200, bb=400, i=500);

Le graphe est sensiblement le même que celui avec une génération plus petite. On trouve une certaine stabilité dans l’évolution des populations.

tracer_graphe_preservation(N = 10, P=2000, mm=500, bb=500, i=100);

De même, une certaine stabilité se retrouve. On remarque le modèle s’éloigne de l’exponentielle décroissante mais s’y apparente. La préservation permet d’exprimer plus fortement les types de double allèles lorsque l’on passe de génération en génération.

Qestion 4)

Il faut réaliser que le nombre de personnes à yeux bleus après une certaine génération dépend de nombreux facteurs tels que la répartition des types d’allèles, la taille de la population et du nombre de génération. De plus, on ne tient pas compte du genre de la personne. Mon intuition n’est au final pas complète mais dans la lignée des résultats sauf pour la préservation. Il faudrait tester le fait qu’il y a des cas où la population ne peut plus continuer d’avancer par l’arrivée d’une génération mono-genre. Les paramètres à modifier en priorité serait donc la prise en compte des genres.