Vignette demerstem - Delta-GLM

Ce script vise à accompagner les utilisateurs du package demerstem dans l’application d’un delta-GLM pour extraire un effet année et construire une série d’indices d’abondance. Il vise également à brièvement rappeler des concepts clés en statistiques pour assurer une bonne compréhension de la méthode.

La problématique rencontrée se décompose en 2 points majeurs :

• La donnée d’étude est fourni selon un plan d’échantillonnage déséquilibré et cela peut avoir des implications majeures sur la compréhension que l’on se fait s’il n’est pas correctement pris en compte : on parle d’effet de confusion.

Soit l’exemple suivant : On cherche à estimer la probabilité de présence de thiof sur 2 années. On observe, à partir des 500 données collectées chaque année, que la probabilité est de 0.2 en 2000 et 0.3 en 2020. On pourrait alors conclure (avec beaucoup de simplicité) que l’espèce est de retour et ainsi que le stock est potentiellement en meilleur santé. Or on se rend compte que les données n’ont pas été prélevées à la même saison :

Saison Froide Saison Chaude
Année 2000 400 100
Année 2020 200 300

Par ailleurs, on sait que la probabilité d’observer une présence est plus forte à la saison froide qu’en saison chaude En particulier, si on admet que l’on connaît cette probabilité (et qu’elle est identique chaque année) et qu’elle vaut 0.35 en saison froide et 0.1 en saison chaude, alors on retrouve bien que la probabilité de présence en 2000 est de 0.3 et de 0.2 en 2020. Si on rééquilibre ce plan d’échantillonnage en collectant 250 données à chaque saison, alors on obtiendrait une probabilité de 0.225 en 2000 et en 2020. Ces structurations dans l’échantillonnage peuvent être contrôlées dans des conditions de laboratoire, mais en écologie, de nombreuses variables peuvent intervenir et complexifier les collectes de données (on peut imaginer qu’en 2000, le temps était mauvais et l’une des campagnes halieutique à été décalée d’un mois, correspondant à la saison froide par exemple, ou encore que les collectes réalisées par les observateurs en criée ont été interrompues du fait d’une crise économique/sanitaire pendant plusieurs mois…).

Si on ne prenait pas en compte cette problématique, on pourrait alors chercher à faire une moyenne simple des CPUE sur une période. Le principe du GLM dans ce cas va alors être celui-ci : on dit que le GLM permet de rééquilibrer le plan d’échantillonnage en récupérant l’effet de chaque variable et évitant les effets de confusion (Figure 1).

• Cette méthode permet également d’étudier les interactions entre 2 variables. Autrement dit, en repartant de l’exemple précédent, il est possible que l’effet saison et l’effet année se conjugue, et ainsi que la saison chaude de 2000 soit une année particulière (autrement dit, il n’y a a priori pas de raison que la probabilité de rencontre selon la saison chaude ou froide soit constante). Cette interaction est importante à étudier, notamment dans le cadre du changement climatique où on pourrait tout à fait concevoir que les populations se déplacent au cours du temps, auquel cas l’effet région pourrait varier dans le temps (interaction année/région). Ces interactions peuvent s’observer même dans le cas de plans d’échantillonnages équilibrées. Dans le cas où des interactions sont identifiées avec l’effet année, il faut alors pouvoir extraire et attribuer la part de variabilité expliquée par l’effet année afin de construire un indice d’abondance. Cette démarche sera explicitée plus loin.

Enfin, on va établir un delta-GLM en combinant 2 modèles ensemble : Un modèle de présence/absence et un modèle d’abondance. En effet, les proportions importantes de zéros dans le jeu de données peuvent se comprendre comme une information à part entière : une absence constitue une information en soit. Cependant une telle modélisation présente des enjeux pratiques (il faut utiliser une fonction mathématique qui permette de modéliser ce nombre important de zéro et la forte dispersion des données d’abondance qui augmente avec la moyenne). Une solution est donc de considérer 2 sous-modèles en étudiant des ANOVA à plusieurs facteurs pour lesquels les hypothèses des modèles linéaires ne sont pas respectées mais que l’on va pouvoir ici relaxer, notamment via l’utilisation d’une fonction de lien. L’objectif est à terme d’extraire la part de variabilité expliquée par l’effet année pour construire un indice d’abondance annuel.

Cependant, le travail de modélisation, de sélectionner les facteurs les plus pertinents et identifier la part de la variabilité qu’ils expliquent, peut se révéler complexe et ce package vise à l’accompagner. Mais à terme, c’est bien à l’utilisateur de faire ses choix et poser les hypothèses qu’il souhaite tester.

Ce cas d’étude va se focaliser sur une application de la méthode delta-glm avec le package demerstem à partir des données issues des campagnes scientifiques réalisée en Guinée/Guinée-Bissau sur le stock de bobo (P. elongatus).

1) Donnees Scientifiques

On récupère le jeu de données disponible dans le package

data(tableau_sc)
head(tableau_sc)
##   code_pays code_projet code_campagne code_engin code_station
## 1       GIN     PRAO-GN    PRAO0518DM       GN02          114
## 2       GIN     PRAO-GN    PRAO0518DM       GN02          115
## 3       GIN     PRAO-GN    PRAO0518DM       GN02          113
## 4       GIN     PRAO-GN    PRAO0518DM       GN02          107
## 5       GIN     PRAO-GN    PRAO0518DM       GN02          108
## 6       GIN     PRAO-GN    PRAO0518DM       GN02          109
##        date_chalutage latitude_deb longitude_deb latitude_fin longitude_fin
## 1 2018-06-03 02:00:00      9.08317      -14.4869      9.06984     -14.47539
## 2 2018-06-03 02:00:00      9.07264      -14.4062      9.07255     -14.38860
## 3 2018-06-03 02:00:00      9.10666      -15.0151      9.09418     -15.00263
## 4 2018-06-02 02:00:00      9.26000      -15.4169      9.26014     -15.43432
## 5 2018-06-02 02:00:00      9.19887      -15.4232      9.18714     -15.41074
## 6 2018-06-02 02:00:00      9.16197      -15.3671      9.17649     -15.35813
##   profond_deb profond_fin heure_debut heure_fin vitesse_chalutage direction
## 1        56.9        60.7        <NA>      <NA>               3.5        NA
## 2        55.2        53.9        <NA>      <NA>               3.5        NA
## 3        63.0        65.8        <NA>      <NA>               3.5        NA
## 4        65.3        68.9        <NA>      <NA>               3.5        NA
## 5       128.8       141.0        <NA>      <NA>               3.5        NA
## 6       150.8       109.7        <NA>      <NA>               3.5        NA
##   vitesse_vent direction_vent vitesse_courant direction_courant     nature_fond
## 1           NA            169             0.9               340         Sableux
## 2            1             40             0.7                48         Sableux
## 3            1            195             1.4               324         Sableux
## 4            1            148             0.6               136 Sableux-Rocheux
## 5           NA            133             0.8               312         Sableux
## 6            1            137             0.5               352         Sableux
##        strate temperature_surface salinite_surface do_surface temperature_fond
## 1  D(50-100m)               28.47               NA         NA             22.2
## 2  D(50-100m)               29.00               NA         NA             24.8
## 3  D(50-100m)               28.72               NA         NA             22.5
## 4  D(50-100m)               27.80               NA         NA             22.3
## 5 E(100-200m)               28.40               NA         NA             18.5
## 6 E(100-200m)               28.60               NA         NA             17.9
##   salinite_fond do_fond long_fune jour_nuit nbre_espece ouverture_chalut
## 1            NA      NA       300      Jour          15            15.12
## 2            NA      NA       300      Jour          17            14.04
## 3            NA      NA       300      Jour           5            14.04
## 4            NA      NA       300      Jour          20            11.88
## 5            NA      NA       400      Jour          18             4.33
## 6            NA      NA       400      Jour          16             5.76
##   remarques.x duree annee mois jour larg_ouverture surface_chalutee
## 1        <NA>    30  2018    6    3           14.7        0.0476427
## 2        <NA>    30  2018    6    3           14.7        0.0476427
## 3        <NA>    30  2018    6    3           14.7        0.0476427
## 4        <NA>    30  2018    6    2           14.7        0.0476427
## 5        <NA>    30  2018    6    2           14.7        0.0476427
## 6        <NA>    30  2018    6    2           14.7        0.0476427
##   nom_taxonomique no_echant code_espece total_capture total_echant nombre
## 1            <NA>        NA        <NA>            NA           NA     NA
## 2            <NA>        NA        <NA>            NA           NA     NA
## 3            <NA>        NA        <NA>            NA           NA     NA
## 4            <NA>        NA        <NA>            NA           NA     NA
## 5            <NA>        NA        <NA>            NA           NA     NA
## 6            <NA>        NA        <NA>            NA           NA     NA
##   nombre_echant unit_mesure suivi_structure_taille suivi_biologie remarques.y
## 1            NA        <NA>                   <NA>           <NA>        <NA>
## 2            NA        <NA>                   <NA>           <NA>        <NA>
## 3            NA        <NA>                   <NA>           <NA>        <NA>
## 4            NA        <NA>                   <NA>           <NA>        <NA>
## 5            NA        <NA>                   <NA>           <NA>        <NA>
## 6            NA        <NA>                   <NA>           <NA>        <NA>
##   saison profond_deb2 code_campagne2
## 1 HUMIDE         high             GL
## 2 HUMIDE         high             GL
## 3 HUMIDE    very high             GL
## 4 HUMIDE    very high             GL
## 5 HUMIDE    very high             GL
## 6 HUMIDE    very high             GL

