data & packages

# Définir environement de travail
df = readRDS("ecd_obs_agathe.RDS") 
# Charger les données 
df <- df[!is.na(df$obs_ts),] 
# Tableau sans les "vrais" NA, ie les calais sans données d'observateurs
df[is.na(df)] <- 0
# avec les 0 ( changer les " faux NA " par des 0 )
library('mgcv')
## Loading required package: nlme
## This is mgcv 1.8-34. For overview type 'help("mgcv-package")'.
# pour le modele gam
library('mgcViz')
## Loading required package: qgam
## Loading required package: ggplot2
## Loading required package: rgl
## This build of rgl does not include OpenGL functions.  Use
##  rglwidget() to display results, e.g. via options(rgl.printRglwidget = TRUE).
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Registered S3 method overwritten by 'mgcViz':
##   method from  
##   +.gg   GGally
## 
## Attaching package: 'mgcViz'
## The following objects are masked from 'package:stats':
## 
##     qqline, qqnorm, qqplot
library('ggpubr')
## Registered S3 methods overwritten by 'car':
##   method                          from
##   influence.merMod                lme4
##   cooks.distance.influence.merMod lme4
##   dfbeta.influence.merMod         lme4
##   dfbetas.influence.merMod        lme4
library("maps") # pour la carte sur le graph 2D 
library("lubridate")
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:nlme':
## 
##     collapse
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(cowplot)
## 
## Attaching package: 'cowplot'
## The following object is masked from 'package:lubridate':
## 
##     stamp
## The following object is masked from 'package:ggpubr':
## 
##     get_legend

Extract 95% OU 100% of captures and load file

cc = sort(df$capture_total_target_tunas_corrigee)
xx = cumsum(cc)
I = min(which(xx > 0.95*max(xx)))
cc_max = cc[I]
df = df[df$capture_total_target_tunas_corrigee < cc_max,]

Species to consider + Stratification+ Legende+ Distribution

# espèce à considérer -----------------------------------------------------

espece<-c("num_Other_bony_fishes","num_Silky_shark","num_Common_dolphinfish")

# transformation & création des variables -------------

df$num_Other_bony_fishes=df$`num_Other bony fishes`
df$num_Common_dolphinfish=df$`num_Common dolphinfish`
df$num_Silky_shark=df$`num_Silky shark`
df$mois<-month(df$d_act)

# stratification ---------------

df$group = paste0("O",df$ocean,"G",df$code_assoc_groupe) 
# Création d'une variable groupe 
# O1G1, O1G2, O2G1, O2G2
# O1: Atlantique 02: Indien
# G1: Floating object G2: Free swiming school 
## Par océan et banc 
df1<-df[df$group =="O1G1",] 
# df1 contient tous les calais qui sont sont O1G1
df2<-df[df$group =="O1G2",]
# df2 contient tous les calais qui sont O1G2
df3<-df[df$group =="O2G1",]
# df3 contient tous les calais qui sont O2G1
df4<-df[df$group =="O2G2",]
# df4 contient tous les calais qui sont O2G2

# légende -----------------------------------------------

strat<-c("O1G1","O1G2","O2G1","O2G2")
data_list<-list(O1G1=df1,O1G2=df2,O2G1=df3,O2G2=df4) 

load models by=trimestre with the cluster

Fonction to load the results from the cluster

load_rdata_to_list <- function(file)
{
  env <- new.env()
  nm <- load(file, env)
  as.list(env)[nm]
}

load the results from the cluster

fns = dir("gam_all_factors_tweedie_bigger_k/95percent","RData$")
xx = do.call(rbind,strsplit(fns,".",fixed=TRUE))
grps=xx[,1]
sps=gsub("^num_","",xx[,2])

res = list()
for (k in seq_along(fns)) {
  fn=fns[k]
  x = load_rdata_to_list(file.path("gam_all_factors_tweedie_bigger_k","95percent",fn))
  gr = grps[k]
  sp = sps[k]
  res[[paste(gr,sp,sep=".")]] = list(sp=sp,gr=gr,fn=fn,gam=x$gam)
}
saveRDS(res,"resultats_gam_by_trimestre_tweedie.95perc.RDS")
res = readRDS("resultats_gam_by_trimestre.95perc.RDS")
res = readRDS("resultats_gam_by_trimestre.100perc.RDS")
res = readRDS("resultats_gam_by_trimestre_tweedie.95perc.RDS")

