Question 0 : Décrire votre intuition

Que va-t-il se passer selon vous ? Comment va évoluer la proportion de personnes ayant les yeux bleus ?

Je pense que, en fonction des proportions de départ, les yeux bleus vont se répandre, rester stables ou diminuer en nombre. Je pense que si au départ 50% de la population a les yeux bleus et le reste marron (MM), la proportion va augmenter. Je pense que si 50% de la population est MB et le reste 25% MM et 25% BB la proportion va rester stable. Et je pense que si il y a moins de 25% de personnes ayant les yeux bleus, ce pourcentage va diminuer.

Question 1 : Cas d’une petite population

Voici le code des fonctions permettant la génération d’une courbe montrant l’évolution des proportions d’allèles BB et MM au fil des populations et selon des paramètres initiaux.

# Affiche sur une courbe les N trajectoires des alleles BB en bleu et MM en rouge
generer = function(N,P,Imax,P0) {
  set.seed(42)
  # On crée la fenetre pour l'affichage des trajectoires
  plot.function(sin,col ='white',ylim=c(0,1),xlim=c(0,Imax+2),main="Evolutions des proportions d'allèles", sub="BB en bleu et MM en rouge", ylab="Poucentage d'alléles", xlab="i-ème population")
  for(i in 1:N){ # On crée les N trajectoires de populations partant de P0 = (BB0,MM0)
    #Creer une trajectoire
    trajectoire(P,Imax,P0)
  }
}

# Crée une trajectoire de Imax pas partant de P0 avec une population de P individus
trajectoire = function(P,Imax,P0){ 
  ratio <- P0/P # La proportion de BB et MM dans la population
  
  # On récupère les proportion de chaque combinaison
  BB <- ratio[1]
  MM <- ratio[2]
  BM <- 1 - (BB + MM)
  
  # On générer Imax populations (dont on garde seulement les ratios de BB et MM pour l'affichage) dans les deux variables suivantes
  yeuxB <- BB
  yeuxM <- MM
  for(i in 1:Imax){
    # On crée une population
    pop <- population(P,BB,BM,MM)
    
    # On récupére les informations voulues à partir de la population
    # compter les combinaisons BB
    popBB <- pop == 2
    BBi <- sum(ifelse(popBB,1,0))
    # compter les combinaisons MM
    popMM <- pop == 0
    MMi <- sum(ifelse(popMM,1,0))
    
    # On récupère les ratios
    BB <- BBi/P
    MM <- MMi/P
    BM <- 1 - (BB + MM)
    
    # On enregistre l'étape
    yeuxB <- c(yeuxB,BB)
    yeuxM <- c(yeuxM,MM)
  }
  
  # On affiche les courbes
  lines(yeuxM, col='red',type='l')
  lines(yeuxB, col='blue',type='l')
}

# Renvoie une population de P individus à partir d'un autre population dont les proportions d'alleles sont BB, BM et MM. Cette population s'exprime en nombre d'alleles bleues
population = function(P,BB,BM,MM){
  pop <- c()
  for(i in 1:P){
    # On selectionne deux parents aléatoirement (représentés par leur nombre d'alleles bleues)
    pere <- sample(x = c(2,1,0), prob = c(BB,BM,MM),size = 1)
    mere <- sample(x = c(2,1,0), prob = c(BB,BM,MM),size = 1)
    
    # On choisit une allele du parent au hasard (1 si l'allele est bleue, 0 sinon)
    if(pere == 1) pere <- sample(c(0,1),prob = c(0.5,0.5),size =1)
    else if(pere == 2) pere <- 1
    if(mere == 1) mere <- sample(c(0,1),prob = c(0.5,0.5),size =1)
    else if(mere == 2) mere <- 1
    
    # On recupere l'enfant (représenté par son nombre d'alleles bleues)
    enfant <- pere + mere
    pop <- c(pop,enfant)
  }
  pop
}

Courbe 1, P0 = (4, 12)

generer(10,20,20,c(4,12))

Courbe 2, P0 = (12, 4)

generer(10,20,20,c(12,4))

Courbe 3, P0 = (5, 5)

generer(10,20,20,c(5,5))

Sur de petites populations, les tendances sont difficilement observables car les différentes trajectoires sont trés différentes. Il y a parfois des cas ou une combinaisons d’alleles devient la seule combinaison de la population (Courbe 1 : alleles MM) mais pas tout le temps !

On remarque cependant que :

  • avec une population P0 = (4,12). soit 20% et 60%. La proportion de personnes ayant les yeux bleus reste en général inférieure à la proportion de personnes ayant les yeux marrons. Elle a aussi également tendance à diminuer.
  • avec une population P0 = (12,4). soit 60% et 20%. C’est l’inverse qui se produit : en général les yeux bleus prennent une part de plus en plus importante et les yeux marrons restent an quantité assez faible
  • avec une population P0 = (5,5). soit 25% et 25%. La proportion d’yeux bleus peut aussi bien augmenter que diminuer. De même pour les yeux marrons.