on peut voir qu’il est riche en informations qu’il va falloir sélectionner pour construire le modèle.

1.1) Définition des strates

Ce travail est essentiel et difficile à restituer dans toute sa complexité, notamment parce qu’il faudra au fur et à mesure tester les stratifications sélectionnées et que la qualité des GLM va directement en découler. Il est absolument nécessaire de prendre le temps de trier et mettre en forme les données qui peuvent contenir des erreurs/aberrations (comme dans tous jeux de données), notamment sur la base d’expertises. Par exemple ici, les données de faible profondeur ne sont pas conservées, le navire scientifique ne pouvant se rendre dans ces zones (Soumah, com pers).

tableau_sc_GIN <- tableau_sc

tableau_sc_GIN <- tableau_sc_GIN %>% mutate(strate_bathymetrique = case_when(
#profond_deb <= 05 ~ "0-05m", # on retire les données de 0 à 5 par dire d'experts, le navire scientifique ne peut pas aller dans ces eaux de faible profondeur
profond_deb >= 05  & profond_deb <=10 ~ "5-10m",
profond_deb > 10 & profond_deb <=15 ~ "10-15m",
profond_deb > 15 & profond_deb <= 30 ~ "15-30m"
))
tableau_sc_GIN$strate_bathymetrique <- factor(tableau_sc_GIN$strate_bathymetrique, levels = c("5-10m", "10-15m", "15-30m"))

tableau_sc_GIN <- tableau_sc_GIN %>% filter(!is.na(strate_bathymetrique))

A retenir, pour la stratification, il faut :

  1. S’assurer que les modalités d’une variable (chaude / froide sont les 2 modalités de la variable saison) doivent avoir un nombre de données +/- équivalent (on cherche à équilibrer le plan d’échantillonnage). Si l’on conserve une grosse différence, il faut pouvoir le justifier.

  2. Eviter d’avoir uniquement des absences dans une modalité, toujours un minimum de présence.

Une fois réalisée cette définition des strates, on peut passer à la modélisation des effets, en commençant pas le modèle de prés/absence. La démarche sera similaire dans le cas du modèle d’abondance.

2) Modélisation GLM et estimation des IA

Votre table est à présent prête. Vous pouvez faire tourner les 2 fonctions de modélisation des GLM : model_ai_plus et model_pres_abs. Pour cela, vous devez d’abord définir les paramètres de ces fonctions.

Ces fonctions permettent à la fois de réaliser :

• Les analyses graphiques en visualisant les données brutes mais également pour mettre en évidence l’existence d’une interaction intéressante à conserver dans le modèle et de chercher à l’expliciter.

• Un test statistique et identifier quels sont les effets significatifs tout en récupérant leur estimation.

A noter que les estimations d’une interaction n’a aucun sens si le plan factoriel est incomplet/à trous.

On propose ici une méthode générique pour étudier les effets et les interactions, en passant par une analyse par décennie avant de s’intéresser à l’analyse annuelle.

2.2) Le GLM presence/absence

2.2.1) Analyse par décennie

La fonction model_pres_abs va prendre différents arguments :

esp <- "PSEUDOTOLITHUS ELONGATUS"
espece_id='nom_taxonomique' 

list_param=c("decennie","saison", "strate_bathymetrique", "zone")
title="scientific"

var_eff_list= c("surface_chalutee") 
catch_col='total_capture' 
interactions = TRUE #FALSE
limit=0.0005

formula_select = "auto"

D’abord, la table va être automatiquement mise à jour en calculant les présence et absence quand l’espèce esp est renseignée dans la colonne espece_id (2 premières variables ci-dessus).

• Il faut alors renseigner les variables que l’on souhaite étudier. A noter que ces variables peuvent ne pas toute être utilisée dans le modèle. En revanche on ne peut décrire un modèle pour lequel les paramètres ne sont pas décrits dans list_param

• Dans var_eff_list doit être fournit la grandeur utilisée pour calculer les abondances, cela permettra d’identifier dès cette étape si des données sont aberrantes. De même catch_col permet de renseigner quelle colonne doit être utilisée.

• Les interactions peuvent être représentées graphiquement avec le booléen interactions qui peut prendre la valeur TRUE ou FALSE (T/F).

• Le terme limit permet de retirer de l’analyse les modalités qui représentent peu de données relativement aux autres modalités de ce facteur (seuil fixé à 0,05 % ici)

• Enfin, formula_select va permettre de renseigner sur le modèle appliqué : presence ~ annee + zone par exemple. L’utilisateur a également la possibilité d’employer la fonctionnalité auto qui va tester tous les modèles existants à partir de la liste des paramètres et retourner celui qui présente la valeur AIC la plus faible i.e avec la meilleure qualité d’ajustement (NB : On se limite aux interactions du second degré). Attention cependant, cette fonction peut être longue si trop de facteurs sont testés. Néanmoins, certains effets et en particulier certaines interactions peuvent ne pas être conservées

• Il est également possible de sélectionner le type d’anova (Plus de précisions dans la suite)

Dans le cas où la fonctionnalité auto à été sélectionnée, la liste des sorties peut être longue et dense, et elle le sera d’autant plus si le nombre de paramètres analysés est important. On va réaliser une Step_AIC dans les 2 directions : En partant du modèle le plus simple (presence ~ 1 i.e sans aucun facteur, on estime simplement le niveau moyen de présence, l’intercept) et du plus complexe (presence ~ (list_param)² i.e on teste le modèle le plus cmoplexe avec toutes les interactions entre chaque variable) et, pas à pas, on ajoute/retire un effet, regarde la qualité d’ajustement du modèle (critère AIC), puis ajoute/retire un autre effet. Une fois tous les effets étudiés on conserve le modèle pour lequel l’AIC à été le plus diminué puis reproduit à nouveau la démarche, jusq’à ce que l’AIC ne diminue plus. La fonction compare alors si les 2 AIC sont identiques, autrement dit si on a convergé vers le même modèle.

La majeure partie des tableaux et des graphiques d’intérêts sont stockés dans l’objet ici nommé glm_pres_sc. Mais certaines sorties, notamment statistiques, peuvent être intéressantes à analyser et ne sont disponibles que lorqu’on fait tourner la fonction :

Pour plus d’informations sur les derniers paramètres vous pouvez questionner la focntion dans votre console ?model_pres_abs

