Tout d’abord, on initialise le DM en fixant une Seed.

set.seed(456762);

Question 1 : Cas d’une petite population

Grace à l’algo suivant, on génère à l’aide du nombre de personnes P ayant des allèles BB et MM pour une population de taille donnée pop, sur Imax génèrations.

# P   => Vecteur des proba, de taille 2, (BB,MM)
# pop => Taille de la population 
# I   => Nombre de génération voulue
population <- function(P, pop, I){ 
  df <- data.frame();
  df <- rbind(df,data.frame(P[1],P[2]));
  for(j in 1:I){
      proba <- c(P[1]/pop,P[2]/pop,1-(P[1]+P[2])/pop);#On recalcule les probabilité à chaque génération d'enfant
      P[1]<-0;
      P[2]<-0;
      for (i in 1:pop) {
        parents <- sample(c("B","M","BM"),2,T,proba); # on tire les parents
        if (parents[1] == "BM" && parents[2] == "BM"){ # si les 2 parents on les allèlles BM
          enfant <- sample(c("B","M","BM"),1,T,c(0.25,0.25,0.5));
        }
        else{
          if ((parents[1] == "B" && parents[2] == "M")||(parents[2] == "B" && parents[1] == "M")){ # si un parent à les allèlles BB et l'autres MM
            enfant <- "BM";
          }
          else{ # si un parent à l'allele BM et l'autre l'allèle BB ou MM
            enfant <- sample(parents,1);
          }
        }
        # On incrémente en fonction des allèles de l'enfant
        if(enfant == "B") {
         P[1] <- P[1]+1; 
        } else if(enfant == "M") {
         P[2] <- P[2]+1; 
        }

      }
      df <- rbind(df,data.frame(P[1],P[2])); # on stock les resultats dans un taleau
  }
  df
}

Cette fonction suivante permet de tracer l’évolution des allèles dans une population et de répeter l’experience un nombre de fois voulu, N.

Les courbes marron représenteront le nombre d’individus avec l’allèle MM (yeux marrons) et les courbes bleues représenteront le nombre d’individus avec l’allèle BB (yeux bleus).

rendu <- function(P, pop, I, N, titre="") {
  plot(NULL, xlim = c(0,I), ylim = c(0, pop), main=titre, ylab="Nombre d'individus", xlab = "Génération");
  ratio <- 0
  for(i in 1:N) {
    res <- population(P,pop,I);
    lines(0:I,res$P.1,type="l",col="blue"); # representation du nombre de personne avec l'allele BB
    lines(0:I,res$P.2,type="l",col="brown"); # idem mais des MM
    #lines(0:I,pop-(res$P.1+res$P.2),type="l",col="green"); # decommenter si on veux les BM
  }
}
Analyse des différents cas :
INTUITION :

Dans le cas d’une petite population, il y aura une dominance de la part de l’allèle dominant et peut-être disparition de l’autre allèle.

SIMULATION :
  • P0 = (4, 12)

Comme prévu, il n’y a rien de déductible si ce n’est que l’allèle dominant reste généralement dominant.

Essayons avec un Imax plus grand, comme il est suggeré dans l’énoncé :