Une tendance que l’on peut observer sur les deux premieres courbes est que : entre la premiere et la deuxieme population il y a une baisse des taux d’alleles BB et MM. Cela signifie que le taux d’alleles BM augmente au “premier coup”. Mais ce n’est pas le cas pour le troisième graphique, je suppose donc que ces proportions étaient plutôt stables.

Question 2 : Cas d’une grande population

Courbe 4, P0 = (400, 1200)

generer(10,2000,100,c(400,1200))

Courbe 5, P0 = (1200, 400)

generer(10,2000,100,c(1200,400))

Courbe 6, P0 = (500, 500)

generer(10,2000,100,c(500,500))

Avec des populations de taille plus grande, on peut plus facilement observer des tendances. L’évolution sur une grande population est beaucoup moins instable que l’évolution dans de petites populations (pas de grands écart par rapport aux proportions initiales ou de disparition de combinaison)

Pour la Courbe 4 et la Courbe 5, on observe une chute des proportion d’alleles BB et d’alleles MM entre la population P0 et la population P1. Ensuite, les combinaisons d’allèles restent à des proportions stables.

Pour la Courbe 6, les proportions restent stables au fils des âges (en général). Il ya cependant quelques cas dans lesquels une combinaison augmente (ou diminue) en pourcentage mais cette augmentation n’est pas brusque.

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

genererStable = function(N,P,Imax,P0){
  set.seed(42)
  # On crée la fenetre pour l'affichage des trajectoires
  plot.function(sin,col ='white',ylim=c(0,1),xlim=c(0,Imax+2),main="Evolutions des proportions d'allèles", sub="BB en bleu et MM en rouge", ylab="Poucentage d'alléles", xlab="i-ème population")
  for(i in 1:N){ # On crée les N trajectoires de populations partant de P0 = (BB0,MM0)
    #Creer une trajectoire
    trajectoireStable(P,Imax,P0)
  }
}

trajectoireStable = function(P,Imax,P0){
  ratio <- P0/P # La proportion de BB et MM dans la population
  
  # On récupère les proportion de chaque combinaison
  BB <- ratio[1]
  MM <- ratio[2]
  BM <- 1 - (BB + MM)
  
  # On générer Imax populations (dont on garde seulement les ratios de BB et MM pour l'affichage) dans les deux variables suivantes
  yeuxB <- BB
  yeuxM <- MM
  for(i in 1:Imax){
    # On crée une population
    pop <- population((P-2),BB,BM,MM)
    pop<- c(pop,0,2)
    # On récupére les informations voulues à partir de la population
    # compter les combinaisons BB
    popBB <- pop == 2
    BBi <- sum(ifelse(popBB,1,0))
    # compter les combinaisons MM
    popMM <- pop == 0
    MMi <- sum(ifelse(popMM,1,0))
    
    # On récupère les ratios
    BB <- BBi/P
    MM <- MMi/P
    BM <- 1 - (BB + MM)
    
    # On enregistre l'étape
    yeuxB <- c(yeuxB,BB)
    yeuxM <- c(yeuxM,MM)
  }
  
  # On affiche les courbes
  lines(yeuxM, col='red',type='l')
  lines(yeuxB, col='blue',type='l')
}

Courbe 7

genererStable(10,20,2000,c(5,5))

Courbe 8

genererStable(10,20,2000,c(12,4))

Courbe 9

genererStable(10,20,2000,c(4,12))

Cette modification modifie la dynamique de la question1 en ce sens que les parents ne sont pas choisit uniformément pour tout les enfants (en de même pour les allèles). Cela empêche toute stabilisation à 100% d’une allèle et fait donc osciller les proportions. Comme nous sommes sur de petites populations, leurs proportions d’alléles sont tres instables d’une génération à une autre. Cela nous permet d’observer les Courbes ci-dessus.

Il ne me semble que, comme ces trajectoires oscillent, elles sont attirées par les extrèmes : 1 et 0. Mais je n’en suis pas sure. C’ets néanmoins la seule informations que je peux supposer à partir de ces courbes assez “denses” et peu lisibles.

Question 4

Contrairement à mon intuition de départ, les proportions restent plutôt stables et aux alentours de la proportion de départ (ou juste en dessous) quand le pourcentage d’allèles BB est différent de 25%.

Une autre hypothèse que l’on pourrait tester est : dans une petite poulation : pour une proportion d’yeux bleus > 60% et avec 0% de MM, la combinaison MM restera en dessous de 20%

Test :

generer(10,20,40,c(12,0))

D’après la courbe obtenue ci-dessus on voit que l’hypothèse est fausse. En effet, il y a même une trajectoire où la proportion de MM atteint les 100%

Si je devais modifier le modèle proposé, j’ajouterai le sexe des parents (et du coup des enfants). Cela permettrai de voir l’évolution des yeux bleus mais aussi des proportions d’hommes et de femmes tout en modifiant (surement) les trajectoires des allèles (car on choisirait chaque parent dans une population différente.)

Beaucoup d’autres modifications pourraient y être apportées (en compléxifiant la simulation), telles que la prise en compte du nombre d’enfants par famille (selon certaines probabilités) et du coup l’évolution aussi du nombre de personnes dans la population au fil du temps.

En conclusion, le comportement observé lors de cette simulation est bien différent de mes intuitions mais me parait logique.