glm_pres_sc_decennie <-  model_pres_abs(tab=tableau_sc_GIN, esp, title, list_param, var_eff_list, espece_id, catch_col, interactions, limit, formula_select, plot=T, summary = F, type = 3)
## 
## -----------------------------------------
## 
##    --  SOUS-MODELE PRESENCE/ABSENCE --
## 
## -----------------------------------------
##         [1] "effort =  surface_chalutee"
## [1] "9 over 847 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 847 lines to 847 lines with presences, aggregating by station or fishing operation"
## [1] "847 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 3024 stations with presence or absence data"
## [1] "the NA modality of factor decennie has bean deleted as it represents less than 0.05 % of the dataset"
## 
##     ---------------------------------------------------------
## 
## 
##         stepAIC selection starting with the full model :
## 
## 
##     ---------------------------------------------------------
## 
##         Start:  AIC=2183.59
## presence ~ (decennie + saison + strate_bathymetrique + zone)^2
## 
##                                 Df Deviance    AIC
## - saison:strate_bathymetrique    2   2119.9 2179.9
## <none>                               2119.6 2183.6
## - decennie:zone                  6   2132.1 2184.1
## - saison:zone                    2   2127.7 2187.7
## - strate_bathymetrique:zone      4   2131.8 2187.8
## - decennie:saison                3   2131.1 2189.1
## - decennie:strate_bathymetrique  6   2155.9 2207.9
## 
## Step:  AIC=2179.9
## presence ~ decennie + saison + strate_bathymetrique + zone + 
##     decennie:saison + decennie:strate_bathymetrique + decennie:zone + 
##     saison:zone + strate_bathymetrique:zone
## 
##                                 Df Deviance    AIC
## <none>                               2119.9 2179.9
## - decennie:zone                  6   2132.4 2180.4
## - decennie:saison                3   2131.1 2185.1
## - strate_bathymetrique:zone      4   2134.0 2186.0
## - saison:zone                    2   2132.3 2188.3
## - decennie:strate_bathymetrique  6   2156.4 2204.4
## 
##     ---------------------------------------------------------
## 
## 
##         stepAIC selection starting with the minimal model :
## 
## 
##     ---------------------------------------------------------
## 
##         Start:  AIC=3574.19
## presence ~ 1
## 
##                        Df Deviance    AIC
## + strate_bathymetrique  2   2553.8 2559.8
## + decennie              3   3353.4 3361.4
## + saison                1   3550.8 3554.8
## + zone                  2   3559.1 3565.1
## <none>                      3572.2 3574.2
## 
## Step:  AIC=2559.81
## presence ~ strate_bathymetrique
## 
##                        Df Deviance    AIC
## + decennie              3   2427.2 2439.2
## + zone                  2   2454.9 2464.9
## + saison                1   2482.3 2490.3
## <none>                      2553.8 2559.8
## - strate_bathymetrique  2   3572.2 3574.2
## 
## Step:  AIC=2439.18
## presence ~ strate_bathymetrique + decennie
## 
##                                 Df Deviance    AIC
## + zone                           2   2314.9 2330.9
## + saison                         1   2356.4 2370.4
## + decennie:strate_bathymetrique  6   2361.8 2385.8
## <none>                               2427.2 2439.2
## - decennie                       3   2553.8 2559.8
## - strate_bathymetrique           2   3353.4 3361.4
## 
## Step:  AIC=2330.89
## presence ~ strate_bathymetrique + decennie + zone
## 
##                                 Df Deviance    AIC
## + saison                         1   2225.8 2243.8
## + decennie:strate_bathymetrique  6   2256.6 2284.6
## + decennie:zone                  6   2291.8 2319.8
## + strate_bathymetrique:zone      4   2301.0 2325.0
## <none>                               2314.9 2330.9
## - zone                           2   2427.2 2439.2
## - decennie                       3   2454.9 2464.9
## - strate_bathymetrique           2   3331.9 3343.9
## 
## Step:  AIC=2243.82
## presence ~ strate_bathymetrique + decennie + zone + saison
## 
##                                 Df Deviance    AIC
## + decennie:strate_bathymetrique  6   2168.2 2198.2
## + decennie:saison                3   2205.2 2229.2
## + decennie:zone                  6   2204.1 2234.1
## + strate_bathymetrique:zone      4   2210.8 2236.8
## + saison:zone                    2   2218.3 2240.3
## + saison:strate_bathymetrique    2   2219.9 2241.9
## <none>                               2225.8 2243.8
## - saison                         1   2314.9 2330.9
## - zone                           2   2356.4 2370.4
## - decennie                       3   2367.8 2379.8
## - strate_bathymetrique           2   3306.4 3320.4
## 
## Step:  AIC=2198.2
## presence ~ strate_bathymetrique + decennie + zone + saison + 
##     strate_bathymetrique:decennie
## 
##                                 Df Deviance    AIC
## + strate_bathymetrique:zone      4   2153.7 2191.7
## + decennie:zone                  6   2151.2 2193.2
## + decennie:saison                3   2160.0 2196.0
## + saison:zone                    2   2162.5 2196.5
## <none>                               2168.2 2198.2
## + saison:strate_bathymetrique    2   2164.3 2198.3
## - strate_bathymetrique:decennie  6   2225.8 2243.8
## - saison                         1   2256.6 2284.6
## - zone                           2   2294.4 2320.4
## 
## Step:  AIC=2191.67
## presence ~ strate_bathymetrique + decennie + zone + saison + 
##     strate_bathymetrique:decennie + strate_bathymetrique:zone
## 
##                                 Df Deviance    AIC
## + saison:zone                    2   2142.1 2184.1
## + decennie:saison                3   2144.5 2188.5
## <none>                               2153.7 2191.7
## + decennie:zone                  6   2142.7 2192.7
## + saison:strate_bathymetrique    2   2151.2 2193.2
## - strate_bathymetrique:zone      4   2168.2 2198.2
## - strate_bathymetrique:decennie  6   2210.8 2236.8
## - saison                         1   2244.0 2280.0
## 
## Step:  AIC=2184.09
## presence ~ strate_bathymetrique + decennie + zone + saison + 
##     strate_bathymetrique:decennie + strate_bathymetrique:zone + 
##     zone:saison
## 
##                                 Df Deviance    AIC
## + decennie:saison                3   2132.4 2180.4
## <none>                               2142.1 2184.1
## + decennie:zone                  6   2131.1 2185.1
## + saison:strate_bathymetrique    2   2142.1 2188.1
## - zone:saison                    2   2153.7 2191.7
## - strate_bathymetrique:zone      4   2162.5 2196.5
## - strate_bathymetrique:decennie  6   2196.2 2226.2
## 
## Step:  AIC=2180.4
## presence ~ strate_bathymetrique + decennie + zone + saison + 
##     strate_bathymetrique:decennie + strate_bathymetrique:zone + 
##     zone:saison + decennie:saison
## 
##                                 Df Deviance    AIC
## + decennie:zone                  6   2119.9 2179.9
## <none>                               2132.4 2180.4
## + saison:strate_bathymetrique    2   2132.1 2184.1
## - decennie:saison                3   2142.1 2184.1
## - zone:saison                    2   2144.5 2188.5
## - strate_bathymetrique:zone      4   2154.4 2194.4
## - strate_bathymetrique:decennie  6   2174.2 2210.2
## 
## Step:  AIC=2179.9
## presence ~ strate_bathymetrique + decennie + zone + saison + 
##     strate_bathymetrique:decennie + strate_bathymetrique:zone + 
##     zone:saison + decennie:saison + decennie:zone
## 
##                                 Df Deviance    AIC
## <none>                               2119.9 2179.9
## - decennie:zone                  6   2132.4 2180.4
## + saison:strate_bathymetrique    2   2119.6 2183.6
## - decennie:saison                3   2131.1 2185.1
## - strate_bathymetrique:zone      4   2134.0 2186.0
## - zone:saison                    2   2132.3 2188.3
## - strate_bathymetrique:decennie  6   2156.4 2204.4
## Analysis of Deviance Table
## 
## Model 1: presence ~ decennie + saison + strate_bathymetrique + zone + 
##     decennie:saison + decennie:strate_bathymetrique + decennie:zone + 
##     saison:zone + strate_bathymetrique:zone
## Model 2: presence ~ strate_bathymetrique + decennie + zone + saison + 
##     strate_bathymetrique:decennie + strate_bathymetrique:zone + 
##     zone:saison + decennie:saison + decennie:zone
##   Resid. Df Resid. Dev Df Deviance
## 1      2972     2119.9            
## 2      2972     2119.9  0        0
## 
## #------------------------------------------------#
## 
## 
## 
##                     OUTPUTS
## 
## 
## 
## #------------------------------------------------#
## 
## The statiscally selected model is :
## 
##     presence ~ strate_bathymetrique + decennie + zone + saison + 
##     strate_bathymetrique:decennie + strate_bathymetrique:zone + 
##     zone:saison + decennie:saison + decennie:zone
## <environment: 0x00000222e5709810>
## 
## 
##     AIC = 2179.899
## 
##     Analysis of Deviance Table (Type III tests)
## 
## Response: presence
## Error estimate based on Pearson residuals 
## 
##                                Sum Sq   Df F values    Pr(>F)    
## strate_bathymetrique           377.84    2 193.7775 < 2.2e-16 ***
## decennie                        98.54    3  33.6902 < 2.2e-16 ***
## zone                            33.56    2  17.2137 3.691e-08 ***
## saison                          13.52    1  13.8695 0.0001996 ***
## strate_bathymetrique:decennie   36.48    6   6.2360 1.604e-06 ***
## strate_bathymetrique:zone       14.06    4   3.6065 0.0061334 ** 
## zone:saison                     12.45    2   6.3834 0.0017127 ** 
## decennie:saison                 11.20    3   3.8291 0.0094512 ** 
## decennie:zone                   12.50    6   2.1374 0.0462308 *  
## Residuals                     2897.53 2972                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## % of variability explained by each effect :                               % variance % variance of explained (17.4%)
## strate_bathymetrique                10.8                              62
## decennie                             2.8                              16
## zone                                 1.0                               6
## saison                               0.4                               2
## strate_bathymetrique:decennie        1.0                               6
## strate_bathymetrique:zone            0.4                               2
## zone:saison                          0.4                               2
## decennie:saison                      0.3                               2
## decennie:zone                        0.4                               2
## Residuals                           82.6                              NA

