Question 1 : Cas d’une petite population

Intuition :

Je pense que sur une petite population la difference de repartition d’allèle peut etre grande, on peut facilement voir une allèle qui prend le dessus en 20 générations. Si on part avec une forte population de MM on à de forte chance d’avoir au final peu de BB à la fin et inversement.

#2 = BB, 1 = MB et 0 = MM
#Bleu = Population au allèles BB
#Rouge = Population au allèles MM
#Vert = Population au allèles MB

set.seed(4);

#--------Fonction de calcul des alleles 
calculcAllele<-function(Pere,Mere){
      if(Pere==2 && Mere==2) { 
        allele=2;
      }
      if(Pere==0 && Mere==0){
        allele=0;
      }
      if(Pere==1 && Mere==1 ){
         allele=sample(c(0,1,2),1,replace=TRUE,c(1/4,1/2,1/4));
      }
      if(Pere==2 && Mere==0 || Mere==2 && Pere==0 ){
        allele=1;
      }
      if(Pere==0 && Mere==1 || Mere==0 && Pere==1 ){
        allele=sample(c(0,1),1,replace=TRUE,c(1/2,1/2));
      }
      if(Pere==2 && Mere==1 || Mere==2&& Pere==1 ){
        allele=sample(c(1,2),1,replace=TRUE,c(1/2,1/2));
      }
  return(allele)
}

#--------Fonction d'initialisation de P0
initialisationPop<-function(Pop,Bleu,Marron){
  l<-c()
  for (h in 1:Bleu){  
    l<-c(l,2);
  }
  for (h in 1:Marron){
    l<-c(l,0);
  }
  for (h in 1:(Pop-Marron-Bleu)){
    l<-c(l,1);
  }
  #melange des alleles
  p0<-sample(l,Pop,replace=FALSE); 
  return(p0);
}

#--------Fonction qui creer des population de p0 a pImax
evolution<-function(P,I,B,M){
  #initialisation de toutes les variables
  y<-0;
  x<-0;
  bleu<-c(B);
  bleuMarron<-c((P-B-M));
  marron<-c(M);
  r<-c();
  p0<-c();
  ptemp<-c();
  
  p0<-initialisationPop(P,B,M);
  
  for(j in 1:I){ #Nombre de generation voulu
    for (k in 1:P){ #Nombre de personne dans une pop initial
      #On tire deux nombres aleatoirement pour choisir 2personnes dans la population 
      x<-floor(sample(c(1:P),1));
      y<-floor(sample(c(1:P),1));
      
      #On vérifi que l'on n'a pas tirer deux fois la meme personne
      while (x==y){ 
        y<-floor(sample(c(1:P),1));
      }
      allele<-calculcAllele(p0[x],p0[y]);
      ptemp<-c(ptemp,allele);
    }
    #On creer des vecteurs avec le nombre de personne BB, MM à chaque generation
    bleu<-c(bleu,sum(ptemp==2));
    marron<-c(marron,sum(ptemp==0));
    p0<-ptemp;
    ptemp<-c();
  }
  #return(bleu);
  return(c(bleu,marron));
}

#--------Fonction d'affichage
affichage<-function(P,I,B,M){
  stat<-evolution(P,I,B,M); #On recupere le res de la fonction evolution
  lines(stat[1:(I+1)], type='l', col='blue'); #On trace l'evolution des BB
  lines(stat[(I+2):(length(stat))], type='l', col='red');#On trace l'evolution des MM
  lines((P-stat[1:(I+1)]-stat[(I+2):(length(stat))]), type='l', col='GREEN');#On trace l'evolution des MB
}
  
main<-function(P=20,I=20,B,M,NbOcc=10){
  plot(c(M:M),xlim = c(1, I), ylim = c(0, P), ylab='NbPersonne', xlab='Generation')
  lines(c(B:B))
  for(i in 1:NbOcc){
    affichage(P,I,B,M);
  }
}

P(BB=4, MM=12, P=20)

main(P=20,I=20,B=4,M=12,NbOcc=10);

On voit dans cette simulation que la population de BB diminu des les premières générations pour donner des MB alors que le nombre de MM accroit moins brutalement. Au final les MM ont l’aire d’etre legerement predominant.

P(BB=12, MM=4, P=20)

main(P=20,I=20,B=12,M=4,NbOcc=10);