Chargement des packages et des données

library(aspe)
library(tidyverse)
load(file = "raw_data/toutes_tables_aspe_sauf_mei.RData")
load(file = "processed_data/df1.RData")

Habitat : données opération

Les données d’habitat sont extraites de la table operation_ipr de la base donc ne sont disponibles que quand l’IPR a été calculé. Leurs valeurs moyennes sont les suivantes.

Pour la suite, à voir la meilleure source pour ces variables qui peuvent être renesignées par exemple dans la table point_prelevement.

operation_ipr %>% 
  summarise_at(vars(starts_with("opi_param")),
               function(x) mean(x, na.rm = T)) %>% 

  t() %>% 
  as.data.frame() %>% 
  rename(Moyenne = V1) %>% 
  mutate(Moyenne = signif(Moyenne, 2)) %>% 
  DT::datatable()

Habitat : moyenne par taxon

Les paramètres environnementaux peuvent être utilisés pour caractériser le macro-habitat des espèces. On peut par exemple calculer l’altitude moyenne des sites où une espèce a été détectée et l’interpréter en regard de l’altitude moyenne sites où elle n’a pas été détectée ou de celle des sites prospectés. Pour cet usage il est essentiel de ne conserver que les opérations réalisées dans un but d’inventaire, donc d’écarter les indices d’abondance qui, focalisés sur une des espèces, ne renseignent pas sur les autres.

ref_protocole %>% knitr::kable()
pro_id pro_acronyme pro_libelle pro_ordre_affichage pro_esp_id
1 Pêche complète à un ou plusieurs passages 1 NA
2 Pêche partielle par points (grand milieu) 2 NA
3 Pêche par ambiances 3 NA
4 Pêche partielle sur berge 4 NA
5 IA SAT Indice Abondance Saumon 5 174
6 Vigitruite 6 194
7 IA ANG Indice Abondance Anguille 7 14

Retenons les protocoles 1 à 3 (respectivement Pêche complète à un ou plusieurs passages, Pêche partielle par points dans les grands milieux et Pêche par ambiances). L’inclusion de la modalité 4 - Pêche partielle sur berge - est à débattre.

Ces paramètres peuvent être trouvés soit dans la table operation_ipr car ils servent au calcul de l’indice, soit dans la table point_prelevement. Ici nous choisissons d’associer les paramètres à l’opération. S’ils sont manquants, on les complète à partir des informations de la table point_prelevement.

Si l’on veut simplement compléter le tableau des captures avec les données environnementales, on utilise mef_ajouter_ope_env() :

df1_env <- df1 %>% 
  mef_ajouter_ope_env()

Si l’on veut comparer les caractéristiques des points de présence et d’absence d’une espèce donnée, on doit faire apparaître les absences dans les échantillons en complétant le tableau :

captures_et_env <- df1 %>%
  mef_select_proto(protocole = 1:3) %>% 
  mef_ajouter_abs() %>% 
  mef_ajouter_ope_env() %>%
  mef_pivoter_var_env() %>% 
  mutate(presence = effectif > 0)

Le tableau ainsi produit est volumineux (17536131 lignes). S’agissant de metttre les caractéristiques des sites de “présence” en regard de celles des sites d’“absence” de chacun des taxons, il n’est pas utile de disposer de plus d’observations d’absence que d’observations de présence. Or pour les espèces rares, le tableau comprend quelques observations de présence et beaucoup d’absence. On peut donc sous-échantillonner ces dernières.

pres_abs_env <- captures_et_env  %>%
  mef_compter_pres_abs_env()

Visualisation des premières lignes

pres_abs_env %>% slice(1:100) %>% DT::datatable()

On peut considérer que cette partie de l’analyse n’a de sens que pour les espèces suffisamment présentes - par exemple à partir de n = 30 - et que l’on peut effectuer un sous-échantillonnage des absences à concurrence du nombre des présences. Il faut aussi tenir compte des données manquantes dans les variables environnementales, donc le chiffre de 30 doit s’entendre “minimum 30 sites où l’espèce est présente et pour lesquels la variable … est disponible”.

# filtrage des combinaisons espèce x paramètres communes
especes_param_communs <- pres_abs_env %>% 
  group_by(esp_code_alternatif, parametre) %>% 
    summarise(presences = sum(presences, na.rm = TRUE)) %>% 
  ungroup() %>% 
  filter(presences > 30) %>%
  select(esp_code_alternatif,
         parametre)