Pvalues

pvalues<-list()
  for (v in res){
  a<-summary(v$gam)
  b<-c(a$s.table[,'p-value'][[1]],a$s.table[,'p-value'][[2]],a$s.table[,'p-value'][[3]],a$s.table[,'p-value'][[4]],a$s.table[,'p-value'][[5]],a$edf[[1]],a$edf[[2]],a$edf[[3]],a$edf[[4]],a$edf[[5]],a$dev.expl)
  pvalues[[v$fn]]<-b
  }
colnames<-c("Pvalue s(capture) ","Pvalue trim 1","Pvalue trim 2","Pvalue trim 3","Pvalue trim 4","edf s(capture)","edf trim 1","edf trim 2","edf trim 3","edf trim 4","deviance expl. ")
pvalues.table<-t(as.data.frame(pvalues))
colnames(pvalues.table)<-colnames
pvalues.table
##                                   Pvalue s(capture)  Pvalue trim 1
## O1G1.num_Common_dolphinfish.RData       0.000000e+00  0.000000e+00
## O1G1.num_Silky_shark.RData              0.000000e+00  0.000000e+00
## O1G2.num_Common_dolphinfish.RData       3.607580e-06  3.779866e-04
## O1G2.num_Other_bony_fishes.RData        0.000000e+00  0.000000e+00
## O1G2.num_Silky_shark.RData              0.000000e+00  1.562330e-02
## O2G1.num_Common_dolphinfish.RData       0.000000e+00  0.000000e+00
## O2G1.num_Other_bony_fishes.RData        0.000000e+00  0.000000e+00
## O2G1.num_Silky_shark.RData              0.000000e+00  0.000000e+00
## O2G2.num_Common_dolphinfish.RData       0.000000e+00  0.000000e+00
## O2G2.num_Other_bony_fishes.RData        0.000000e+00  0.000000e+00
## O2G2.num_Silky_shark.RData              1.748851e-04  4.429159e-05
##                                   Pvalue trim 2 Pvalue trim 3 Pvalue trim 4
## O1G1.num_Common_dolphinfish.RData  0.000000e+00     0.0000000  0.0000000000
## O1G1.num_Silky_shark.RData         0.000000e+00     0.0000000  0.0000000000
## O1G2.num_Common_dolphinfish.RData  0.000000e+00     0.0000000  0.0000000000
## O1G2.num_Other_bony_fishes.RData  2.345917e-150     0.0000000  0.0000000000
## O1G2.num_Silky_shark.RData         0.000000e+00     0.0000000  0.0000000000
## O2G1.num_Common_dolphinfish.RData  0.000000e+00     0.0000000  0.0000000000
## O2G1.num_Other_bony_fishes.RData   0.000000e+00     0.0000000  0.0000000000
## O2G1.num_Silky_shark.RData         0.000000e+00     0.0000000  0.0000000000
## O2G2.num_Common_dolphinfish.RData  0.000000e+00     0.0000000  0.0000000000
## O2G2.num_Other_bony_fishes.RData   0.000000e+00     0.0000000  0.0000000000
## O2G2.num_Silky_shark.RData         3.880141e-02     0.3154147  0.0008148199
##                                   edf s(capture) edf trim 1 edf trim 2
## O1G1.num_Common_dolphinfish.RData       8.766676   88.63795  78.872862
## O1G1.num_Silky_shark.RData              5.867743   20.55815  26.888249
## O1G2.num_Common_dolphinfish.RData       1.017513   16.01513  15.256713
## O1G2.num_Other_bony_fishes.RData        9.000514   67.17326  52.231305
## O1G2.num_Silky_shark.RData              8.778859   11.05967  23.283866
## O2G1.num_Common_dolphinfish.RData       8.898762  132.67701 125.526028
## O2G1.num_Other_bony_fishes.RData        8.988825  154.70276 152.028189
## O2G1.num_Silky_shark.RData              4.314473   96.46966  79.021452
## O2G2.num_Common_dolphinfish.RData       9.000000 -357.62743   3.133591
## O2G2.num_Other_bony_fishes.RData        8.995224   26.50747  35.684851
## O2G2.num_Silky_shark.RData              1.075783   22.72786  12.227037
##                                   edf trim 3 edf trim 4 deviance expl. 
## O1G1.num_Common_dolphinfish.RData  71.607727 121.185805       0.3705957
## O1G1.num_Silky_shark.RData         28.423969  24.428163       0.3031578
## O1G2.num_Common_dolphinfish.RData  27.336749   3.121850       0.9073282
## O1G2.num_Other_bony_fishes.RData  150.882566  47.604903       0.8512399
## O1G2.num_Silky_shark.RData         30.864023  10.533253       0.7052324
## O2G1.num_Common_dolphinfish.RData 126.836178 140.647688       0.3609168
## O2G1.num_Other_bony_fishes.RData  159.343662 160.103911       1.0000000
## O2G1.num_Silky_shark.RData         90.345499 114.574210       0.2318903
## O2G2.num_Common_dolphinfish.RData 497.542975   3.011305       0.9794741
## O2G2.num_Other_bony_fishes.RData   14.402668  37.095994       0.9887014
## O2G2.num_Silky_shark.RData          7.087074  14.724926       0.8204418
write.csv(pvalues.table,file = "tableau des pvalues.csv") 

