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
## 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 :
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.
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]]
## [[1]]
##
## [[2]]
En premier sont conservées les observations brutes, avec en rouge les
absences 0
et en bleu les présence 1
.
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.
##
## 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
##
## 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.
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….
## [[1]]
##
## [[2]]
…en reconstruisant une simple moyenne des indices d’abondances / cpue mesurées…
## [[1]]
##
## [[2]]
…puis les interactions…
## [[1]]
##
## [[2]]
et les estimations pour chaque modalité
## [[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…
## annee Scientific_Survey_GIN
## 1 1985 3246907
## 2 1986 6549103
## 3 1987 2053250
## 4 1988 3502687
## 5 1989 3515128
## 6 1990 9966053
## [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)
## 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
## 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 :
IA après standardisation,
- dérive des pêches,
- moyenne entre les IA recalculés
- moyenne lissante sur 3 ans
## [[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()`).