Question 0 : intuitions

(BB0, MM0) = (4, 12) (BB0, MM0) = (12, 4) (BB0, MM0) = (5, 5) Je pense que pour les 3 cas, le nombre de BB et MM va stagner (être en moyenne le même qu’au départ). Je ne vois pas pourquoi cela évoluerait les BB et MM ne vont pas disparaitre, ils seront potentiellement reformés a partir des BM et MB. Les proportions ne devraient donc pas évoluer selon moi. Par contre on peut facilement imaginer des générations où il n y a personne avec les yeux bleus (vu le faible nombre de personnes). Je pense également que dans certains cas l’allèle bleu peut carrément disparaître. En effet on peut facilement l’imaginer dans la première population : les 4BB font un enfant leurs enfants avec des MM, les BM font leurs enfants avec les MM (en faisant l’hypothèse que tous les enfants résultants deviennent des MM). Il reste donc les BM provenant des mariage BB/MM. Ceux-là disparaissent alors avec des mariages BM/MM.

Je pense que pour I tendant vers l’infinie on va observer la même chose que précedemmenst sauf que la probabilité qu’un allèle disparaisse est quasiment nulle. On est dans un cas où on évite un possible coup de “malchance” comme dans la faible population de la première question.

  1. Avec ce système on évite une potentielle disparition d’un gène.

Question 1 : Population de 20 individus

4BB,12MM

evolution_couleur(30,20,4,12,10)

Avec une population de 20 individus, on remarque une instabilité très élevée. Cela est causé par le fait qu’une population faible est plus sensible à l’aléatoire. On remarque certaines réalisations qui mènent à une disparition complète de l’allèle. A l’inverse, on observe certains pics voire même, dans de rares cas une disparition du gène marron, alors qu’il était majoritaire au départ. Il ne faut pas oublier qu’on choisit les parents au hasard, dans la réalité les couples auraient en moyenne un certain nombre d’enfant, dans notre simulation on peut se retrouver dans un cas ou les personnes possédant les allèles bleus ne font pas d’enfants pendant une génération, l’allèle disparaît alors. Le peu d’individus rend également la simulation très sensible à l’effet boule de neige, surtout si un allèle en minorité est réparti sur des personnes par paire (par exemple BB), si ces parents en minorité ne sont pas selectionnés on assiste potentiellement à une disparition d’un allèle. C’est cela qui explique la facilité à voir observer la domination d’un allèle dans cette situation.

12BB,4MM

evolution_couleur(30,20,12,4,10)

Dans cette situation on assiste à exactement la même chose que précedemment, sauf que c’est l’allèle bleu qui l’emporte plus facilement. Aussi, on a moins de personnes aux yeux bleus que de personnes aux yeux marrons sur le précédent test à cause de la combinaison MB qui mène à des yeux marrons. Dans les faits ce test est exactement le même si on compare juste le nombre d’allèles.

5BB,5MM

evolution_couleur(30,20,5,5,10)

On a un nombre d’allèle bleus et marrons identique, on observe donc bien les deux cas de disparition d’allèle qui ont la même chance d’arriver.

Nous passons maintenant à une grande population (2000 individus), ce cas devrait être moins sensible à l’aléatoire.

Question 2 : Population de 2000 individus

400BB, 1200MM

evolution_couleur(100,2000,400,1200,10)

1200BB, 400MM

evolution_couleur(100,2000,1200,400,10)

500BB, 500MM

evolution_couleur(100,2000,500,500,10)

Chacuns des tests tend directement vers une certaine valeur, on n’observe pas de disparition de l’allèle car la population est assez grande pour résister à un coup de “malchance”. Pour mieux illustrer le fait que le nombre de personnes ayant les yeux bleus tend directement vers une certaine valeur, réalisons deux autres tests.

Tests avec une population de départ : 1000BB/1000MM

evolution_couleur(100,2000,1000,1000,4)

Tests avec une population de départ : 2000BM

evolution_couleur(100,2000,0,0,4)

Avec ces deux tests, on remarque très bien ce qu’il se passe (et qui est bien plus visible pour une population plus grande). On remarque à chaque fois une grande variation du passage de la première génération à la deuxième. Cela provient du fait que les allèles ne sont pas uniformément répartis dans la population de départ. Il y a ce pic, mais ça ne veut pas dire que les allèles bleus disparaîssent. Les allèles se retrouvent juste répartis d’une manière plus équilibrées, mais en moyenne le nombre d’allèle qui “naviguent” va rester le même. Dans les deux derniers tests (1000/1000 et 0/0), le nombre de personnes possédant les allèles BB va tendre vers 500, la même chose pour MM et enfin 1000 pour les BM / MB.

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