Diagnostic

for (v in res){
   print(v$fn)
    par(mfrow=c(2,2))
    try(gam.check(v$gam))
  }
## [1] "O1G1.num_Common_dolphinfish.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 8 iterations.
## Gradient range [-1.806193e-05,0.004081038]
## (score 26949.67 & scale 1).
## Hessian positive definite, eigenvalue range [3.370876,3379.998].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                               k'    edf k-index p-value
## s(capture_total_target_tunas_corrigee)      9.00   8.77    0.95    0.68
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.00  88.64    0.98    0.97
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.00  78.87    0.99    1.00
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.00  71.61    0.98    0.96
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.00 121.19    0.99    1.00
## [1] "O1G1.num_Silky_shark.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 7 iterations.
## Gradient range [-0.0007654101,0.001118902]
## (score 4692.888 & scale 1).
## Hessian positive definite, eigenvalue range [0.4261497,1791.87].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                               k'    edf k-index p-value    
## s(capture_total_target_tunas_corrigee)      9.00   5.87    0.86   0.890    
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.00  20.56    0.80  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.00  26.89    0.80   0.005 ** 
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.00  28.42    0.81   0.035 *  
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.00  24.43    0.81   0.005 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "O1G2.num_Common_dolphinfish.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 13 iterations.
## Gradient range [-0.0001175687,0.0003380411]
## (score 367.4419 & scale 1).
## Hessian positive definite, eigenvalue range [7.062788e-06,87.34817].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                               k'    edf k-index p-value    
## s(capture_total_target_tunas_corrigee)      9.00   1.02    0.31   0.190    
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.00  16.02    0.28   0.010 ** 
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.00  15.26    0.27  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.00  27.34    0.28   0.005 ** 
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.00   3.12    0.27   0.005 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "O1G2.num_Other_bony_fishes.RData"
## Error in while (sum(ind) > 0 && kk < 50) { : 
##   valeur manquante là où TRUE / FALSE est requis
## [1] "O1G2.num_Silky_shark.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 15 iterations.
## Gradient range [-6.235185e-05,1.535316e-05]
## (score 1918.173 & scale 1).
## Hessian positive definite, eigenvalue range [0.5272671,340.1929].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                               k'    edf k-index p-value    
## s(capture_total_target_tunas_corrigee)      9.00   8.78    0.96   0.280    
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.00  11.06    0.90   0.015 *  
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.00  23.28    0.86  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.00  30.86    0.87  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.00  10.53    0.85  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "O2G1.num_Common_dolphinfish.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 12 iterations.
## Gradient range [-8.211114e-05,0.06204618]
## (score 46267.65 & scale 1).
## Hessian positive definite, eigenvalue range [3.844242,3593.743].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                              k'   edf k-index p-value
## s(capture_total_target_tunas_corrigee)      9.0   8.9    0.96    0.32
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.0 132.7    0.97    0.69
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.0 125.5    0.96    0.58
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.0 126.8    0.97    0.59
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.0 140.7    0.97    0.66
## [1] "O2G1.num_Other_bony_fishes.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 16 iterations.
## Gradient range [-0.0008004842,0.009866675]
## (score 531568.7 & scale 1).
## Hessian positive definite, eigenvalue range [3.968763,3619.525].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                               k'    edf k-index p-value  
## s(capture_total_target_tunas_corrigee)      9.00   8.99    0.96   0.035 *
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.00 154.70    0.96   0.185  
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.00 152.03    0.97   0.495  
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.00 159.34    0.97   0.275  
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.00 160.10    0.98   0.545  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "O2G1.num_Silky_shark.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 7 iterations.
## Gradient range [-0.01249161,0.02659204]
## (score 15913.31 & scale 1).
## Hessian positive definite, eigenvalue range [0.931433,3955.474].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                               k'    edf k-index p-value    
## s(capture_total_target_tunas_corrigee)      9.00   4.31    0.87  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.00  96.47    0.90    0.27    
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.00  79.02    0.90    0.42    
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.00  90.35    0.90    0.34    
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.00 114.57    0.90    0.35    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "O2G2.num_Common_dolphinfish.RData"
## Error in while (sum(ind) > 0 && kk < 50) { : 
##   valeur manquante là où TRUE / FALSE est requis
## [1] "O2G2.num_Other_bony_fishes.RData"