"9 over 847 lines with effort = 0 or NA" : La fonction commence par préciser les lignes pour lesquels un effort nul ou non précisé est identifié. Ces données seront par la suite perdues.

"passing from 847 lines to 847 lines with presences, aggregating by station or fishing operation" : La fonction va également agréger les données par station/opération de pêche et renvoie un message d’erreur si il y a des réplicats (ce qui ne devrait âs être le cas à cette échelle)

Dans le cas d’une StepAIC c’est l’ensemble des modèles testés qui sont décrits. Le modèle final avec l’AIC la plus faible est conservé et les sorties statistiques sont fournies. Un second tableau précise la part de la variablité expliquée par chaque variable. Couplé avec la significativité et le nombre de degrés de liberté, cela permet de sélectionner les effets les plus intéressants.

Les sorties statistiques sont également conservés dans la liste que l’on créé (ici appelée glm_pres_sc), et on peut les appeler avec la commande glm_pres_sc[[1]]. De même, l’ensemble des graphiques de récuperer ces objets en manipulant la liste glm_pres_sc[[2]]. Enfin la table avec les estimations peut être récupérée avec en récupérant la troisième liste glm_pres_sc[[3]]

glm_pres_sc_decennie[[2]][[1]]
## [[1]]

## 
## [[2]]

En premier sont conservées les observations brutes, avec en rouge les absences 0 et en bleu les présence 1.

glm_pres_sc_decennie[[2]][[3]]

Le dernier niveau renferme les estimations par modalités, on peut par exemple observer que la probabilité de présence est de 60 % dans les eaux de 5-10 m de profondeur et que la probabilité d’observer un bobo était ainsi maximale en saison humide, au nord et dans les années 1990. A moins qu’il n’existe une interaction à prendre en compte….

formula = "presence ~ decennie*strate_bathymetrique"

glm_pres_sc <-  model_pres_abs(tab=tableau_sc_GIN, esp, title, list_param, var_eff_list, espece_id, catch_col, interactions, limit, formula_select = formula, plot=T, summary = F, type = 3)
## 
## -----------------------------------------
## 
##    --  SOUS-MODELE PRESENCE/ABSENCE --
## 
## -----------------------------------------
##         [1] "effort =  surface_chalutee"
## [1] "9 over 847 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 847 lines to 847 lines with presences, aggregating by station or fishing operation"
## [1] "847 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 3024 stations with presence or absence data"
## [1] "the NA modality of factor decennie has bean deleted as it represents less than 0.05 % of the dataset"
## 
## #------------------------------------------------#
## 
## 
## 
##                     OUTPUTS
## 
## 
## 
## #------------------------------------------------#
## 
## The model you have selected :
## 
##     [1] "presence ~ decennie*strate_bathymetrique"
## 
## 
##     AIC = 2385.844
## 
##     Analysis of Deviance Table (Type III tests)
## 
## Response: presence
## Error estimate based on Pearson residuals 
## 
##                                Sum Sq   Df F values    Pr(>F)    
## decennie                       118.53    3   39.352 < 2.2e-16 ***
## strate_bathymetrique           357.31    2  177.941 < 2.2e-16 ***
## decennie:strate_bathymetrique   65.33    6   10.845 5.673e-12 ***
## Residuals                     3002.00 2990                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## % of variability explained by each effect :                               % variance % variance of explained (15.3%)
## decennie                             3.3                              22
## strate_bathymetrique                10.1                              66
## decennie:strate_bathymetrique        1.8                              12
## Residuals                           84.7                              NA

Cette seconde analyse met en évidence une interaction entre la décennie et la bathymétrie qui explique près de 2% de deviance, il sera donc intéressant de l’étudier un peu plus dans la suite.

2.2.2) Analyse annuelle

Ainsi, cette première partie nous permet d’étudier les interactions à une dimension temporelle plus large et identifier celles qui peuvent être intéressantes à prendre en compte dans la suite de l’analyse. En particulier s’il est nécessaire de retirer certaines années pour conserver une interaction pour lequel le plan d’échantillonnage est incomplet (à trous). Ici il faudra retirer les années entre 1963 et 1983. En particulier, on se rend compte que cela correspond à une période de campagnes spécifiques pour lesquels les estimations sembles aberrantes, on les filtre donc. Idéalement il faudrait réaliser à nouveau les analyses par décennie.

table(tableau_sc_GIN$strate_bathymetrique, tableau_sc_GIN$annee)
##         
##          1963 1964 1976 1980 1981 1983 1985 1986 1987 1988 1989 1990 1991 1992
##   5-10m     0    0    0    3    1    0   30   36   23   50   83   40  164   79
##   10-15m    0    0    0    9    0    8   54   44   24   68   59   33  146   61
##   15-30m    6    4   12   84    5   95   77  109   32   60    9   15   60   97
##         
##          1993 1994 1995 1997 1998 2002 2004 2006 2007 2008 2009 2012 2015 2016
##   5-10m     5    0   40   31   14   23   31   20    8   23    7    2    4    4
##   10-15m   21    0   30   47   24   23   23   13   10   21    6   12   10   11
##   15-30m  141    0   26   95   48   12   33   40   76   81   20   38  103   42
##         
##          2017 2018
##   5-10m     3    9
##   10-15m   12   11
##   15-30m   46   45
table(tableau_sc_GIN$zone, tableau_sc_GIN$annee)
##         
##          1963 1964 1976 1980 1981 1983 1985 1986 1987 1988 1989 1990 1991 1992
##   nord      1    1    4    4    4   22   50   65   29   59   30   13  104   77
##   centre    2    1    5   11    2   33   45   50   19   53   50   20  100   61
##   sud       3    2    3   81    0   48   66   74   31   66   71   55  166   99
##         
##          1993 1994 1995 1997 1998 2002 2004 2006 2007 2008 2009 2012 2015 2016
##   nord     44    0   40   61   25   15   28   25   36   42    4   24   55   23
##   centre   48    0   23   51   29   21   25   20   30   47   14   13   22    6
##   sud      75    0   33   61   32   22   34   28   28   36   15   15   40   28
##         
##          2017 2018
##   nord     19   17
##   centre    9   13
##   sud      33   35

