# Importation des packages
library(tidyverse)
library(gridExtra)
#library(lubridate)
library(sf)
library(mapview)
library(maptiles)
library(tidyterra)
library(kableExtra)
#library(knitr)
library(janitor)
library(RVAideMemoire)
library(emmeans)
library(car)
library(MASS)
library(lme4)
library(MuMIn)
#library(stringr)
library(stringi)
library(terra)
library(ggspatial)
library(slippymath)
library(rosm)
library(writexl)
# Importation des données - Secteur J25 : Petit Tregor
base_tregor <-
readxl::read_xlsx(path = '../raw_data/export_suiviloutrelocal_telecharger_csv_2025_04_03_10h58m17.xlsx') %>%
dplyr::select(
id_dataset,
code_secteur,
code_site,
nom_site,
x_l93,
y_l93,
date_visite,
observateurs,
condition_prospection,
nom_taxon,
nom_complet_taxon,
techn_observation,
statut_observation,
nb_ep_tot,
nb_ep_w,
nb_ep_dnf,
nb_ep_df
) %>%
mutate(
annee = year(date_visite),
mois = month(date_visite),
jour = day(date_visite),
nb_ep_w = abs(nb_ep_w),
statut_observation = ifelse(str_detect(statut_observation, '^Pr'), yes = 'Présent', no = 'Absent')
) %>%
filter(nom_complet_taxon =='Lutra lutra',
!(id_dataset == 85 & code_secteur == "FR5300006"),
code_secteur != "J401",
!(annee == 2022)) %>%
dplyr::distinct(code_site, annee, .keep_all = T)
#=> Suppression de la valeur de 2022 qui est une erreur de saisie
#tab_1 <- tribble(~"Comparaison", ~"n",
# "Identiques", "32")
#knitr::kable((tab_1), booktabs = TRUE,
##caption = 'A test table.')
# Importation avec data 2025 - Lieue de Greve
base_greve_raw <-
readxl::read_xls(path = '../raw_data/Suivi loutre mars_25.xls',
skip = 1,
col_names = T)
## Correction des données - Mise en forme - Secteur : Lieu Greve avec data 2025
base_greve <- base_greve_raw %>%
janitor::clean_names() %>%
dplyr::select(
point_n,
itineraire,
x,
y,
commune,
cours_deau,
bilan_choix_du_site,
epreinte_oct20,
date_suivi_fev_mars21,
marquage_suivi_fev_mars21,
date_suivi_oct21,
marquage_suivi_oct21,
observateurs_suivi_oct21,
date_suivi_mars22,
marquage_suivi_mars22,
observateurs_suivi_mars22,
date_suivi_decembre22,
marquage_suivi_decembre22,
observateurs_suivi_decembre22,
date_suivi_mars23,
marquage_suivi_mars23,
observateurs_suivi_mars23,
date_suivi_octobre_24,
marquage_suivi_octobre_24,
observateurs_suivi_octobre_24,
date_suivi_mars_25,
marquage_suivi_mars_25,
observateurs_suivi_mars_25
) %>%
dplyr::rename(
code_site = point_n,
y = x,
x = y,
marquage_suivi_oct_20 = epreinte_oct20
) %>%
dplyr::mutate(date_suivi_octobre_24 = as.Date(as.numeric(date_suivi_octobre_24), origin = "1899-12-30")) %>%
dplyr::mutate(date_suivi_oct_20 = as.Date("2020-10-01")) %>%
dplyr::mutate(across(
c(
date_suivi_fev_mars21,
date_suivi_oct21,
date_suivi_mars22,
date_suivi_decembre22,
date_suivi_mars23,
date_suivi_oct_20,
date_suivi_mars_25
),
~ as.POSIXct(.x)
)) %>%
mutate(across(starts_with("marquage_suivi_"), as.character)) %>%
tidyr::pivot_longer(
cols = c(
date_suivi_oct_20,
marquage_suivi_oct_20,
date_suivi_fev_mars21,
marquage_suivi_fev_mars21,
date_suivi_oct21,
marquage_suivi_oct21,
observateurs_suivi_oct21,
date_suivi_mars22,
marquage_suivi_mars22,
observateurs_suivi_mars22,
date_suivi_decembre22,
marquage_suivi_decembre22,
observateurs_suivi_decembre22,
date_suivi_mars23,
marquage_suivi_mars23,
observateurs_suivi_mars23,
date_suivi_octobre_24,
marquage_suivi_octobre_24,
observateurs_suivi_octobre_24,
date_suivi_mars_25,
marquage_suivi_mars_25,
observateurs_suivi_mars_25
),
names_to = c(".value", "session"),
names_pattern = "(date_suivi|marquage_suivi|observateurs_suivi)_(.*)"
) %>%
rename(
date_visite = date_suivi,
statut_presence = marquage_suivi,
observateurs = observateurs_suivi
) %>%
dplyr::mutate(
annee = year(date_visite),
mois = month(date_visite),
jour = day(date_visite),
code_site = as.factor(code_site),
statut_presence = case_when(
tolower(statut_presence) == "oui" ~ 1,
suppressWarnings(as.numeric(statut_presence)) >= 1 ~ 1,
tolower(statut_presence) %in% c("non", "peut_etre") ~ 0,
TRUE ~ 0
),
statut_observation = ifelse(statut_presence == 1, "Présent", "Absent"),
statut_presence = as.factor (statut_presence),
jour = ifelse(jour == 1, NA, jour),
annee = ifelse(annee == 2002, 2021, annee),
y = str_replace_all(y, ",", ""),
x = str_replace_all(x, " ", ""),
passage = ifelse(mois <= 6, 1, 2),
date_visite = ifelse(
date_visite == as.Date("2002-02-24"),
"2021-02-24",
as.character(date_visite)
),
observateurs_clean = observateurs %>%
str_to_lower() %>%
str_replace_all(" et ", "_") %>%
str_replace_all("[[:space:]]+", "_") %>%
str_replace_all("[^a-z0-9_]", "") %>%
stri_trans_general("latin-ascii")
) %>%
dplyr::mutate(observateurs_clean = as.factor(
ifelse(
observateurs_clean == "maxime_chapelle_romain_salaun",
"maxime_chapelle_romain_salun",
observateurs_clean
)
)) %>%
dplyr::filter(!is.na(code_site), !is.na(itineraire))
# Export jeu de donnée pour carte SIG
readr::write_csv(base_greve,
path = "../processed_data/base_Lieue_de_greve.csv"
)
# Export jeu de donnée pour carte SIG
readr::write_csv(base_j25,
path = "../processed_data/base_Petit_tregor.csv"
)
La présente étude se base sur des données récoltées en région Bretagne à la frontière entre le département du Finistère (29) et des Côtes d’Armor (22). Le premier site d’étude Petit Trégor est situé sur les bassins-versants de “Tregor” et du “Côtiers du Trégor” entre la baie de Morlaix et de Lannion dans le Finistère (29) (UMR 1069 SAS INRA - Agrocampus Ouest, n.d.). Le second site d’étude Lieue de Grève est situé sur le bassin-versant de “Lieue de Grève” entre la baie de Morlaix et de Lannion dans les Côtes d’Armor (22) (UMR 1069 SAS INRA - Agrocampus Ouest n.d.).
# Représentation cartographique du secteur d'étude et des sites correspondants
sites_geo_1 <- base_greve %>%
mutate(
code_secteur = "J22",
y = str_replace_all(y, ",", "."),
x = str_replace_all(x, ",", "."),
y = as.numeric(y),
x = as.numeric(x)
) %>%
filter(!is.na(x) & !is.na(y)) %>%
rename(nom_site = commune) %>%
dplyr::select(nom_site, code_site, code_secteur, statut_observation, annee, x, y) %>%
st_as_sf(coords = c("x", "y"), crs = 4326) %>%
st_transform(2154)
sites_geo_2 <- base_tregor %>%
filter(code_secteur == "J25") %>%
dplyr::select(nom_site:y_l93, code_site, code_secteur, statut_observation, annee) %>%
st_as_sf(coords = c("x_l93", "y_l93"), crs = 2154)
common_cols <- dplyr::intersect(names(sites_geo_1), names(sites_geo_2))
sites_geo <- bind_rows(
sites_geo_1[, common_cols],
sites_geo_2[, common_cols]
)
mapview(sites_geo, zcol = "code_secteur", col.regions = c("darkseagreen3", "indianred1"))
Les données analysées dans cette étude ont été transmises par le Groupe Mammalogique Breton (GMB). Les données du site Petit Trégor ont été acquises par les étudiants et étudiantes en BTS Gestion et Protection de la Nature (GPN) du Lycée agricole de Morlaix-Suscinio dans le Finistère (29). Les données du site Lieue de Grève ont été acquises par les salariées et salariées (conservateurs, stagiaires et service civique) de la Réserve naturelle régionale (RNR) des “Landes, prairies et étangs de Plounérin” dans le département des Côtes d’Armor (22), gérée principalement par Lannion-Trégor Communauté (Réserves naturelles de France n.d.).
Le protocole d’échantillonnage se base sur les travaux de Paul Chanin qui dans le cadre du Life in UK Rivers Projects à mis au point un protocole dans l’objectif de suivre la Loutre d’Europe (Lutra lutra) dans le réseau Natura 2000 aux Royaume-Uni (Chanin 2003). Les principaux objectifs visés du protocole sont, d’une part de surveiller la distribution des loutres dans les Zone Spéciale de Conservation (ZSC) en cherchant la présence de marquage à l’échelle d’un bassin-versant et d’autres part de détecter des modifications dans l’habitat de l’espèce (i.e. disponibilité en ressources alimentaires). Le protocole aspire à être simple, robuste et efficace.
Une étude préliminaire a été nécessaire pour définir chaque secteur d’étude correspondant à une section ou un sous-bassin-versant en repérant 80 à 100 sites d’études. Chaque site est situé au niveau d’un pont, d’un gué ou d’une passerelle appropriés au marquage de l’espèce (i.e. épreintes et empreintes). Selon ce protocole, parmi ces sites, en fonction des secteurs, 60 ont été sélectionnés. Les sites situés sur des terrains privés ont préférablement été évités. La facilité d’accès de ces sites a également été prise en compte pour la sélection de ceux-ci.
La prospection s’est faite sous les ponts, gués ou passerelles ainsi que sur les berges adjacentes. Si aucun indice de présences n’avait été trouvé (i.e. épreintes ou empreintes), la recherche s’étendait à 50 m de chaque côté du pont, avec l’utilisation de jumelles à vue si inaccessible. La présence ou l’absence d’indice de présence de la loutre d’Europe ont été relevées. Pour l’ensemble des sites, une fiche descriptive a été réalisée, comportant les coordonnées GPS, la facilité d’accès, des photographies des lieux, l’endroit ou des indices de présence de l’espèce sont observés, l’endroit pour se garer à proximité. Ces fiches permettent aux futurs observateurs et aux observatrices de faciliter l’échantillonnage les années suivantes. Les 60 sites ont donc été sélectionnés parmi la liste et constituent ceux qui ont été prospectés les années suivantes.
À la suite de l’étude préliminaire, le suivi des 60 sites sélectionnés a pu démarrer dès l’année suivante. Contrairement au protocole initial qui indiquait un contrôle annuel puis tous les trois ans, le suivi ultérieur du secteur d’étude a été réalisé annuellement. Le suivi du secteur Petit Trégor s’organisait autour de 60 sites qui ont été prospectés dans une période de 2011 à 2023 allant de mars à mai selon les années. Pour le secteur de la Lieue de grève, 63 sites ont été prospectés avec pour spécificité deux passages annuels effectués de 2020 à 2025. Un passage plutôt printanier vers mars-avril et un passage plutôt automnal-hivernal vers octobre et décembre. Le protocole initial indiquait que la période de prospection devait s’effectuer durant la période s’étalant de mai à septembre pour éviter des variations des niveaux d’eau. De plus, il a été recommandé à l’opérateur ou à l’opératrice de ne pas effectuer de prospection lors de fortes pluies, au moins 1 semaine à 15 jours sans pluie avant la prospection.
La prospection des sites chaque année, s’est faite à la manière de l’étude préliminaire. En plus de la présence ou absence d’indice de présence de la loutre, le nombre d’épreintes a été relevé selon trois modalités correspondant à l’état de celle-ci : fraîche, sèche ou sèche non fragmentée.
Il est important de noter que certaines années sont manquantes dans la série temporelle (figure). De plus, certains voir de nombreux sites n’ont pas été prospectés certaines années (figure).
base_j25 <- base_j25 %>%
mutate(annee = year(date_visite))
all_combos <- expand_grid(code_site = unique(base_j25$code_site),
annee = unique(base_j25$annee))
obs_complete <- all_combos %>%
left_join(base_j25 %>% dplyr::select(code_site, annee, statut_observation),
by = c("code_site", "annee")) %>%
mutate(
statut_final = case_when(
statut_observation == "Présent" ~ "Présent",
statut_observation == "Absent" ~ "Absent",
TRUE ~ "Non prospecté"
)
)
ggplot(obs_complete, aes(x = annee, y = code_site, fill = statut_final)) +
geom_tile(color = "white", linewidth = 0.3) +
scale_fill_manual(
values = c(
"Présent" = "darkseagreen3",
"Absent" = "indianred1",
"Non prospecté" = "grey80"
)
) +
labs(x = "Année",
y = "Site",
title = "Suivi des sites de prospection - Secteur Petit Tregor (J25)",
fill = "Statut d'observation") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
panel.border = element_rect(color = "black", fill = NA),
legend.background = element_rect(fill = "grey95", color = "black")
)
Figure 1: Statut d’observation des sites prospectée en fonction des années
Figure 2: Statut d’observation des sites prospectée en fonction des années, 1er passage (printemps)
base_greve_winter <- base_greve %>%
dplyr::filter(passage == 2)
annees_completes <- 2020:2024
all_combos <- expand_grid(
code_site = unique(base_greve_winter$code_site),
annee = annees_completes
)
obs_complete <- all_combos %>%
left_join(
base_greve_winter %>%
dplyr::select(code_site, annee, statut_observation),
by = c("code_site", "annee")
) %>%
dplyr::mutate(
statut_final = case_when(
statut_observation == "Présent" ~ "Présent",
statut_observation == "Absent" ~ "Absent",
TRUE ~ "Non prospecté"
)
)
ggplot(obs_complete, aes(x = annee, y = code_site, fill = statut_final)) +
geom_tile(color = "white", linewidth = 0.3) +
scale_fill_manual(values = c(
"Présent" = "darkseagreen3",
"Absent" = "indianred1",
"Non prospecté" = "grey80"
)) +
labs(x = "Année",
y = "Site",
title = "Suivi des sites de prospection - Secteur Lieu greve, 2e passage (hiver)",
fill = "Statut d'observation") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
panel.border = element_rect(color = "black", fill = NA),
legend.background = element_rect(fill = "grey95", color = "black")
)
Figure 3: Statut d’observation des sites prospectée en fonction des années, 2e passage (hiver)
Les données ont été mises en forme sous le logiciel de statistiques R (v.4.4.1) au moyen des packages : tidyverse, tidyterra, janitor et stringi.
Modelisation L’objectif de l’analyse de cette étude était de mettre en évidence une tendance temporelle de la loutre d’Europe basée sur l’observation des épreintes à l’échelle d’un bassin versant. La nature du jeu de données est spatio-temporel. Cependant, l’intérêt de l’analyse est porté sur l’effet temporel de la présence de l’espèce.
Pour mettre en évidence la relation entre le statut de présence de la loutre d’Europe et l’année, un modèle linéaire généralisé mixte (GLMM) a été utilisé. La variable réponse étant qualitative binaire, la distribution de celle-ci est binomiale et la fonction de lien choisie est “logit”. Pour interpréter la significativité des effets, un test de Wald (χ²) a été réalisé en fixant le risque α à 5% (i.e. p-value <0,05). L’année est considérée comme une co-variable, en considérant qu’une relation linéaire existe entre celle-ci et le temps. Cette prise de décision permet au modèle d’obtenir un coefficient associée à une p-value et donc de répondre à la question d’une tendance entre les années, significatives ou non.
Il est important de préciser que les séries sont appariées. En effet, les données récoltées chaque année sur les mêmes sites, les observations ne sont donc pas indépendantes. Ceci suggèrent l’intégration d’un facteur aléatoire dans l’analyse. C’est la variabilité spatiale du marquage par l’espèce entre les 60 sites du bassin versant qui a été considéré comme un facteur aléatoire. Malgré ça, l’autocorrélation spatiale a été négligée dans l’analyse.
Avant l’interprétation des résultats du modèle, pour vérifier l’ajustement du modèle aux données, l’indépendance des résidus du modèle avec les valeurs prédites à été vérifiée.
L’ensemble des analyses ont été effectuées sur le logiciel de statistique R (v.4.4.1) avec les packages suivants : lme4, RVAideMemoire, MuMIn et car. Pour des questions de réplicabilité de l’analyse, l’ensemble des scripts est disponible en accès libre sur la plateforme github :https://github.com/PabloVigneron/Suivi_loutre .
Simulation
annees_completes <- 2011:2023
combi <- expand_grid(annee = annees_completes)
resume <- base_j25 %>%
group_by(annee) %>%
summarise(
n_obs = n(),
n_presences = sum(statut_presence == "1"),
pc_presences = n_presences / n_obs,
.groups = "drop"
)
resume_complet <- combi %>%
left_join(resume, by = "annee") %>%
replace_na(list(
n_obs = 0,
n_presences = 0,
pc_presences = 0
)) %>%
dplyr::mutate(annee = factor(annee, levels = annees_completes))
ggplot(resume_complet,
aes(x = factor(annee), y = pc_presences)) +
geom_bar(stat = "identity", position = position_dodge()) +
geom_text(
aes(label = scales::percent(pc_presences, accuracy = 1)),
position = position_dodge(width = 0.9),
vjust = -0.3,
size = 3
)+
labs(x = "Année",
y = "Pourcentage de présence de la loutre",
fill = "Passage",
title = "Présence de la loutre par année - Secteur Petit Trégor") +
scale_y_continuous(labels = scales::percent_format(accuracy = 1),
limits = c(0, 1)) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
panel.border = element_rect(
color = "black",
fill = NA,
linewidth = 0.5
),
axis.text.x = element_text(angle = 45, hjust = 1),
panel.background = element_rect(fill = "grey94", color = "white"),
plot.background = element_rect(fill = "white", color = NA),
legend.background = element_rect(fill = "grey94", color = "black"),
panel.grid.major = element_line(color = "white"),
panel.grid.minor = element_line(color = "white")
)
Figure 4: Pourcentages de présence de la loutre en fonction des passages et des années
base_j25_year_numeric <- base_j25 %>%
mutate(annee = as.numeric(annee),
statut_presence = as.factor(statut_presence))
mod3.0 <- glmer(statut_presence~annee+(1|code_site), family=binomial(link = "logit"), data = base_j25_year_numeric)
plotresid(mod3.0)
summary(mod3.0)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: statut_presence ~ annee + (1 | code_site)
## Data: base_j25_year_numeric
##
## AIC BIC logLik deviance df.resid
## 438.2 450.2 -216.1 432.2 404
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.1496 -0.5162 -0.3925 -0.3221 2.4806
##
## Random effects:
## Groups Name Variance Std.Dev.
## code_site (Intercept) 0.934 0.9665
## Number of obs: 407, groups: code_site, 60
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -58.93704 70.06477 -0.841 0.400
## annee 0.02853 0.03474 0.821 0.411
##
## Correlation of Fixed Effects:
## (Intr)
## annee -1.000
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## unable to evaluate scaled gradient
## Model failed to converge: degenerate Hessian with 1 negative eigenvalues
Anova(mod3.0)
## Analysis of Deviance Table (Type II Wald chisquare tests)
##
## Response: statut_presence
## Chisq Df Pr(>Chisq)
## annee 0.6746 1 0.4114
base_greve_passage <- base_greve %>%
mutate(
passage_label = ifelse(mois <= 6, "Passage printemps", "Passage hiver"),
passage_label = factor(passage_label, levels = c("Passage printemps", "Passage hiver"))
)
annees <- sort(unique(base_greve_passage$annee))
passages <- c("Passage printemps", "Passage hiver")
combi <- expand_grid(annee = annees, passage_label = passages)
resume <- base_greve_passage %>%
group_by(annee, passage_label) %>%
summarise(
n_obs = n(),
n_presences = sum(statut_presence == '1'),
pc_presences = n_presences / n_obs,
.groups = "drop"
)
resume_complet <- combi %>%
left_join(resume, by = c("annee", "passage_label")) %>%
replace_na(list(
n_obs = 0,
n_presences = 0,
pc_presences = 0
))
ggplot(resume_complet, aes(x = factor(annee), y = pc_presences, fill = passage_label)) +
geom_bar(stat = "identity", position = position_dodge()) +
geom_text(aes(label = scales::percent(pc_presences, accuracy = 1)),
position = position_dodge(width = 0.9), vjust = -0.3, size = 3) +
scale_fill_manual(
values = c("Passage printemps" = "gray50", "Passage hiver" = "grey20")
) +
labs(
x = "Année",
y = "Pourcentage de présence de la loutre",
fill = "Passage",
title = "Présence de la loutre par année et par passage - Secteur Lieue de Grève"
) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, 1)) +
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
panel.border = element_rect(
color = "black",
fill = NA,
linewidth = 0.5
),
axis.text.x = element_text(angle = 45, hjust = 1),
panel.background = element_rect(fill = "grey94", color = "white"),
plot.background = element_rect(fill = "white", color = NA),
legend.background = element_rect(fill = "grey94",color = "black"),
panel.grid.major = element_line(color = "white"),
panel.grid.minor = element_line(color = "white")
)
Figure 5: Pourcentages de présence de la loutre en fonction des passages et des années
greve_year_factor_season <- base_greve%>%
mutate(annee = as.numeric(annee),
passage = as.factor(passage))
mod5.0<- glmer(statut_presence~annee + passage + (1|code_site), family=binomial(link = "logit"), data = greve_year_factor_season)
plotresid(mod5.0)
summary(mod5.0)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: statut_presence ~ annee + passage + (1 | code_site)
## Data: greve_year_factor_season
##
## AIC BIC logLik deviance df.resid
## 577.9 594.8 -284.9 569.9 500
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.2337 -0.4900 -0.2541 0.5927 2.5124
##
## Random effects:
## Groups Name Variance Std.Dev.
## code_site (Intercept) 3.294 1.815
## Number of obs: 504, groups: code_site, 63
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.065706 2.613484 -1.173 0.2408
## annee 0.001335 0.001308 1.021 0.3071
## passage2 -0.411935 0.222191 -1.854 0.0637 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) annee
## annee -0.994
## passage2 -0.117 0.077
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## Model failed to converge with max|grad| = 0.153997 (tol = 0.002, component 1)
## Model is nearly unidentifiable: very large eigenvalue
## - Rescale variables?
## Model is nearly unidentifiable: large eigenvalue ratio
## - Rescale variables?
Anova(mod5.0)
## Analysis of Deviance Table (Type II Wald chisquare tests)
##
## Response: statut_presence
## Chisq Df Pr(>Chisq)
## annee 1.0429 1 0.30714
## passage 3.4372 1 0.06374 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod6.0<- glmer(statut_presence~annee + (1|code_site), family=binomial(link = "logit"), data = greve_year_factor_season)
plotresid(mod6.0)
summary(mod6.0)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: statut_presence ~ annee + (1 | code_site)
## Data: greve_year_factor_season
##
## AIC BIC logLik deviance df.resid
## 578.8 591.5 -286.4 572.8 501
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.0755 -0.4623 -0.2833 0.6361 2.3571
##
## Random effects:
## Groups Name Variance Std.Dev.
## code_site (Intercept) 3.236 1.799
## Number of obs: 504, groups: code_site, 63
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -87.339805 2.447072 -35.69 <2e-16 ***
## annee 0.042909 0.001229 34.93 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr)
## annee -0.994
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## Model failed to converge with max|grad| = 0.142225 (tol = 0.002, component 1)
## Model is nearly unidentifiable: very large eigenvalue
## - Rescale variables?
## Model is nearly unidentifiable: large eigenvalue ratio
## - Rescale variables?