Probat et Simulation

Antoine BLANC
Question 0 - Intuition

Je pense que pour une grande population, la population d’arrivé va être différent en fonction de la population de départ. Si la population comporte beaucoup plus de personnes aux yeux marron que de personne aux yeux bleu, la population final auras plus d’œil marron que bleu. Inversement si la population de départ comporte plus de personnes aux yeux bleu.

Pour une petite population, les yeux marrons prendront le dessus sur les yeux bleu car la probabilité d’avoir des yeux marron est plus importante et les variation sur 20 personnes peuvent être rapide.

Si on garde à chaque génération une personne qui a les yeux bleu et une autre les yeux marron, on aura un équilibre entre les yeux bleu et marron.

Code de la simulation
#Initialisation de variable
#MM représente les ceux allèles maron, MB représent une allèle maron et une bleu, BB représente les deux allèles bleu
MM=0; MB=1; BB=2;
#M représente un allèle maron, B représente un allèle bleu
M=0; B=1;
#Cette fonction permet de simuler évolution des yex au fil des âges
simuler = function(){
  
  set.seed(11);
  s = c() #s est un tableau de population a la ieme génération
  
  #lMM et lBB représente les pourcentages des yeux des I les générations et des N testes
  lMM=matrix(nrow=N, ncol=I+1)
  lBB=matrix(nrow=N, ncol=I+1)
  
  #permet de faire N testes
  for(i in 1:N){
    #populationde départ
    population = c(rep(MM,nbMM), rep(MB,nbP-nbBB),rep(BB,nbBB))
    
    s = fonc1(population)
    #Calcul du poucentage d'oeil maron
    for(k in 1:I){lMM[i,k+1] = s[k]/nbP*100}
    
  }
  #Rempli la matrice d'oeil bleu
  for(j in 1:N){
    lMM[j,1]=(nbP-nbBB)/nbP*100
  }
  
  lBB = construirlBB(lMM, lBB)
  
  afficherC(lMM,"brown","Pourcentage d'oeil maron", "Yeux maron")
  afficherC(lBB, "blue", "Pourcentage d'oeil bleu", "Yeux bleu")

}

#Rempli la matrice d'oeil bleu
construirlBB= function(lMM, lBB){
  for(i in 1:N){
    for(j in 0:I+1){lBB[i,j]=(100-lMM[i,j])}
  }
  
  return(lBB)
}

#Affiche les courbes des yeux
afficherC = function(l, color, couleurY, couleur){
  xrange = seq(0,I,1)
    plot(xrange, l[1,], type="l", xlab="génération", ylab=couleurY , ylim = c(0,100), main=couleur)
    for(k in 1:N){
      lines(xrange, l[k,], type="l", lwd=1.5, col=color)
    }
}

#Crée la prochaine génération
fonc1 = function(population){

  generations = c()
  
  
  for(i in 1:I){
    nbBleu=0
    nbMar=0
    
    #Choix des parents
    tabPapa = sample(population, size = nbP,replace= TRUE, prob = NULL)
    tabMaman = sample(population, size = nbP,replace= TRUE, prob = NULL)
    
    #Prochaine générarion
    population = choisirAllele(tabPapa,tabMaman)
    
    #Pour la question 3
    if(QUESTION3){
      population[1]=MM
      population[2]=BB
    }
    
    #Cacul le nombre d'oeil maron
    for(j in 1:nbP){
      if(population[j] != BB ){nbMar= nbMar+1}
    }
    generations[i]=nbMar
    
  }
  
  return (generations)
}

#Crée la prochaine génération en fonction des allèles du père et de la mère
choisirAllele = function(tabPapa, tabMaman){
  newPop = c(1:nbP)
  #Pour totue la population
  for(i in 1:nbP){
    #Choisie l'allèle du père
    if(tabPapa[i]==MM){alleleP=M}
    else if(tabPapa[i]==BB){ alleleP=B}
    else{
      var = runif(1,0,1)
      if(var<0.5){alleleP = M}
      else{alleleP = B}
    }
    
    #Choisie l'allèle de la mère
    if(tabMaman[i]==MM){alleleM=M}
    else if(tabMaman[i]==BB){ alleleM=B}
    else{
      var = runif(1,0,1)
      if(var < 0.5){alleleM = M}
      else{alleleM = B}
    }
    
    #Crée le fils en fonction de l'allèle du père et de la mère
    if(alleleP + alleleM == 0 ){newPop[i]=MM;}
    else if(alleleP + alleleM == 1){newPop[i]=MB}
    else{newPop[i]=BB}
    
  }
  
  return (newPop)
}
Question 1
QUESTION3 = FALSE

#Initialisation de la population et des testes à faire
nbP=20;
I=20;
N=10;

#Test pour nombre de MM=12 et nombre de BB=4
nbMM=12; nbBB=4;
simuler()

#Test pour nombre de MM=4 et nombre de BB=12
nbMM=4; nbBB=12;
simuler()

#Test pour nombre de MM=5 et nombre de BB=5
nbMM=5; nbBB=5;
simuler()

On constate que la population final peut varier énormément. Au bout de la 20eme génération, les populations peuvent ne plus comporter que des personnes aux yeux bleus ou aux yeux marrons. Même si la population de départ comporte beaucoup d’œil marron ou d’œil bleu. Mais au file des générations la moyenne d’œil marron ou d’œil bleu reste proche de la population de départ.

Question 2
QUESTION = FALSE

#Initialisation de la population et des testes à faire
nbP=2000;
I=100;
N=10;

#Tests pour nombre de MM=1200 et nombre de BB=400
nbMM=1200; nbBB=400;
simuler()

#Tests pour nombre de MM=400 et nombre de BB=1200
nbMM=400; nbBB=1200;
simuler()

#Test pour nombre de MM=500 et nombre de BB=500
nbMM=500; nbBB=500;
simuler()

-Si les yeux marrons dominent les yeux bleus, au bout de la 20eme génération la domination moyenne ne change pas. -Si les yeux bleus dominent les yeux marrons, au bout de la 20eme génération les yeux marrons prennent légèrement le dessus.

Les résultats des simulation sont similaire à la question 1 avec une variation moins importante. Les moyennes des couleurs des yeux reste au tour de la population de départ.

Question 3
QUESTION3 = TRUE

#Initialisation de la population et des tests à faire
nbP=20;
I=2000;
N=10;

#Test pour nombre de MM=12 et nombre de BB=4
nbMM=12; nbBB=4;
simuler()

#Test pour nombre de MM=4 et nombre de BB=12
nbMM=4; nbBB=12;
simuler()

#Test pour nombre de MM=5 et nombre de BB=5
nbMM=5; nbBB=5;
simuler()

Je ne sais pas vraiment comment interpréter ces courbes. Mais on peut constater que les courbe reste au tour de la population de départ. Comme pour les précédentes questions.

Question 4

Pour une petite population les personnes aux yeux ne disparaisse pas. Elle reste au tour de la population de départ. Les personnes qui ont un allèle bleu et un allèle marron joue un rôle importent. Car même si c’est personne on les yeux marron, elles peuvent avoir des enfant au yeux bleu.

Pour améliorer le modèle, je pense qu’il faudrait avoir le nombre moyen d’enfant par couple car dans notre simulation on ne tien pas compte de cette information. Et ceci peut créer de grande variation. Je ne pense pas que différencier les sexes changerait beaucoup les résultats.