On va donc filtrer ces données puis appliquer une Anova de type 3 pour étudier l’interaction entre la bathymétrie et l’année. Attention à bien changer la liste des paramètres pour y faire apparaître l’année.

list_param=c("annee","saison", "strate_bathymetrique", "zone")
formula = "presence ~ annee*strate_bathymetrique"

#tableau_sc_GIN <- tableau_sc_GIN %>% filter(!(annee %in% c(2009,2015,2016,2017)))
tableau_sc_f <- tableau_sc_GIN %>% filter(code_campagne2 %in% c("GL", "AN")) 

glm_pres_sc <-  model_pres_abs(tab=tableau_sc_f, esp, title, list_param, var_eff_list, espece_id, catch_col, interactions, limit, formula_select = formula, plot=T, summary = F, type = 3)
## 
## -----------------------------------------
## 
##    --  SOUS-MODELE PRESENCE/ABSENCE --
## 
## -----------------------------------------
##         [1] "effort =  surface_chalutee"
## [1] "9 over 732 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 732 lines to 732 lines with presences, aggregating by station or fishing operation"
## [1] "732 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 2501 stations with presence or absence data"
## 
## #------------------------------------------------#
## 
## 
## 
##                     OUTPUTS
## 
## 
## 
## #------------------------------------------------#
## 
## The model you have selected :
## 
##     [1] "presence ~ annee*strate_bathymetrique"
## 
## 
##     AIC = 1912.194
## 
## 
## Warning: glm.fit: l'algorithme n'a pas convergé
## Warning: glm.fit: des probabilités ont été ajustées numériquement à 0 ou 1
## Analysis of Deviance Table (Type III tests)
## 
## Response: presence
## Error estimate based on Pearson residuals 
## 
##                            Sum Sq   Df   F values    Pr(>F)    
## annee                         223   20    12.7927 < 2.2e-16 ***
## strate_bathymetrique        46368    2 26611.4629 < 2.2e-16 ***
## annee:strate_bathymetrique     87   40     2.5104 6.232e-07 ***
## Residuals                    2124 2438                         
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## % of variability explained by each effect :                            % variance % variance of explained (95.6%)
## annee                             0.5                               0
## strate_bathymetrique             95.0                              99
## annee:strate_bathymetrique        0.2                               0
## Residuals                         4.4                              NA

Le modèle ne converge pas et renvoie des estimations aberrantes. Cela peut s’expliquer par l’absence de données de présence sur un certaine nombre de croisement année:strate_bathymetrique, comme on peut le voir sur le graphique ci-dessous. Ainsi, c’est un modèle sans interactions qui est conservé. Il faudrait alors prendre le temps de vérifier toutes les autres interactions pour s’assurer qu’elles ne sont pas significatives même avec le modèle annuel et les étudier visuellement.

glm_pres_sc[[2]][[2]][[2]]

On sélectionne le modèle final suivant :

formula = "presence ~ strate_bathymetrique + annee + zone"

glm_pres_sc_final <-  model_pres_abs(tab=tableau_sc_f, esp, title, list_param, var_eff_list, espece_id, catch_col, interactions, limit, formula_select = formula, plot=T, summary = F)
## 
## -----------------------------------------
## 
##    --  SOUS-MODELE PRESENCE/ABSENCE --
## 
## -----------------------------------------
##         [1] "effort =  surface_chalutee"
## [1] "9 over 732 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 732 lines to 732 lines with presences, aggregating by station or fishing operation"
## [1] "732 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 2501 stations with presence or absence data"
## 
## #------------------------------------------------#
## 
## 
## 
##                     OUTPUTS
## 
## 
## 
## #------------------------------------------------#
## 
## The model you have selected :
## 
##     [1] "presence ~ strate_bathymetrique + annee + zone"
## 
## 
##     AIC = 1802.764
## 
##     Analysis of Deviance Table (Type II tests)
## 
## Response: presence
## Error estimate based on Pearson residuals 
## 
##                       Sum Sq   Df F value    Pr(>F)    
## strate_bathymetrique  730.47    2 416.157 < 2.2e-16 ***
## annee                 276.39   20  15.746 < 2.2e-16 ***
## zone                  120.91    2  68.884 < 2.2e-16 ***
## Residuals            2173.04 2476                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## % of variability explained by each effect :                      % variance % variance of explained (34.2%)
## strate_bathymetrique       22.1                              65
## annee                       8.4                              25
## zone                        3.7                              11
## Residuals                  65.8                              NA

A noter qu’on applique une anova de type 2 ou de type 3 n’a alors aucune importance. En l’absence d’interaction les sorties statistiques seront similaires.

2.3) GLM des abondances positives

De la même manière, une telle analyse peut être conduite avec un glm sur les abondances via la fonction model_ai_plus

esp <- "PSEUDOTOLITHUS ELONGATUS"
list_param=c("decennie","saison", "strate_bathymetrique", "zone")
title="scientific"
espece_id='nom_taxonomique' 
var_eff_list= c("surface_chalutee") 
catch_col='total_capture' 
interactions=T
limit=0.0005

