lIEN DE PUBLICATION : https://rpubs.com/theophile_kabasele/1448368

iMPORTATION DES DONNÉES

FONCTION QUI TRANSFORME LES BD DES PERTURBATIONS EN DONNÉES BINAIRES

# =========================================================================
# ÉTAPE 1 : Calcul des intervalles de confiance (Before & After)
#           pour chaque combinaison Site x Esp
# =========================================================================

# On calcule la moyenne et l'écart-type du BL pour chaque Site, Esp et Position
# Ici on utilise un IC à 95% : mean ± 1.96 * sd
# (remplace 1.96 par qt(0.975, df) si tu veux un IC basé sur la loi de Student)

IC_BL <- All_window %>%
              dplyr::select(Site, Esp, Perturbation, Position, Year, Rwl, BL, Ratio, Position, Perturbation) |> 
              group_by(Site, Esp, Perturbation, Position) %>%
              summarise(
                          mean_BL = mean(BL, na.rm = TRUE),
                          sd_BL   = sd(BL, na.rm = TRUE),
                          n       = sum(!is.na(BL)),
                          # IC inférieur et supérieur (Student pour petit échantillon)
                          IC_inf  = mean_BL - qt(0.975, n - 1) * sd_BL / sqrt(n),
                          IC_sup  = mean_BL + qt(0.975, n - 1) * sd_BL / sqrt(n),
                          .groups = "drop"
                        )


# Pour la suite, on a surtout besoin de l'IC du "Before" comme seuil de référence
# (mais on garde aussi l'IC du "After" si tu veux comparer)
IC_before <- IC_BL %>%
              filter(Position == "Before") %>%
              dplyr::select(Site, Esp, Perturbation, Position, IC_inf_before = IC_inf, IC_sup_before = IC_sup)

# =========================================================================
# ÉTAPE 2 : On récupère les données "After" et on joint l'IC du Before
# =========================================================================

df_after <- All_window %>%
             filter(Position == "After") |> 
             left_join(IC_before, by = c("Site", "Esp", "Perturbation")) |>  
             filter(IC_sup_before >0)

# =========================================================================
# ÉTAPE 3 : Pour chaque individu (Site, Esp, Ind), sur les 10 années After :
#   - nb_annees_sup   : nombre d'années au-dessus de l'IC supérieur
#   - amplitude_moy   : amplitude moyenne de dépassement (BL - IC_sup) quand > 0
#   - amplitude_max   : amplitude max de dépassement
#   - nb_consec_max   : plus longue série d'années consécutives au-dessus
# =========================================================================

Data_amplitude <- df_after %>%
                mutate(
                        depasse = BL > IC_sup_before,
                        amplitude = ifelse(depasse, BL - IC_sup_before, 0)
                ) %>%
                group_by(Site, Esp, Id,Perturbation) %>%
                arrange(Year, .by_group = TRUE) %>%
                summarise(
                            nb_year_sup  = sum(depasse, na.rm = TRUE),
                            
                            # Remplacement des NaN par 0 si aucun dépassement
                            amplitude_moy  = ifelse(sum(depasse, na.rm = TRUE) == 0, 
                                                    0, 
                                                    mean(amplitude[depasse], na.rm = TRUE)),
                                                    
                            amplitude_max  = ifelse(sum(depasse, na.rm = TRUE) == 0, 
                                                    0, 
                                                    max(amplitude, na.rm = TRUE)),
                                                    
                            nb_consec_max  = {
                              if (all(!depasse)) {
                                0
                              } else {
                                rle_dep <- rle(depasse)
                                max(rle_dep$lengths[rle_dep$values], na.rm = TRUE)
                              }
                            },
                            .groups = "drop"
                          )
# =========================================================================
# Résultat final
# =========================================================================
print(Data_amplitude)
# A tibble: 1,306 × 8
   Site  Esp   Id     Perturbation nb_year_sup
   <chr> <fct> <chr>  <chr>              <int>
 1 T52   BOP   A03_31 Tbe                    0
 2 T52   BOP   A03_32 Tbe                    1
 3 T52   BOP   A03_33 Tbe                    0
 4 T52   BOP   A03_34 Tbe                    0
 5 T52   BOP   A03_35 Tbe                    0
 6 T52   BOP   A03_36 Tbe                    0
 7 T52   BOP   A03_37 Tbe                    0
 8 T52   BOP   A03_39 Tbe                    0
 9 T52   BOP   A03_40 Tbe                    0
10 T52   BOP   A03_42 Tbe                    4
# ℹ 1,296 more rows
# ℹ 3 more variables: amplitude_moy <dbl>,
#   amplitude_max <dbl>, nb_consec_max <dbl>

Graphique

Conclusions : plus de la moitié des mesures (environs les deux tiers) des 10 années après ont des valeurs superieure à l’interval de confiance des 10 années avant.