evolution_couleur_preservation(5000,20,5,5,5)

Evidemment, la préservation évite la disparition totale d’un allèle. Ce qu’on observe c’est qu’au fil des 5000 générations on peut observer une oscillation totale (de 1 à 19 personnes qui possèdent les yeux bleus). Lorsque le nombre de personnes ayant les yeux bleus est à 1, l’oscillation peut être forte car on ne connait pas le nombre d’allèles bleus présents dans la population (au maximum 20 qui seraient tous répartis en couples BM). Par contre quand le nombre de personnes aux yeux bleus est 19, il est lent de “repeupler” la population “marron”, car on part d’un seul individu qui possède un ou deux allèles marron.

Questions 4

Dans mes intuitions je n’avais pas prévu le fait que les allèles allaient se réarranger de façon uniforme, changeant les proportions de couples BB et MM initiaux. Il pourrait être bien d’augmenter encore la taille de la population, la stabilité devrait être encore plus élevée. Pour le modèle actuel je modifierais en priorité le nombre d’enfant par individus. Dans notre modélisation il y a deux paramètres aléatoires qui ont une grande importance, le choix des parents, et l’aléatoire dans l’héritage du gène. Le choix des parents devraient un peu moins avoir d’importance et fixant par exemple une limite d’enfant pour les personnes, et en essayant de faire des couples fixes.

evolution_couleur <- function(Imax,P,nbinitBB,nbinitMM,nb_echantillons){
set.seed(32)


pop=(rep(0,P))#Allèles de la population 1:BB 2:MM 3:MB/BM
couleurspop=(rep(0,P))#1:yeux bleus 2:yeux marrons
yeuxbleus=(rep(0,Imax))






for(n in 1:nb_echantillons){

pprec=c(rep(1,nbinitBB),rep(2,nbinitMM),rep(3,P-nbinitBB-nbinitMM))#initialisation population

#compte des yeux bleus pour la population initiale
for(z in 1:P)
{
  if(pprec[z]==1) #allele BB:yeux bleus
  {
    couleurspop[z]=1
    yeuxbleus[1]=yeuxbleus[1]+1    #on compte les yeux bleus
  }
  else        #marron sinon
  {
    couleurspop[z]=2
  }
      
}
  
  
  
for(i in 2:Imax){

  for(j in 1:P){

    parent1=as.integer(runif(min=1,max=(P+1),1))
    parent2=as.integer(runif(min=1,max=(P+1),1))

    while((parent2==parent1)){#on evite d'avoir le même parent... dans notre simulation de toute façon ça ne va pas changer grand chose mais ça peut éviter de fausser si on a une seule (ou peu) personne avec deux allèles bleus par exemple
    parent2=as.integer(runif(min=1,max=(P+1),1))
    }
#On définit les deux allèles du fils
#allèles : 1:bleu 2:marron
#allele1
if(pprec[parent1]==1){allele1=1}
else{
  if(pprec[parent1]==2){allele1=2}
  else{#allèles BM : 50%/50%
    if(runif(1)>=0.5){allele1=1}else{allele1=2}
  }
}
  #allele2
    if(pprec[parent2]==1){allele2=1}
    else{
      if(pprec[parent2]==2){allele2=2}
      else{
        if(runif(1)>=0.5){allele2=1}else{allele2=2}
      }
    }   
    
    
    
#les deux parents ont les yeux bleus
if((allele1==1) && (allele2==1))
{
  pop[j]=1 #alors le fils a ses deux allèles bleus
}
    
    #les deux parents ont les yeux marrons
if((allele1==2) && (allele2==2))
{
  pop[j]=2 #alors le fils a ses deux allèles marrons
}
    
    #les deux parents ont allèles BM
if(((allele1==1) && (allele2==2)) ||((allele1==2) && (allele2==1)))#ou allele1!=allele2
{
      pop[j]=3
      
}
    
    
    
    
}#terminaison for population
  
  pprec=pop #la population actuelle devient la population precedente
  
  
  
#on compte le nombre de personnes aux yeux bleus
for(z in 1:P)
{
  if(pop[z]==1)#allele BB:yeux bleus
  {
    couleurspop[z]=1
    yeuxbleus[i]=yeuxbleus[i]+1    #on compte les yeux bleus
  }
  else        #marron sinon
  {
    couleurspop[z]=2
  }
      
}

  
}
 # hist(couleurspop,breaks=c(0.75,1.25,1.75,2.25),xlim=c(0,3),main=c("Histogramme pour Imax=",Imax,"Une population composée d'un nombre d'individus",P,"seed=",n),xlab="1:Yeux bleus, 2:Yeux marrons",ylab="Nombre d'invidus")
 plot(yeuxbleus,type="l",ylab="Nombre de personnes aux yeux bleus",xlab="Générations",ylim=c(0,P),main=paste("Test n°",n,"Population de départ :",nbinitBB,"BB/",nbinitMM,"MM"))
 yeuxbleus=(rep(0,Imax))#reset yeuxbleus pour le prochain test
 
 
}

}