glm_ab_sc <-  model_ai_plus(tab=tableau_sc_f, esp, title, list_param, var_eff_list, espece_id, catch_col, interactions = T, limit, formula_select = "auto", plot=T, summary = F, type = 3)
## [1] "SOUS-MODELE ABONDANCE"
## [1] "effort =  surface_chalutee"
## [1] "9 over 732 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 732 lines to 732 lines with presences, aggregating by station or fishing operation"
## [1] "732 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 2501 stations with presence or absence data"
## [1] "stepAIC selection starting with the full model :"
## Start:  AIC=2716.88
## log(i_ab) ~ (decennie + saison + strate_bathymetrique + zone)^2
## 
##                                 Df Deviance    AIC
## - strate_bathymetrique:zone      4   1658.7 2710.1
## - saison:zone                    2   1658.1 2713.9
## - saison:strate_bathymetrique    2   1658.8 2714.2
## - decennie:zone                  6   1677.4 2714.2
## - decennie:strate_bathymetrique  6   1683.3 2716.8
## <none>                               1655.8 2716.9
## - decennie:saison                3   1670.8 2717.4
## 
## Step:  AIC=2710.13
## log(i_ab) ~ decennie + saison + strate_bathymetrique + zone + 
##     decennie:saison + decennie:strate_bathymetrique + decennie:zone + 
##     saison:strate_bathymetrique + saison:zone
## 
##                                 Df Deviance    AIC
## - saison:zone                    2   1661.9 2707.5
## - decennie:zone                  6   1681.3 2707.9
## - saison:strate_bathymetrique    2   1662.9 2708.0
## - decennie:strate_bathymetrique  6   1685.0 2709.5
## <none>                               1658.7 2710.1
## - decennie:saison                3   1674.2 2710.9
## 
## Step:  AIC=2707.54
## log(i_ab) ~ decennie + saison + strate_bathymetrique + zone + 
##     decennie:saison + decennie:strate_bathymetrique + decennie:zone + 
##     saison:strate_bathymetrique
## 
##                                 Df Deviance    AIC
## - decennie:zone                  6   1685.2 2705.6
## - saison:strate_bathymetrique    2   1666.8 2705.7
## - decennie:strate_bathymetrique  6   1688.7 2707.1
## <none>                               1661.9 2707.5
## - decennie:saison                3   1678.5 2708.7
## 
## Step:  AIC=2705.6
## log(i_ab) ~ decennie + saison + strate_bathymetrique + zone + 
##     decennie:saison + decennie:strate_bathymetrique + saison:strate_bathymetrique
## 
##                                 Df Deviance    AIC
## - saison:strate_bathymetrique    2   1690.7 2703.9
## <none>                               1685.2 2705.6
## - decennie:saison                3   1700.9 2706.3
## - decennie:strate_bathymetrique  6   1717.6 2707.4
## - zone                           2   1701.9 2708.7
## 
## Step:  AIC=2703.95
## log(i_ab) ~ decennie + saison + strate_bathymetrique + zone + 
##     decennie:saison + decennie:strate_bathymetrique
## 
##                                 Df Deviance    AIC
## <none>                               1690.7 2703.9
## - decennie:saison                3   1706.9 2704.8
## - decennie:strate_bathymetrique  6   1723.0 2705.7
## - zone                           2   1708.8 2707.7
## [1] "stepAIC selection starting with the minimal model :"
## Start:  AIC=2834.04
## log(i_ab) ~ 1
## 
##                        Df Deviance    AIC
## + decennie              3   1827.4 2732.2
## + strate_bathymetrique  2   2075.2 2822.1
## <none>                      2121.4 2834.0
## + saison                1   2119.0 2835.2
## + zone                  2   2119.3 2837.3
## 
## Step:  AIC=2732.19
## log(i_ab) ~ decennie
## 
##                        Df Deviance    AIC
## + strate_bathymetrique  2   1767.0 2711.9
## <none>                      1827.4 2732.2
## + saison                1   1825.8 2733.6
## + zone                  2   1824.7 2735.1
## - decennie              3   2121.4 2834.0
## 
## Step:  AIC=2711.87
## log(i_ab) ~ decennie + strate_bathymetrique
## 
##                                 Df Deviance    AIC
## + zone                           2   1749.0 2708.5
## + decennie:strate_bathymetrique  6   1730.5 2708.8
## <none>                               1767.0 2711.9
## + saison                         1   1762.9 2712.2
## - strate_bathymetrique           2   1827.4 2732.2
## - decennie                       3   2075.2 2822.1
## 
## Step:  AIC=2708.49
## log(i_ab) ~ decennie + strate_bathymetrique + zone
## 
##                                 Df Deviance    AIC
## + decennie:strate_bathymetrique  6   1713.8 2705.8
## + saison                         1   1741.5 2707.4
## <none>                               1749.0 2708.5
## + decennie:zone                  6   1727.6 2711.6
## - zone                           2   1767.0 2711.9
## + strate_bathymetrique:zone      4   1743.5 2714.2
## - strate_bathymetrique           2   1824.7 2735.1
## - decennie                       3   2059.1 2820.5
## 
## Step:  AIC=2705.76
## log(i_ab) ~ decennie + strate_bathymetrique + zone + decennie:strate_bathymetrique
## 
##                                 Df Deviance    AIC
## + saison                         1   1706.9 2704.8
## <none>                               1713.8 2705.8
## + decennie:zone                  6   1691.6 2708.3
## - decennie:strate_bathymetrique  6   1749.0 2708.5
## - zone                           2   1730.5 2708.8
## + strate_bathymetrique:zone      4   1706.9 2710.8
## 
## Step:  AIC=2704.85
## log(i_ab) ~ decennie + strate_bathymetrique + zone + saison + 
##     decennie:strate_bathymetrique
## 
##                                 Df Deviance    AIC
## + decennie:saison                3   1690.7 2703.9
## <none>                               1706.9 2704.8
## - saison                         1   1713.8 2705.8
## + saison:strate_bathymetrique    2   1700.9 2706.3
## + decennie:zone                  6   1683.2 2706.7
## + saison:zone                    2   1702.1 2706.8
## - decennie:strate_bathymetrique  6   1741.5 2707.4
## - zone                           2   1726.9 2709.3
## + strate_bathymetrique:zone      4   1699.9 2709.9
## 
## Step:  AIC=2703.95
## log(i_ab) ~ decennie + strate_bathymetrique + zone + saison + 
##     decennie:strate_bathymetrique + decennie:saison
## 
##                                 Df Deviance    AIC
## <none>                               1690.7 2703.9
## - decennie:saison                3   1706.9 2704.8
## + saison:strate_bathymetrique    2   1685.2 2705.6
## - decennie:strate_bathymetrique  6   1723.0 2705.7
## + decennie:zone                  6   1666.8 2705.7
## + saison:zone                    2   1686.1 2706.0
## - zone                           2   1708.8 2707.7
## + strate_bathymetrique:zone      4   1684.0 2709.1
## Analysis of Deviance Table
## 
## Model 1: log(i_ab) ~ decennie + saison + strate_bathymetrique + zone + 
##     decennie:saison + decennie:strate_bathymetrique
## Model 2: log(i_ab) ~ decennie + strate_bathymetrique + zone + saison + 
##     decennie:strate_bathymetrique + decennie:saison
##   Resid. Df Resid. Dev Df Deviance
## 1       705     1690.7            
## 2       705     1690.7  0        0
## [1] "The selected model by statistical optimisation is:"
## log(i_ab) ~ decennie + strate_bathymetrique + zone + saison + 
##     decennie:strate_bathymetrique + decennie:saison
## <environment: 0x00000222e28774b8>
## log(i_ab) ~ decennie + strate_bathymetrique + zone + saison + 
##     decennie:strate_bathymetrique + decennie:saison
## <environment: 0x00000222e28774b8>
## [1] "AIC = 2703.954"
## Analysis of Deviance Table (Type III tests)
## 
## Response: log(i_ab)
## Error estimate based on Pearson residuals 
## 
##                                Sum Sq  Df F values    Pr(>F)    
## decennie                       124.46   3  17.2992 7.564e-11 ***
## strate_bathymetrique            14.22   2   2.9650   0.05221 .  
## zone                            18.11   2   3.7759   0.02338 *  
## saison                           1.26   1   0.5265   0.46832    
## decennie:strate_bathymetrique   32.36   6   2.2490   0.03705 *  
## decennie:saison                 16.20   3   2.2514   0.08113 .  
## Residuals                     1690.67 705                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "% of variability explained by each effect : "
##                               % variance % variance of explained (10.9%)
## decennie                             6.6                              60
## strate_bathymetrique                 0.7                               7
## zone                                 1.0                               9
## saison                               0.1                               1
## decennie:strate_bathymetrique        1.7                              16
## decennie:saison                      0.9                               8
## Residuals                           89.1                              NA

La seule interaction intéressante semble decennie:bathymétrie qu’il faudrait prendre le temps de plus étudier. De la même manière que précédemment, il est possible de récupérer des graphiques sur les données brutes, avec le nombre de données de présence utilisées….

glm_ab_sc[[2]][[1]]
## [[1]]

## 
## [[2]]

…en reconstruisant une simple moyenne des indices d’abondances / cpue mesurées…

glm_ab_sc[[2]][[2]]
## [[1]]

## 
## [[2]]

…puis les interactions…

glm_ab_sc[[2]][[3]]
## [[1]]

## 
## [[2]]

et les estimations pour chaque modalité

glm_ab_sc[[2]][[4]]
## [[1]]

## 
## [[2]]

On se contentera ici de décrire le modèle le plus simple pour l’analyse annuelle

Remarque : Attention à bien appliquer une transformation log en écrivant le modèle :

list_param=c("annee","saison", "strate_bathymetrique", "zone")

formula = "i_ab ~ strate_bathymetrique + annee + zone"