MODÉLISATION

NOMBRE D’ANNÉES

Plot de début de

Modélisation

On applique le modèle

lmer_Year_sup <- lmer(nb_year_sup ~ Perturbation + (1 | Id) + (1 | Site) , data = Data_amplitude, REML=T) # Effet d'croisée entre Id et Site

anova(lmer_Year_sup)
Type III Analysis of Variance Table with Satterthwaite's method
             Sum Sq Mean Sq NumDF  DenDF F value
Perturbation 0.2728  0.2728     1 717.86  0.0182
             Pr(>F)
Perturbation 0.8927
summary(lmer_Year_sup)
Linear mixed model fit by REML. t-tests use
  Satterthwaite's method [lmerModLmerTest]
Formula: 
nb_year_sup ~ Perturbation + (1 | Id) + (1 | Site)
   Data: Data_amplitude

REML criterion at convergence: 7483.3

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.5115 -0.9122 -0.1996  0.9844  2.0305 

Random effects:
 Groups   Name        Variance Std.Dev.
 Id       (Intercept)  3.3027  1.8173  
 Site     (Intercept)  0.1362  0.3691  
 Residual             14.9960  3.8725  
Number of obs: 1306, groups:  Id, 807; Site, 8

Fixed effects:
                 Estimate Std. Error        df
(Intercept)       4.54676    0.30046  47.81704
PerturbationTbe  -0.03867    0.28667 717.85541
                t value Pr(>|t|)    
(Intercept)      15.133   <2e-16 ***
PerturbationTbe  -0.135    0.893    
---
Signif. codes:  
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr)
PerturbtnTb -0.789

Conclusion : le modèle est significatif. Il n’y a pas de différence significative de la moyenne du n_year entre type de perturbations.

VALIDATION DU MODÈLE

3.1 Vérifier l’homogénéité de la variance : Résidus vs Prédits (détection globale)

Interprétation : Étendue non-homogène des résidus -> la supposition non- respectée!

Q-Q PLOT

####3.2 Vérifier l’indépendance des résidus avec chaque covariable

EFFETS FIXES
Pour Pert_type (facteur)

EFFETS ALÉATOIRES

Interprétation : Étendue hétérogène des résidus autour de 0 -> pas de patron des résidus en fonction de la variable, la supposition n’est pas respectée!

3.3 Vérifier la normalité des résidus

Interprétation : Des résidus ne suivent ^pas une distribution normale indiquent que le modèle n’est pas biaisé.

CONCLUSION : FAIRE LA TRANSFORMATION LOGARITHMIQUE

Transformation logarithmique

#Data_amplitude$mean.Ratio_log <- log(Data_amplitude$mean_Ratio)  # Ajoute une colonne transformée

# Transformation pour la modélisation
Data_amplitude$nb_year_sup_log <- sign(Data_amplitude$nb_year_sup) *
                                         log(abs(Data_amplitude$nb_year_sup) + 1)

lmer_Year_sup_log <- lmer(nb_year_sup_log ~ Perturbation + (1 | Id) + (1 | Site), data = Data_amplitude, REML=T)

summary(lmer_Year_sup_log)
Linear mixed model fit by REML. t-tests use
  Satterthwaite's method [lmerModLmerTest]
Formula: 
nb_year_sup_log ~ Perturbation + (1 | Id) + (1 | Site)
   Data: Data_amplitude

REML criterion at convergence: 3826.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.6189 -1.0248  0.2380  0.8781  1.8493 

Random effects:
 Groups   Name        Variance Std.Dev.
 Id       (Intercept) 0.179611 0.42381 
 Site     (Intercept) 0.009573 0.09784 
 Residual             0.924460 0.96149 
Number of obs: 1306, groups:  Id, 807; Site, 8

Fixed effects:
                 Estimate Std. Error        df
(Intercept)     1.240e+00  7.521e-02 4.440e+01
PerturbationTbe 7.026e-03  7.106e-02 7.562e+02
                t value Pr(>|t|)    
(Intercept)      16.484   <2e-16 ***
PerturbationTbe   0.099    0.921    
---
Signif. codes:  
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr)
PerturbtnTb -0.781
anova(lmer_Year_sup_log)
Type III Analysis of Variance Table with Satterthwaite's method
                Sum Sq   Mean Sq NumDF  DenDF
Perturbation 0.0090364 0.0090364     1 756.17
             F value Pr(>F)
Perturbation  0.0098 0.9213

CONCLUSION : Pas d’effet du type de perturbation sur le nombre d’année superieur à l’interval de confiance des 10 années avant la perturbation.

Vérification dU MODÈLE

Q-Q PLOT

Graphique du modèle

GRAPHIQUE

Tous les sites ensembles

GRAPHIQUE GLOBAL