evolution_couleur_preservation <- function(Imax,P,nbinitBB,nbinitMM,nb_echantillons){
set.seed(32)


pop=(rep(0,P))#Allèles de la population 1:BB 2:MM 3:MB/BM
couleurspop=(rep(0,P))#1:yeux bleus 2:yeux marrons
yeuxbleus=(rep(0,Imax))






for(n in 1:nb_echantillons){

pprec=c(rep(1,nbinitBB),rep(2,nbinitMM),rep(3,P-nbinitBB-nbinitMM))#initialisation population

#compte des yeux bleus pour la population initiale
for(z in 1:P)
{
  if(pprec[z]==1) #allele BB:yeux bleus
  {
    couleurspop[z]=1
    yeuxbleus[1]=yeuxbleus[1]+1    #on compte les yeux bleus
  }
  else        #marron sinon
  {
    couleurspop[z]=2
  }
      
}
  
  
  
for(i in 2:Imax){

  for(j in 1:P-2){

    parent1=as.integer(runif(min=1,max=(P+1),1))
    parent2=as.integer(runif(min=1,max=(P+1),1))

    while((parent2==parent1)){#on evite d'avoir le même parent... dans notre simulation de toute façon ça ne va pas changer grand chose mais ça peut éviter de fausser si on a une seule (ou peu) personne avec deux allèles bleus par exemple
    parent2=as.integer(runif(min=1,max=(P+1),1))
    }
#On définit les deux allèles du fils
#allèles : 1:bleu 2:marron
#allele1
if(pprec[parent1]==1){allele1=1}
else{
  if(pprec[parent1]==2){allele1=2}
  else{#allèles BM : 50%/50%
    if(runif(1)>=0.5){allele1=1}else{allele1=2}
  }
}
  #allele2
    if(pprec[parent2]==1){allele2=1}
    else{
      if(pprec[parent2]==2){allele2=2}
      else{
        if(runif(1)>=0.5){allele2=1}else{allele2=2}
      }
    }   
    
    
    
#les deux parents ont les yeux bleus
if((allele1==1) && (allele2==1))
{
  pop[j]=1 #alors le fils a ses deux allèles bleus
}
    
    #les deux parents ont les yeux marrons
if((allele1==2) && (allele2==2))
{
  pop[j]=2 #alors le fils a ses deux allèles marrons
}
    
    #les deux parents ont allèles BM
if(((allele1==1) && (allele2==2)) ||((allele1==2) && (allele2==1)))#ou allele1!=allele2
{
      pop[j]=3
      
}
    
    
    
    
}#terminaison for population
  
  
  pop[P]=2    #On assure une personne avec allele MM
  pop[P-1]=1  #On assure une personne avec allele BB
  
  pprec=pop #la population actuelle devient la population precedente
  
  
  
#on compte le nombre de personnes aux yeux bleus
for(z in 1:P)
{
  if(pop[z]==1)#allele BB:yeux bleus
  {
    couleurspop[z]=1
    yeuxbleus[i]=yeuxbleus[i]+1    #on compte les yeux bleus
  }
  else        #marron sinon
  {
    couleurspop[z]=2
  }
      
}

  
}
 # hist(couleurspop,breaks=c(0.75,1.25,1.75,2.25),xlim=c(0,3),main=c("Histogramme pour Imax=",Imax,"Une population composée d'un nombre d'individus",P,"seed=",n),xlab="1:Yeux bleus, 2:Yeux marrons",ylab="Nombre d'invidus")
 plot(yeuxbleus,type="l",ylab="Nombre de personnes aux yeux bleus",xlab="Générations",ylim=c(0,P),main=paste("Test n°",n,"Population de départ :",nbinitBB,"BB/",nbinitMM,"MM"))
 yeuxbleus=(rep(0,Imax))#reset yeuxbleus pour le prochain test
 
 
}

}