model_ai_plus(tab=tableau_sc_f, esp, title, list_param, var_eff_list, espece_id, catch_col, interactions, limit, formula_select = formula, plot=T, summary = T)[[2]][[4]]
## [1] "SOUS-MODELE ABONDANCE"
## [1] "effort =  surface_chalutee"
## [1] "9 over 732 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 732 lines to 732 lines with presences, aggregating by station or fishing operation"
## [1] "732 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 2501 stations with presence or absence data"
## [1] "The model you selected:"
## [1] "i_ab ~ strate_bathymetrique + annee + zone"
## [1] "i_ab ~ strate_bathymetrique + annee + zone"
## [1] "AIC = 12811.042"
## Analysis of Deviance Table (Type II tests)
## 
## Response: i_ab
## Error estimate based on Pearson residuals 
## 
##                          Sum Sq  Df F value    Pr(>F)    
## strate_bathymetrique   67297268   2 12.0068 7.466e-06 ***
## annee                 210819230  19  3.9593 3.788e-08 ***
## zone                   49312739   2  8.7981 0.0001684 ***
## Residuals            1958919280 699                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "% of variability explained by each effect : "
##                      % variance % variance of explained (14.3%)
## strate_bathymetrique        2.9                              21
## annee                       9.2                              64
## zone                        2.2                              15
## Residuals                  85.7                              NA
## 
## Call:
## glm(formula = as.formula(formula), family = gaussian, data = tableau_ab)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2375.8   -758.8   -301.7    228.1  16180.6  
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             345.15     137.22   2.515 0.012119 *  
## strate_bathymetrique1   493.46     108.15   4.563 5.96e-06 ***
## strate_bathymetrique2  -165.81     114.27  -1.451 0.147204    
## annee1                  852.34     266.06   3.204 0.001419 ** 
## annee2                 1532.12     242.24   6.325 4.52e-10 ***
## annee3                  680.06     367.55   1.850 0.064697 .  
## annee4                  450.30     210.05   2.144 0.032393 *  
## annee5                  546.98     199.75   2.738 0.006332 ** 
## annee6                  948.91     232.70   4.078 5.07e-05 ***
## annee7                   11.68     168.57   0.069 0.944772    
## annee8                  307.77     216.63   1.421 0.155843    
## annee9                   24.07     660.38   0.036 0.970941    
## annee10                -618.86     359.72  -1.720 0.085799 .  
## annee11                -533.50     428.48  -1.245 0.213522    
## annee12                -455.84     497.19  -0.917 0.359545    
## annee13                -752.09     613.54  -1.226 0.220682    
## annee14                -714.68     721.11  -0.991 0.321991    
## annee15                -371.60     575.45  -0.646 0.518652    
## annee16                -404.11     723.09  -0.559 0.576436    
## annee17                -568.68     808.05  -0.704 0.481811    
## annee18                -349.96     661.58  -0.529 0.596989    
## annee19                -311.61     803.87  -0.388 0.698397    
## zone1                   352.15      98.33   3.581 0.000365 ***
## zone2                  -389.88     100.09  -3.895 0.000107 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 2802460)
## 
##     Null deviance: 2237949595  on 722  degrees of freedom
## Residual deviance: 1958919280  on 699  degrees of freedom
## AIC: 12811
## 
## Number of Fisher Scoring iterations: 2

## [[1]]

## 
## [[2]]

On peut étudier les résidus avec le paramètre summary = T. Les estimations n’ont aucun sens.

list_param=c("annee","saison", "strate_bathymetrique", "zone")

formula = "log(i_ab) ~ strate_bathymetrique + annee + zone"

glm_ai_sc_final <-  model_ai_plus(tab=tableau_sc_f, esp, title, list_param, var_eff_list, espece_id, catch_col, interactions, limit, formula_select = formula, plot=T, summary = F)
## [1] "SOUS-MODELE ABONDANCE"
## [1] "effort =  surface_chalutee"
## [1] "9 over 732 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 732 lines to 732 lines with presences, aggregating by station or fishing operation"
## [1] "732 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 2501 stations with presence or absence data"
## [1] "The model you selected:"
## [1] "log(i_ab) ~ strate_bathymetrique + annee + zone"
## [1] "log(i_ab) ~ strate_bathymetrique + annee + zone"
## [1] "AIC = 2662.145"
## Analysis of Deviance Table (Type II tests)
## 
## Response: log(i_ab)
## Error estimate based on Pearson residuals 
## 
##                       Sum Sq  Df F value    Pr(>F)    
## strate_bathymetrique  103.04   2 22.9463 2.229e-10 ***
## annee                 489.68  19 11.4788 < 2.2e-16 ***
## zone                   28.28   2  6.2985  0.001945 ** 
## Residuals            1569.41 699                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "% of variability explained by each effect : "
##                      % variance % variance of explained (28.4%)
## strate_bathymetrique        4.7                              17
## annee                      22.4                              79
## zone                        1.3                               5
## Residuals                  71.6                              NA

2.4) Delta-glm

Finalement, une fois réalisés les 2 sous-modèles, on peut les combiner via la fonction delta_glm

Pour cela, il suffit de rappeler les précédents modèles utilisés. La structure est semblable. A noter cependant que connaissant les surfaces des différentes strates spatiales (région et bathymétrie) il est possible de récupérer la biomasse totale prédite dans chacune de ses zones et ainsi la biomasse annuelle. Un indice d’abondance peut alors être construit en définissant une année de référence. Néanmoins, il faut être vigilant si réalise considère un facteur intrannuel (Saison, Trimestre, Mois…) à ce qu’on récupère l’estimation sur ces périodes temporelles pour construire la moyenne annuelle. Pour cela il suffit de renseigner la variable via le paramètre temporal_factor.

formula_select_pres = "presence ~ strate_bathymetrique + annee + zone"
formula_select_ia = "log(i_ab) ~ annee + strate_bathymetrique + zone"
tab_pres <- tableau_sc_f
tab_ia <- tableau_sc_f
title <- "Abundance indices - Scientific"
list_param <- c("annee", "strate_bathymetrique", "zone")
var_eff_list <- "surface_chalutee"
esp <- "PSEUDOTOLITHUS ELONGATUS"
espece_id='nom_taxonomique' 
catch_col='total_capture' 
data_type = "Scientific_Survey_GIN"
limit=0.0005

repartition <- as.data.frame(cbind(zone = c(rep("sud",3), rep("centre",3), rep("nord",3)), 
                                   strate_bathymetrique = rep(c("5-10m", "10-15m", "15-30m"),3), 
                                   proportion = c(661.5, 1009.3, 2872.3, 626.6, 1014, 3069, 2522, 1389, 5536)))

repartition$proportion <- as.numeric(repartition$proportion)

IA_SC <- delta_glm(tab_pres, tab_ia, esp, title, list_param, var_eff_list, espece_id, catch_col, limit, formula_select_pres,formula_select_ia, data_type = data_type, repartition = repartition)
## 
## -----------------------------------------
## 
##    --  SOUS-MODELE PRESENCE/ABSENCE --
## 
## -----------------------------------------
##         [1] "effort =  surface_chalutee"
## [1] "9 over 732 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 732 lines to 732 lines with presences, aggregating by station or fishing operation"
## [1] "732 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 2501 stations with presence or absence data"
## 
## -----------------------------------------
## 
##    --     SOUS-MODELE ABONDANCE     --
## 
## -----------------------------------------
##         [1] "effort =  surface_chalutee"
## [1] "9 over 732 lines with effort = 0 or NA while catches are available, are then lost"
## [1] "i_ab = total_capture / surface_chalutee"
## [1] "passing from 732 lines to 732 lines with presences, aggregating by station or fishing operation"
## [1] "732 stations selected with presence of PSEUDOTOLITHUS ELONGATUS"
## [1] "Total of 2501 stations with presence or absence data"
## 
## #------------------------------------------------#
## 
## 
## 
##                     OUTPUTS
## 
## 
## 
## #------------------------------------------------#
## 
## The model you have selected :
## 
##     [1] "presence ~ strate_bathymetrique + annee + zone"
## 
## 
##     AIC = 1802.764
## 
##     Analysis of Deviance Table (Type III tests)
## 
## Response: presence
## Error estimate based on Pearson residuals 
## 
##                       Sum Sq   Df F values    Pr(>F)    
## strate_bathymetrique  730.47    2  416.157 < 2.2e-16 ***
## annee                 276.39   20   15.746 < 2.2e-16 ***
## zone                  120.91    2   68.884 < 2.2e-16 ***
## Residuals            2173.04 2476                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## % of variability explained by each effect :                      % variance % variance of explained (34.2%)
## strate_bathymetrique       22.1                              65
## annee                       8.4                              25
## zone                        3.7                              11
## Residuals                  65.8                              NA
## [1] "The model you selected:"
## [1] "log(i_ab) ~ annee + strate_bathymetrique + zone"
## [1] "log(i_ab) ~ annee + strate_bathymetrique + zone"
## [1] "AIC = 2662.145"
## Analysis of Deviance Table (Type III tests)
## 
## Response: log(i_ab)
## Error estimate based on Pearson residuals 
## 
##                       Sum Sq  Df F values    Pr(>F)    
## annee                 489.68  19  11.4788 < 2.2e-16 ***
## strate_bathymetrique  103.04   2  22.9463 2.229e-10 ***
## zone                   28.28   2   6.2985  0.001945 ** 
## Residuals            1569.41 699                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "% of variability explained by each effect : "
##                      % variance % variance of explained (28.4%)
## annee                      22.4                              79
## strate_bathymetrique        4.7                              17
## zone                        1.3                               5
## Residuals                  71.6                              NA
## Joining with `by = join_by(strate_bathymetrique, zone)`