## 
## Method: REML   Optimizer: outer newton
## full convergence after 12 iterations.
## Gradient range [-9.877641e-05,0.0001059462]
## (score 528.0641 & scale 1).
## Hessian positive definite, eigenvalue range [0.05304179,100.2689].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                              k'   edf k-index p-value    
## s(capture_total_target_tunas_corrigee)      9.0   9.0    0.45    0.39    
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.0  26.5    0.36  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.0  35.7    0.35  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.0  14.4    0.36  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.0  37.1    0.38  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "O2G2.num_Silky_shark.RData"

## 
## Method: REML   Optimizer: outer newton
## step failed after 10 iterations.
## Gradient range [-0.3465182,0.29709]
## (score 156.5845 & scale 1).
## Hessian positive definite, eigenvalue range [0.01402357,23.21733].
## Model rank =  682 / 682 
## 
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
## 
##                                               k'    edf k-index p-value    
## s(capture_total_target_tunas_corrigee)      9.00   1.08    0.59    0.03 *  
## te(obs_lon,obs_lat):as.factor(trimestre)1 168.00  22.73    0.36  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)2 168.00  12.23    0.36  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)3 168.00   7.09    0.37  <2e-16 ***
## te(obs_lon,obs_lat):as.factor(trimestre)4 168.00  14.72    0.36  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

plot gam by = saison

for (v in res){ 
    o=getViz(v$gam)
    print(paste(v$sp,v$gr))
    trim1<-plot(sm(o,2))+xlab("Longitude") + ylab("Latitude") + ggtitle("trimestre 1") + l_fitRaster() + l_fitContour() +annotation_map(map_data("world")) 
    trim2<-plot(sm(o,3))+xlab("Longitude") + ylab("Latitude") + ggtitle("trimestre 2") + l_fitRaster() + l_fitContour() +annotation_map(map_data("world")) 
    trim3<-plot(sm(o,4))+xlab("Longitude") + ylab("Latitude") + ggtitle("trimestre 3") + l_fitRaster() + l_fitContour() +annotation_map(map_data("world")) 
    trim4<-plot(sm(o,5))+xlab("Longitude") + ylab("Latitude") + ggtitle("trimestre 4") + l_fitRaster() + l_fitContour() +annotation_map(map_data("world")) 
    gridPrint(trim1,trim2,trim3,trim4,ncol=2)
    
  }
## [1] "Common_dolphinfish O1G1"

## [1] "Silky_shark O1G1"

## [1] "Common_dolphinfish O1G2"

## [1] "Other_bony_fishes O1G2"

## [1] "Silky_shark O1G2"

## [1] "Common_dolphinfish O2G1"

## [1] "Other_bony_fishes O2G1"

## [1] "Silky_shark O2G1"

## [1] "Common_dolphinfish O2G2"

## [1] "Other_bony_fishes O2G2"

## [1] "Silky_shark O2G2"

for (v in res){ 
    o=getViz(v$gam)
    print(plot(sm(o,1))+xlab("capture_total_target_tunas_corrigee") + ylab("effect capture")+ggtitle(v$fn))
}