Question 0

Etant donné que les allèles sont choisis au hasard parmis les parents, on suppose que le nombre global de chaque type restera globalement le même. En fonction de BB0 et MM0, les proportions de personnes au yeux bleus peut réduire à cause de l’aspect recessif de l’allèle. Cela devrais se stabiliser à partir d’un i donné et ne pas empecher l’apparition d’un certain nombre d’yeux bleus c’est à dire de BB pour toute génération i suivante.

Question 1

#genere une population de taille P de B individus BB(2), M individus MM(0) et P-B-M individus BM(1).
gen0<-function(P,B,M){ 
  res=c(sample(size=B,c(2,2),replace = T),
       sample(size=(P-B-M),c(1,1),replace=T),
         sample(size=M,c(0,0),replace=T))
  res
}
#Genere une nouvelle generation de P individus à partir d'une génération de parents gen
nouvelle_generation <- function(P,gen){
  peres = sample(size=P, gen, replace=T)
  meres = sample(size=P, gen, replace=T)
  
  Allele_P=ifelse(peres==2, 1,#Si le parent donne 1 allèle bleu ou non
                  ifelse(peres==1, sample(size=P,x=c(0,1),replace=T), 0));
  Allele_M=ifelse(meres==2, 1,
                  ifelse(meres==1, sample(size=P,x=c(0,1),replace=T), 0));
  Enfants=Allele_P+Allele_M #nombre d'allèle bleus
  Enfants
}
#Basé sur le corrigé du TD, utilisé pour générer des graphiques.
eyeplot<-function(P,Pi,P0,title=""){ 
  counts <- table(Pi)
  if(nrow(as.data.frame(counts))<3){ #Pour éviter le bug sur points (proportion d'origine)
    Pi=c(Pi,2,1,0) # fausse les résultats
    counts <- table(Pi)
  }
  bar = barplot(counts/P, main="", xlab=title) 
  points(x = bar, y=c(sum(P0==0)/P,sum(P0==1)/P,sum(P0==2)/P)) #erreur dans certain cas, bloque Knit
}
#Genere une experience de N trajectoire, sur un horizon I, pour une population de taille P, avec B individus BB0 et M individus MM0 pour P0. preservation = T empeche qu'un des allèles B ou ne disparaisse.
experience<-function(N=1, I=1, P=20, B=0, M=0,preservation = FALSE){
  total=c()
  show("Résultats des N trajectoires :")
  show("BB MM")
  for(j in 1:N){
    Pi=gen0(P,B,M)
    for(i in 1:I){
      Pi<-nouvelle_generation(P,Pi)
      if(preservation){ #pour question 3, optimisable
        Pi[1]=2
        Pi[20]=0
      }
    }
    show(c(sum(Pi==2),sum(Pi==0)))
    total=c(total,Pi)
  }
  eyeplot(P*N,total,gen0(P*N,B*N,M*N),"Nombre d'allèles bleus (Moyenne sur N)")
}

P0=(BB0,MM0)=(4, 12) Imax=20

En moyenne la population BB minoritaire réduit en se mélangeant avec les autres, le nombre de BM augmente en raison de ces mélanges.

set.seed(20)

experience(N=10,I=20,P=20,B=4,M=12)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 4 8
## [1] 10  2
## [1]  0 18
## [1]  0 19
## [1]  2 15
## [1] 6 2
## [1] 0 8
## [1]  0 20
## [1]  0 16
## [1]  0 10

P0=(BB0,MM0)=(4, 12) Imax = 100

Avec un plus grand horizon, La pluparts des trajectoire vois l’extinction d’un des deux Allèle (MM=20 ou BB=20).

set.seed(20)
experience(N=10,I=100,P=20,B=4,M=12)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1]  0 20
## [1]  0 20
## [1] 20  0
## [1] 20  0
## [1] 3 6
## [1]  3 11
## [1] 20  0
## [1] 20  0
## [1]  0 20
## [1]  0 20

P0=(BB0,MM0)=(12, 4) Imax=20

De même que pour le premier cas inversé, de manière général dimminution des MM au profit des BB. Quelques cas invers en fonction de la seed.

set.seed(21)
experience(N=10,I=20,P=20,B=12,M=4)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 19  0
## [1] 9 0
## [1] 7 0
## [1] 5 1
## [1] 9 3
## [1] 16  0
## [1] 20  0
## [1]  0 10
## [1] 20  0
## [1] 10  0

P0=(BB0,MM0)=(5, 5) Imax=20

Résultats très variés. La plupars des cas vois beaucoup les BB ou les MM augmenter au détriment de l’autre population.

set.seed(20)
experience(N=10,I=20,P=20,B=5,M=5)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 8 2
## [1] 10  2
## [1] 13  1
## [1]  0 19
## [1] 13  1
## [1] 9 3
## [1]  0 15
## [1]  0 20
## [1] 20  0
## [1] 20  0

P0=(BB0,MM0)=(10, 10) Imax=20

Aucune trajectoire présentant une disparition total d’un allèle (pour seed=20) Résultats les plus variés

set.seed(20)
experience(N=10,I=20,P=20,B=10,M=10)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 13  1
## [1] 7 2
## [1] 6 9
## [1]  4 12
## [1] 10  2
## [1] 15  0
## [1]  0 13
## [1] 9 1
## [1]  2 11
## [1] 3 6

P0=(BB0,MM0)=(10, 10) Imax=100

Encore une fois avec Imax = 100 l’un des deux allèles disparait totallement presque pour toute les trajectoires.

set.seed(20)
experience(N=10,I=100,P=20,B=10,M=10)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 20  0
## [1]  0 20
## [1] 20  0
## [1]  0 20
## [1]  0 20
## [1] 20  0
## [1]  0 20
## [1] 20  0
## [1] 20  0
## [1]  0 20

