Devoir 1 : Dynamique de populations

Auteurs : Clément VALENTIN & Arthur CLERC-GHERARDI

Question 0 :
Nous allons d'abord donner notre intuition pour chaque question :

Maintenant que nous avons tenté de deviner le comportement de ce problème, nous allons commencer à programmer.

Question 1 :

set.seed(666)
proba_evol <- function(n1,n2)  #Fonction qui calcule la probabilité d'aller dans la ville 1

  {

  (n1 / (n1+n2))

}

evolution_population <- function(n1,n2,nb_iteration){

  nv1 = c()      #evolution de la ville 1
  nv2 = c()      #evolution de la ville 2

  nv1 <- c(nv1,n1)       #On ajoute le premier élément
  nv2 <- c(nv2,n2)

  for(i in 1:nb_iteration){
    if( runif(1,0.0,1.0) < (proba_evol(n1,n2)) ){

      n1 <- n1 + 1       #Si le tirage aléatoire est inférieur à la proba on augmente la population de la ville 1

    }else{

      n2 <- n2 + 1       #Sinon on augmente celle de la ville 2

    }

    nv1 <- c(nv1,n1)     #Puis on met à jour les tableaux d'évolution de pop.
    nv2 <- c(nv2,n2)
  }

  return (nv1 / ( nv1 + nv2))
}

On applique ensuite cette fonction à une autre fonction qui va l'appeler le nombre de fois souhaité pour pouvoir avoir différentes courbes.


graph_courbe <- function(n, n1, n2, nb_tirage) {


    for (i in 1:n) {
        # On fait une boucle pour le nombre de courbes nécessaire
        courbe = evolution_population(n1, n2, nb_tirage)  #On crée la courbe

        plot(courbe, type = "l", col = i, xlim = c(0, 1000), ylim = c(0, 1), 
            xlab = "Nombre de tirages", ylab = "Ratio habitants ville 1 / personnes")  #On l'affiche
        par(new = T)  #Permet d'afficher tout avec le meme plot
    }

}

graph_courbe(10, 1, 1, 1000)
title(main = "Courbes du ratio de population dans la ville 1", col.main = "red", 
    font.main = 4)

plot of chunk unnamed-chunk-2

On peut donc voir que dans les 100-150 premiers tirages, c'est très inégal et les courbes varient encore beaucoup mais à partir des 200-250 tirages on s'aperçoit que ça a tendance à stagner. On peut également remarquer que les limites ont tendance à se rapprocher du ratio ½.

Question 2 :
On va créer premièrement une fonction permettant de stocker un nombre n de limites dans un tableau.

loi_statistique_limite <- function(n, n1, n2, nb_tirage) {
    stat = c()  #On créé le tableau qui servira a stocké les limites
    for (i in 1:n) {
        ratio = evolution_population(n1, n2, nb_tirage)  #On stock une evolution de population
        stat <- c(stat, ratio[nb_tirage])  #On stock dans le tableau la limite en prenant le dernier tirage
    }
    return(stat)
}

On trace ensuite l'histogramme correspondant.

hist(loi_statistique_limite(5000, 1, 1, 1000), breaks = 50, xlab = "Limite", 
    ylab = "Fréquence", main = "Histogramme de la loi statistique limite")

plot of chunk unnamed-chunk-4

Nous avons fait le test sur 5000 évolutions de population. On se rend compte que notre intuition était bonne. En effet on a une fréquence à peu près similaire pour toutes les limites. Il faudrait faire le tests sur 100 000 évolutions de population pour avoir quelque chose qui soit presque égal de partout. Nous avons donc bien une loi uniforme.

Question 3 :
Nous refaisons le même histogramme mais pour des valeurs initiales différentes pour voir si la répartition initiale a un effet sur la loi/limite.

hist(loi_statistique_limite(5000, 10, 10, 1000), breaks = 50, xlab = "Limite", 
    ylab = "Fréquence", main = "Histogramme de la loi statistique limite avec n1=10 et n2=10")

plot of chunk unnamed-chunk-5

hist(loi_statistique_limite(5000, 100, 100, 1000), breaks = 50, xlab = "Limite", 
    ylab = "Fréquence", main = "Histogramme de la loi statistique limite avec n1=100 et n2=100")

plot of chunk unnamed-chunk-6

hist(loi_statistique_limite(5000, 1, 10, 1000), breaks = 50, xlab = "Limite", 
    ylab = "Fréquence", main = "Histogramme de la loi statistique limite avec n1=1 et n2=10")

plot of chunk unnamed-chunk-7

hist(loi_statistique_limite(5000, 1, 100, 1000), breaks = 50, xlab = "Limite", 
    ylab = "Fréquence", main = "Histogramme de la loi statistique limite avec n1=1 et n2=100")

plot of chunk unnamed-chunk-8

On se rend compte très facilement que la répartition initiale a un effet sur la valeur limite. En effet si on commence à 1 personne par ville, la loi statistique sera uniforme et qu'importe la limite, elles auront à peu près toutes la même fréquence. Par contre à partir de 10 personnes dans chaque ville, on voit que les fréquences aux alentours d'une limite de 0.5 sont bien plus importantes que pour les autres limites (même constatations pour 100 personnes dans chaque ville au départ).
Par contre si l'on fait une répartition initiale inégale comme le montre les deux derniers histogrammes, on voit que la limite à tendance à tendre vers 0 beaucoup plus souvent. Si on mettait les 100 personnes au départ dans la ville 1 alors la fréquence serai plus élevé pour les limites aux alentours de 1.
La répartition initiale a donc un impact sur la loi statistique de la limite.

Question 4 :
Principalement, l'étude grâce à l'informatique de ce problème n'a fait que confirmer nos pensées. La répartition initiale a un impact important sur l'évolution de la population ce qui est logique, une ville comportant peu de personnes en attire normalement pas beaucoup d'autres. Dans la vie, on retrouve ce phénomène si l'on regarde les populations urbaines et rurales. Bien sur ce qui permet aux gens de choisir une ville où s'installer n'est pas seulement sa taille, mais aussi la proximité des axes de communications, la position géographique, le climat, la prospérité de la ville (chômage important ou non), les activités au sein de la ville ou encore plein d'autres facteurs … Nous pourrions les rajouter pour modéliser ce problème de façon plus rigoureuse, ce que nous ferons certainement dans un prochain TP ou DM.