Au premier niveau sont disponibles les valeurs en absolues. On peut sélectionner l’année de référence comme étant la première année par exemple…

head(IA_SC[[1]])
##   annee Scientific_Survey_GIN
## 1  1985               3246907
## 2  1986               6549103
## 3  1987               2053250
## 4  1988               3502687
## 5  1989               3515128
## 6  1990               9966053
IA_SC[[1]][,2]/IA_SC[[1]][1,2]
##  [1] 1.00000000 2.01702802 0.63237115 1.07877660 1.08260814 3.06939883
##  [7] 0.55729028 0.57303134 0.60317764 0.09133852 0.05304913 0.06867240
## [13] 0.02290094 0.03708654 0.06709058 0.08713738 0.08404936 0.16592489
## [19] 0.51930076 0.41715661

Le second niveau fournit le tableau les prédictions pour chaque combinaison de strate et pour chaque modèle (de présence/absence, des abondances et le delta-glm)

head(IA_SC[[2]])
##   annee strate_bathymetrique zone      i_ab      pres estimation
## 1  1985                5-10m nord  885.8258 0.9170494    2048737
## 2  1986                5-10m nord 1586.0044 0.9491765    3796614
## 3  1987                5-10m nord  672.7526 0.8466581    1436510
## 4  1988                5-10m nord  799.4045 0.9610232    1937517
## 5  1989                5-10m nord  799.2741 0.9616624    1938490
## 6  1990                5-10m nord 1859.8078 0.9859584    4624574

Et le dernier niveau permet de récupérer les graphiques illustrés en sortie de fonction.

Le travail ayant été réalisé pour les données scientifiques, il reste à reproduire cette démarche avec les données de pêche artisanale et industrielle avant de pouvoir coupler les différents indices d’abondance. Au terme de quoi on peut obtenir une liste des différents indices d’abondance.

3) Groupement des indices d’abondance

Une fois estimés ces 3 indices d’abondance, on peut les réunir dans une seule et même table en vue de les corriger d’une dérive de puissance des pêches et les regrouper

data_IA_raw <- full_join(IA_SC[[1]], IA_PA[[1]] , by = "annee") %>%  full_join(IA_PI[[1]] , by = "annee")

head(data_IA_raw)
##   annee Scientific_Survey_GIN Artisanal_Fishery Industrial_Fishery
## 1  1985               3246907                NA                 NA
## 2  1986               6549103                NA                 NA
## 3  1987               2053250                NA                 NA
## 4  1988               3502687                NA                 NA
## 5  1989               3515128                NA                 NA
## 6  1990               9966053                NA                 NA

La fonction mean_ai va permettre de réaliser ces différentes modifications, notamment d’appliquer une standardisation par rapport à un indice d’abondance de référence (la survey scientifique par exemple), une correction de la dérive de puissance des pêche et une moyenne lissante.

MOY = TRUE #lissage par une moyenne sur 3 ans
vect_year_elim <- c() #c(1990,2019)
type_ref = "Scientific_Survey_GIN"
type_other = c("Artisanal_Fishery", "Industrial_Fishery")
fish_power = c(0.05,0.05)
title <- "Abundances indices"
IA_final_raw <- mean_ai(data_IA_raw, MOY, vect_year_elim, type_ref, type_other, fish_power, title)

Ce dernier objet permet de récupérer l’ensemble des Indices d’abondance utilisés et calculés

IA_final_raw[[1]]
##    year Scientific_Survey_GIN Artisanal_Fishery Industrial_Fishery AI_standard
## 1  1985            3246907.08                NA                 NA  3246907.08
## 2  1986            6549102.55                NA                 NA  6549102.55
## 3  1987            2053250.35                NA                 NA  2053250.35
## 4  1988            3502687.36                NA                 NA  3502687.36
## 5  1989            3515128.02                NA                 NA  3515128.02
## 6  1990            9966052.78                NA                 NA  9966052.78
## 7  1991            1809469.74                NA                 NA  1809469.74
## 8  1992            1860579.51                NA                 NA  1860579.51
## 9  1993            1958461.74                NA                 NA  1958461.74
## 10 1995             296567.70                NA                 NA   296567.70
## 11 2000                    NA         334638.46          282440.85   308539.65
## 12 2001                    NA         201202.57          194497.85   197850.21
## 13 2002             172245.61         224489.55          269970.53   222235.23
## 14 2003                    NA                NA          239710.55   239710.55
## 15 2004             222972.90         206470.56          190919.73   206787.73
## 16 2005                    NA         420315.82          105589.59   262952.70
## 17 2006              74357.24                NA           98591.56    86474.40
## 18 2007             120416.55         157497.22          226469.68   168127.82
## 19 2008             217836.86         285254.01          210147.49   237746.12
## 20 2009             282926.98         142687.56          118891.48   181502.01
## 21 2010                    NA          99971.68                 NA    99971.68
## 22 2011                    NA         117073.98           98012.88   107543.43
## 23 2012                    NA          88110.22           61367.22    74738.72
## 24 2013                    NA         101242.65           96619.49    98931.07
## 25 2014                    NA                NA           53091.30    53091.30
## 26 2015             272900.46                NA          143308.24   208104.35
## 27 2016             538742.71                NA           68140.50   303441.61
## 28 2017            1686121.31                NA                 NA  1686121.31
## 29 2018            1354468.75         476578.83                 NA   915523.79
## 30 2019                    NA         249374.43                 NA   249374.43
##        AI_cor
## 1  4347638.90
## 2  3949753.33
## 3  4035013.42
## 4  3023688.57
## 5  5661289.39
## 6  5096883.51
## 7  4545367.34
## 8  1876170.33
## 9  1371869.65
## 10  854523.03
## 11  267652.52
## 12  242875.03
## 13  219932.00
## 14  222911.17
## 15  236483.66
## 16  185404.95
## 17  172518.31
## 18  164116.11
## 19  195791.98
## 20  173073.27
## 21  129672.37
## 22   94084.61
## 23   93737.74
## 24   75587.03
## 25  120042.24
## 26  188212.42
## 27  732555.76
## 28  968362.24
## 29  950339.84
## 30  471424.22

Quatre graphiques sont disponibles :

  1. IA après standardisation,

      • dérive des pêches,
      • moyenne entre les IA recalculés
      • moyenne lissante sur 3 ans
IA_final_raw[[2]]
## [[1]]
## Warning: Removed 24 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Warning: Removed 40 rows containing missing values or values outside the scale range
## (`geom_point()`).

## 
## [[2]]
## Warning: Removed 24 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Removed 40 rows containing missing values or values outside the scale range
## (`geom_point()`).

## 
## [[3]]
## Warning: Removed 24 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Removed 40 rows containing missing values or values outside the scale range
## (`geom_point()`).

## 
## [[4]]
## Warning: Removed 24 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Removed 40 rows containing missing values or values outside the scale range
## (`geom_point()`).