TP3 Analyse de réseaux biogéographiques

Avant de commencer le TP, je vais vous présenter une introduction à la biorégionalisation, ainsi que le contenu du TP.

 

3.1 Prise en main des données

Le package R bioregion met à disposition des données d’exemple d’abondance d’espèces végétales dans le sud de la France, fournies par le conservatoire botanique méditerranéen.

  • vegemat : matrice de co-occurrences sites-espèces.
  • vegesf : données spatiales associées (nous aurons besoin de sf pour les manipuler).

Nous allons dans un premier temps calculer quelques statistiques de base pour explorer ces données.

Créez un script TP3.R et enregistrez-le dans votre répertoire de travail, que vous pouvez également nommer TP3.

Dans ce TP, je m’inspire du cours sur la bioregionalisation avec les réseaux proposé par mon collègue Boris Leroy du Muséum national d’Histoire naturelle.

3.1.1 Charger les données

# Charger les packages
library(bioregion)
library(sf)

# Définir le répertoire de travail
setwd("~/Desktop/TP3") # A adapter à votre chemin sur votre ordinateur !

# Charger les données
data(vegemat)
data(vegesf)

3.1.2 Taille et aperçu des objets

dim(vegemat)         # Dimensions et aperçu de la matrice sites-espèces
vegemat[1:10,1:10]

vegesf               # Aperçu des entités spatiales 
class(vegesf)        # Objet sf
plot(vegesf)         # Représentation spatiale de vegesf

3.1.3 Les réseaux en biogéographie

Dans le TP précédent, nous avons travaillé sur un réseau dirigé et pondéré, où chaque lien représentait un flux entre deux communes (origine → destination). En biogéographie, nous allons maintenant manipuler un réseau bipartite.

Un réseau bipartite relie deux ensembles de noeuds distincts, ici les sites (zones géographiques) et les espèces (entités biologiques). Autrement dit, un lien existe uniquement entre un site et une espèce, jamais entre deux sites ou deux espèces directement. Ce type de réseau peut être pondéré (abondance d’espèces) ou non pondéré (présence/absence).

Le réseau bipartite sites-espèces que nous considérons dans ce TP est pondéré et stocké sous forme matricielle dans l’objet vegemat. Nous pouvons ici aussi facilement convertir cette matrice en un format “trois colonnes” à l’aide de la fonction mat_to_net().

# Conversion matrice -> "réseau"
vegenet <- mat_to_net(vegemat, weight = TRUE)
vegenet[1:10,]

On peut également considérer un réseau non pondéré.

# Suppression de la colonne poids
vegenet_bin <- vegenet[,-3]
vegenet_bin[1:10,]

Et le reconvertir en matrice avec net_to_mat().

# Conversion "réseau" -> matrice  
vegemat_bin <- net_to_mat(vegenet_bin)
vegemat_bin[1:10,1:10]

3.1.4 Exercice

Tracer les histogrammes du nombre moyen d’espèces par site et du nombre moyen de sites par espèce à partir de vegemat_bin (à l’aide de la fonction apply()).


Solution (cliquer pour afficher)
# Histogramme du nombre d'espèces par site
species_per_site <- apply(vegemat_bin,1,sum)
hist(species_per_site, col = "steelblue3")

# Histogramme du nombre d'espèces par site
sites_per_species <- apply(vegemat_bin,2,sum)
hist(sites_per_species, col = "#CC6666")

3.2 Similarité entre sites

Pour comparer les sites entre eux, nous pouvons calculer un indice de similarité basé sur la composition en espèces. Par exemple, l’indice de Simpson mesure la proportion d’espèces partagées entre deux sites, en donnant un poids plus fort aux espèces présentes dans les deux zones. Il est robuste aux différences de richesse spécifique.

sim <- similarity(vegemat, metric = "Simpson")
sim[1:10,]

Pour mieux comprendre la manière dont cet indice est construit, il est possible de récupérer les trois composantes fondamentales de la comparaison entre deux sites :

  • a : nombre d’espèces partagées (intersection)
  • b : espèces uniques au site 1
  • c : espèces uniques au site 2

Ces quantités peuvent être obtenues via :

simabc <- similarity(vegemat, metric = "abc")
simabc[1:10,]

3.2.1 Exercices

1. Tracer l’histogramme des similarités.


Solution (cliquer pour afficher)
# Histogramme du nombre d'espèces par site
hist(sim$Simpson, col = "steelblue3")

2. A partir de la formule de Simpson que vous trouverez ici et de la fonction pmin(), reconstruisez l’indice de Simpson à partir des valeurs
a, b et c de simabc.


Solution (cliquer pour afficher)
# Extraire a, b et c
a <- simabc$a
b <- simabc$b
c <- simabc$c

# Reconstruction de Simpson
simpson <- 1 - pmin(b,c) / (a + pmin(b, c))

# Aperçu
sim$Simpson2 <- simpson
sim[1:10,]

3.3 Bioregionalisation

La biorégionalisation consiste à identifier des groupes de sites partageant des caractéristiques écologiques ou biogéographiques similaires. Nous nous baserons ici sur le réseau de similarité calculé avec l’indice de Simpson ci-dessous.

Pour cela nous pouvons appliquer un algorithme de détection de communautés, ici
Louvain afin d’obtenir des régions biogéographiques cohérentes.

# Détection des communautés biogéographiques
clu <- netclu_louvain(sim, cut_weight = 0, seed = 1)

# Effectifs des biorégions obtenues
table(clu$clusters[,2])

# Visualisation cartographique
map_bioregions(clu, vegesf)

3.3.1 Exercice

Le paramètre cut_weight permet de retirer du réseau les liens (similarités) dont la valeur est inférieure à un seuil donné. Plus ce seuil est élevé, plus le réseau est épuré et plus les communautés détectées sont contrastées (mais potentiellement plus nombreuses). Il est important d’expérimenter plusieurs valeurs de cut_weight car cela peut fortement influencer la structure du réseau et donc la partition obtenue.

Tester différentes valeurs de cut_weight (0.5, 0.7, 0.8, 0.9) puis visualiser la biorégionalisation obtenue.


Solution (cliquer pour afficher)
# Détection des communautés biogéographiques avec le seuil 0.9
clu09 <- netclu_louvain(sim, cut_weight = 0.9, seed = 1)

# Effectifs des biorégions obtenues
table(clu09$clusters[,2])

# Visualisation cartographique
map_bioregions(clu09, vegesf)

3.4 Application R Shiny

Pour finir, je vais vous montrer un nouvel exemple d’application Shiny sur le même format que celle du TP2.

Les fichiers sources de cette application sont disponibles ici. Vous pouvez dézipper le dossier dans votre répertoire de travail.

Nous retrouvons la même structure d’application, composée de quatre fichiers principaux.

Comme dans le TP2, prenez le temps de parcourir ces fichiers et d’expérimenter en changeant le titre de l’application, en renommant l’onglet du tableau de bord, en modifiant la palette de couleurs de la cartes ou encore personnaliser les couleurs dans style.css.

Si vous êtes en avance essayez d’ajouter la métrique de similarité Sorensen dans l’appli en modifiant la ligne 18 de global.R et en ajoutant une ligne après la ligne 26 de ui.R.