captures_et_env <- captures_et_env %>%
  right_join(y = especes_param_communs) %>% 
  droplevels()

Sous-échantillonnage (la fonction mef_ssech_abs() est une adaptation de cette page).

captures_et_env2 <- captures_et_env %>% 
  mef_ssech_esp_env() %>% 
  select(-dens_ind_1000m2) %>% # histoire d'alléger un peu
  mutate(esp_code_alternatif = fct_relevel(esp_code_alternatif, sort)) # espèces en ordre alphabétique

Vérification :

med1 <- captures_et_env %>% 
  group_by(esp_code_alternatif, parametre, presence) %>% 
    summarise(mediane1 = median(valeur_parametre, na.rm = T),
              n1 = n()) %>% 
  ungroup()

med2 <- captures_et_env2 %>% 
  group_by(esp_code_alternatif, parametre, presence) %>% 
    summarise(mediane2 = median(valeur_parametre, na.rm = T),
              n2 = n()) %>% 
  ungroup()

med <- med1 %>% 
  left_join(med2) %>% 
  mutate(delta_abs = mediane1 - mediane2,
         delta_rel = (mediane1 - mediane2) / mediane1)
ggplot(data = med, aes(x = mediane1, y = mediane2, col = parametre)) +
  geom_point(size = 0.1) +
  scale_x_log10() +
  scale_y_log10()

En filtrant les espèces sur mini 30 occurrences (sur une année sur un paramètre) :

ggplot(data = med %>% 
         filter(n2 > 30) %>% 
         droplevels(),
       aes(x = mediane1, y = mediane2, col = esp_code_alternatif)) +
  geom_point(size = 0.1) +
  scale_x_log10() +
  scale_y_log10()

En filtrant les espèces sur mini 300 occurrences :

ggplot(data = med %>% 
         filter(n2 > 300) %>% 
         droplevels(),
       aes(x = mediane1, y = mediane2, col = esp_code_alternatif)) +
  geom_point(size = 0.1) +
  scale_x_log10() +
  scale_y_log10()

Les gros écarts sont dûs aux espèces rares.

ggplot(data = med, aes(x = n2, y = delta_rel, col = parametre))  +
  geom_point()

On voit que pb avec les variables qui comportent des valeurs extrêmes comme la surface du bv \(\Rightarrow\) écarter les valeurs au-delà d’un certain quantile ?

captures_et_env2  %>% 
  mef_compter_pres_abs_env() %>% 
  DT::datatable()

Habitat : temporalité

On peut visualiser si les paramètres environnementaux moyens des sites où chaque espèce est présente ont changé au cours du temps.

Cette analyse requiert des données de présence en nombre suffisant chaque année, sur des sites où les facteurs environnementaux sont disponibles. On va donc filter le jeu de données plus radicalement que précédement. Par exemple en ne retenant que les espèces pour lesquelles, au moins pour un des paramètres environnementaux, on a au moins 15 années avec pour chacune au moins 30 présences sur des sites où le paramètre est renseigné.

especes_selectionnees <- captures_et_env %>% 
  filter(presence, !is.na(parametre)) %>% # slt les présences et paramètre renseigné
  group_by(esp_code_alternatif, parametre, annee) %>% 
    tally() %>% # compte par paramètre, espèce et année du nb de fois où param est renseigné
  group_by(esp_code_alternatif, annee) %>% 
    summarise(n_param_mieux_renseigne = max(n)) %>% # nb de données pour le paramètre le mieux renseigné pour chaque espèce
    filter(n_param_mieux_renseigne >= 30) %>% # mini 30
  group_by(esp_code_alternatif) %>% 
    summarise(n_annees = n_distinct(annee)) %>% # nb d'années
  filter(n_annees >= 15) %>%  #mini 15
  pull(esp_code_alternatif) %>% 
  as.character()

captures_et_env3 <- captures_et_env2 %>% 
  filter(esp_code_alternatif %in% especes_selectionnees)
captures_et_env3 %>% 
  aspe::gg_env_fn_annee()
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

## 
## [[7]]

## 
## [[8]]

## 
## [[9]]

Sauvegarde des dataframes

save(captures_et_env, captures_et_env2, file = "processed_data/captures_et_env.RData")