Dynamique des populations

en langage R

L'essentiel de cette page

La dynamique des populations se préoccupe (notamment) de prédire l'évolution des populations en tenant compte de la survie, du taux de reproduction...

En langage mathématique, il s'agit de produits scalaires. Rien de compliquer à mettre en place avec R, même pour un biologiste !

1- Un exemple de modélisation simple et médiatisé : le nombre de chats par chattes...

Prenons un exemple très simple...

J'ai une population théorique des chattes qui ne font que des chatons femelles à raison d'une portée de 4 chattes tous les 6 mois.

Un chaton mets 1 an avant d'être adulte et de pouvoir enfanter.

Comment prédire dans ce cas le nombre de chattes que j'aurais dans 5 ans si à t0 j'ai une chatte qui enfante de 4 chatons ?

On comprend intuitivement que, tous les 6 mois :

  • Le nombre de chatons bébés est égal au nombre d'adultes multiplié par 4.
  • Le nombre d'adolescent (chatons de 6 mois) est égal au nombre de chatons bébés de la génération précédente
  • Le nombre de chattes adultes est égal au nombre de chattes d'il y a 6 mois + le nombre de chatons adolescent de la génération précédente.

En gros, j'ai cette population initiale : 1 adulte et 4 bébé, pas d'adolescent de 6 mois.

g0 <- c(1,0,4)
g0 <- matrix(g0,nr=3) ;  rownames(g0) <- c("Adultes","Adolescents","Bébés") ; g0

A chaque génération, je vais multiplier le tout par cette matrice en faisant un produit scalaire :

mymat <- c(1,1,0,0,0,1,4,0,0) ;
mymat <- matrix(mymat,nr=3,byrow=T); mymat

La ligne 1 permettra de prédire le nombre d'adulte : adulte à tn+1 = adulte à tn * 1 + adolescent à tn * 1

La ligne 2 sera pour les adolescents : tn+1 = bébé à tn * 1

La ligne 3 pour les bébés : tn+1 = adultes à tn * 4

     [,1] [,2] [,3]
[1,]    1    1    0
[2,]    0    0    1
[3,]    4    0    0

Maintenant, je vais faire une boucle qui permettra de faire 10 cycles (1 cycle pour 6 mois) et de prédire le nombre de chats dans 5 ans.

  • Sur 5 ans, il y aura 10 générations :
gn <- g0
chats <- c()
for (i in c(1:10)){
  gn <- mymat%*%gn        # PRODUIT SCALAIRE
 chats <- c(chats,sum(gn)) # Cumul, bébés + adolescents + adultes
}
gn # résultat final
plot(chats,type="o",lwd=2,col="red",xlab="Générations")

Si on part du principe qu'une femelle chatte donne environ 12 chatons par an (6 par portée ou 3 portées de 4 chatons par an) : cela donnera alors la prédiction de ce site qui reprend cette information médiatique

"une chatte non stérilisée : 22464 chatons en 4 ans !!!"


Sauf que ce ne sera pas en 4 ans mais en 5 ans !!!

(à 4 ans, on sera autour de 6000)...


Première erreur...

2- Vers un modèle plus fiable de prédiction d'une population...

Faisons maintenant un modèle plus complexe qui tiendrait compte du taux de survie des matous sur 6 mois et en fonction de l'âge.

Qui tiendrait compte aussi du fait que dans les matous, il y a des chattes... et des chats.

Reprenons le même exemple en incluant le taux de survie !

Un adulte vit environ 15 ans mais a 7 ans en termes d'espérance de vie [1].

Soit un taux de mortalité de 14.3% donc un taux de survie de 0.86 (86%) par an.

On raison à l'échelle de 6 mois. Donc, on peut supposer qu'il reste tous les 6 mois 93% des chats (on a déduit la moitié de 14,3%).

Entre l'adolescence et l'âge adulte, on mettra le même taux de survie même si, c'est certainement moindre.

On estime que 15% des bébés chats meurent avant la fin du sevrage [2]. Cela donc une survie de 85% en 6 mois (sevrage sur 6 mois).

Enfin...

Dans a réalité, il naît en moyenne 2 chatons par chat (car il ne faut pas oublier les mâles !)

On partira ici du principe que l'on a 50/50 mâles/femelles et que chaque femelle se reproduit tous les 6 mois.

Ma nouvelle matrice de prédiction :

mymat <- c(0.93,0.93,0,0,0,0.85,2,0,0) ;
mymat <- matrix(mymat,nr=3,byrow=T) ; mymat
     [,1] [,2] [,3]
[1,] 0.93 0.93 0.00
[2,] 0.00 0.00 0.85
[3,] 2.00 0.00 0.00

Ma prédiction :

gn <- g0
chats <- c()
for (i in c(1:10)){
  gn <- mymat%*%gn        # PRODUIT SCALAIRE
 chats <- c(chats,sum(gn)) # Cumul, bébés + adolescents + adultes
}
gn # résultat final
plot(chats,type="o",lwd=2,col="green",xlab="Générations")

On se retrouve donc avec 700 chats en cinq ans, 300 matous en 4 ans et NON 22464 chats en 4 ans !!!

L'intérêt de la dynamique des populations... et des produits scalaires.