Conclusion question 1

De manière général, avec un petit population(P=20), un des allèle disparait au fil des générations. la configuration de base influence lequel disparait et au bout de combien de générations.

Question 2

P0=(BB0,MM0)=(400, 1200) Imax=100

Globalement les MM reste majoritaires par rapport au BB. dans la pluparts des cas le nombre de BB et de MM réduit au profit du nombre de BM.

set.seed(20)
experience(N=10,I=100,P=2000,B=400,M=1200)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 166 955
## [1] 294 788
## [1]  172 1029
## [1] 389 632
## [1]  153 1086
## [1] 184 965
## [1]  143 1056
## [1]   73 1279
## [1] 261 776
## [1]   59 1382

P0=(BB0,MM0)=(1200, 400) Imax=100

Résultats simmilaire à ceux de la configuration précédente, avec les nombre MM et BB inversés.

set.seed(20)
experience(N=10,I=100,P=2000,B=1200,M=400)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 1033  173
## [1] 1347   53
## [1] 918 197
## [1] 945 195
## [1] 748 344
## [1] 851 247
## [1] 1097  132
## [1] 734 305
## [1] 1172  110
## [1] 1150  132

P0=(BB0,MM0)=(500, 500) Imax=100

Résultats très stables, dans beaucoup des cas (avec seed=20)le nombre de MM et le nombre de BB restent entre 400 et 600 personnes. globalement le nombre de BM reste d’environ P/2.

set.seed(20)
experience(N=10,I=100,P=2000,B=500,M=500)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 461 552
## [1] 789 269
## [1] 442 580
## [1] 558 447
## [1] 277 854
## [1] 529 493
## [1] 419 581
## [1] 247 805
## [1] 491 508
## [1] 405 547

P0=(BB0,MM0)=(0, 0) Imax=100

Comme précédement le nombre de BM de P100 est d’environ P/2=1000. le reste de la population étant plus ou moins équilibré entre les BB et les MM.

set.seed(20)
experience(N=10,I=100,P=2000,B=0,M=0)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 397 624
## [1] 691 339
## [1] 450 586
## [1] 602 417
## [1] 327 762
## [1] 554 466
## [1] 362 652
## [1] 240 830
## [1] 495 492
## [1] 432 522

P0=(BB0,MM0)=(1900, 100) Imax=100

Le nombre de MM réduit beaucoup, mais l’Allèle ne disparait pas (ou pas encore en P0), elle se retrouve chez un certain nombre de BM. La population de personne au yeux marron (MM+BM) augmente par rapport à P0! On suppose que dans le cas inverse (BB=100,1900) les personnes au yeux bleu (BB) ne disparaitrait pas, mais serait extrement rare <1% de la population.

set.seed(20)
experience(N=10,I=100,P=2000,B=1900,M=100)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 1734   11
## [1] 1869    3
## [1] 1853    2
## [1] 1870    1
## [1] 1692    6
## [1] 1893    1
## [1] 1822    4
## [1] 1816    6
## [1] 1949    0
## [1] 1795    8

Conclusion question 2

Par rapport au résultats des tests de la question 1, en augmentant la population à 2000 individu, la répartition des allèles reste stables par rapport à P0.

Quand le nombre total d’allèles de chaque type est équilibré à P0 (P0=(5,5),P0=(0,0)), le nombre de BM est assez stable à environ P/2 = 1000 individu, le reste étant plus ou moins équilibré en tre BB et MM.

Question 3

P0=(BB0,MM0)=(4, 12) Imax=2000

set.seed(19)

experience(N=10,I=2000,P=20,B=4,M=12,preservation = T)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 5 8
## [1] 10  3
## [1] 6 4
## [1] 15  1
## [1]  4 10
## [1] 12  2
## [1] 9 1
## [1] 6 8
## [1] 1 8
## [1] 5 9

P0=(BB0,MM0)=(12, 4) Imax=2000

set.seed(20)
experience(N=10,I=2000,P=20,B=12,M=4,preservation = T)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 2 9
## [1] 10  5
## [1] 13  3
## [1] 15  2
## [1] 3 6
## [1] 3 6
## [1] 4 8
## [1] 7 4
## [1] 9 4
## [1] 6 2

P0=(BB0,MM0)=(5, 5) Imax=2000

set.seed(20)
experience(N=10,I=2000,P=20,B=5,M=5,preservation = T)
## [1] "Résultats des N trajectoires :"
## [1] "BB MM"
## [1] 2 9
## [1] 10  5
## [1] 13  3
## [1] 15  2
## [1] 3 6
## [1] 3 6
## [1] 4 8
## [1] 7 4
## [1] 9 4
## [1] 6 2

Observations

Résultats assez simmilaires entre les 3 expériences. Avec la règle ajoutée, les résultats sont très variés, le système n’est pas pas vraiment “stable” (Ecart type), on observe néanmois qu’un certain nombre de trajectoires tendent vers un équilibre entre le nombre de BB et celui de MM (Moyenne stable).

Question 4

Les résultats obtenues à la question 2 sont assez cohérent avec mon intuition. En rechanche les résultats de la question 1 sont incohérent à mon intuition (quoi qu’un population uniforme soit effectivement stable), le hasard jouant un role trop important sur une population de 20 -> Loi des grand nombres.

On pourrais tester avec un population assez grande (P=2000) en augmentant encore Imax, pour voir si les résultats resterais stables, et dans le cas contraire essayer d’“évaluer” la stabilitée du système par rapport au couple (P/Imax).

On pourrais aussi refaire les tests de la question 3, avec une règle de préservation “moins forte” qui se contenterais de preserver 1 individu d’un type uniquement dans le cas d’une extinction du gène.