Étape 1 : Définir les variables de l’équation
\(x\) (Prior Growth - PG) : C’est la croissance antérieure. Il s’agit de la moyenne des largeurs de cernes des années précédant l’année que l’on analyse (souvent la moyenne des 3 à 10 années précédentes).
\(Y\) (Boundary Line) : C’est la valeur théorique maximale du ratio de changement de croissance (ou de la croissance actuelle, selon la normalisation de l’article) que l’arbre pourrait atteindre pour une croissance antérieure \(x\) donnée. Le coefficient \(1523.7\) est un paramètre spécifique au sapin dans cette étude.
\(e\) : La constante mathématique (environ \(2.718\)).
Étape 2 : Calculer la croissance antérieure (\(x\)) et la croissance actuelle
Pour une année donnée \(t\) :
Calculez la croissance antérieure moyenne (\(x\)) : moyenne des largeurs de cernes des années \(t-1\) à \(t-3\) (ou \(t-10\), selon le protocole exact de l’article).
Calculez le changement de croissance réel observé pour l’année \(t\). Souvent, on calcule un ratio de croissance en pourcentage : \[ \text{Ratio}_{\text{réel}} = \frac{\text{Croissance antérieure moyenne } (x)}{\text{Croissance en année } t} \times 100 \]
Étape 3 : Calculer la ligne de frontière (\(Y\))
Intégrez votre valeur \(x\) dans l’équation de l’article : \[ Y = 1523.7 \cdot e^{-1.414 x} \]
Étape 4 : Déterminer s’il y a détente (Release) ou non
Pour savoir s’il y a une détente, on compare le ratio de croissance réel de l’arbre à un pourcentage de la ligne de frontière \(Y\). Dans la méthode de Black & Abrams, on distingue généralement deux types de détentes :
Si la croissance réelle de l’arbre dépasse \(50\%\) de la ligne de frontière (\(Y\)).
Condition : \[ \text{Ratio}_{\text{réel}} > 0.5 \times Y \]
Si la croissance réelle est supérieure à un seuil bas (souvent \(10\%\) ou \(20\%\) de \(Y\)) mais inférieure à \(50\%\).
Condition : \[ 0.2 \times Y \leq \text{Ratio}_{\text{réel}} < 0.5 \times Y \]
Si la croissance réelle est inférieure au seuil de détente mineure (ex : \(\text{Ratio}_{\text{réel}} < 0.2 \times Y\)).
str(bai.GC)
tibble [55,439 × 10] (S3: tbl_df/tbl/data.frame)
$ Site : Ord.factor w/ 8 levels "T87"<"T52"<"T77"<..: 5 5 5 5 5 5 5 5 5 5 ...
$ Esp : Factor w/ 3 levels "BOP","ERR","SAB": 1 1 1 1 1 1 1 1 1 1 ...
$ Id : chr [1:55439] "APY8A" "APY8A" "APY8A" "APY8A" ...
$ Year : int [1:55439] 1783 1784 1785 1786 1787 1787 1788 1788 1789 1789 ...
$ bai : num [1:55439] 80.7 93.6 127.2 118.2 75.5 ...
$ Source: chr [1:55439] "BOPT83_comb.rwl2" "BOPT83_comb.rwl2" "BOPT83_comb.rwl2" "BOPT83_comb.rwl2" ...
$ Fin : int [1:55439] 2023 2023 2023 2023 2023 2023 2023 2023 2023 2023 ...
$ M1 : num [1:55439] 69.8 75.1 82.6 86.2 74.8 ...
$ M2 : num [1:55439] 99.4 95.4 90.5 84 82 ...
$ GC : num [1:55439] 42.37 27.03 9.6 -2.52 9.67 ...
bai_brute_3 <- all_rwl_3_unite_2 %>%
relocate(Site, Esp, Id, Year, Rwl) %>%
mutate(
Esp = factor(Esp), # Espèce → factor
Site = factor(Site)) %>% # Site → factor (pour ggplot)
filter(Esp %in% c("ERR","BOP","SAB"))
bai.GC_BL <- bai_brute_GC %>%
arrange(Year) %>% # trie Year croissant PAR GROUPE
group_by(Site,Esp,Id) %>% # On regroupe les données par Site, Esp et Id et Year
mutate(
Ratio = (Rwl*100)/M1 , ## On calcule le ratio réel (M1 est le x ou prior = moyenne du bai des 10 années précédentes)
BL = case_when(
Esp == "SAB" ~ 1523.7 * exp(-1.414 * M1), # ON CALCUL LE BL QUE POUR pour SAB
TRUE ~ NA_real_ # NA pour les autres espèces
),
Release = case_when( # On travail sur les seuils pour définir les détentes
Ratio > 0.5 * BL ~ "Major", # Détente majeure
Ratio >= 0.2 * BL & Ratio <= 0.5 * BL ~ "Moderate", # Détente mineure/modérée
Ratio < 0.2 * BL ~ "RAS", # Pas de détente (Sans détente)
TRUE ~ "RAS" # Sécurité pour les valeurs manquantes (NA)
),
Seuil_Moderate = 0.2 * BL,
Seuil_major = 0.5 * BL
) %>%
filter(Esp=="SAB") %>%
ungroup() # On degroupe les données dans la BD
ggplot(bai.GC_BL) +
# Les points colorés selon le type de Release
geom_point(aes(M1, GC, color = Release)) +
# Ajout de la courbe théorique BL (100%)
geom_function(fun = function(x) 1523.7 * exp(-1.414 * x),
color = "black",
linewidth = 1,
linetype = "solid") +
# Ajout de la courbe Major (0.5 * BL)
geom_function(fun = function(x) 0.5 * 1523.7 * exp(-1.414 * x),
color = "red",
linewidth = 0.6,
linetype = "solid") +
# Ajout de la courbe Moderate (0.2 * BL)
geom_function(fun = function(x) 0.2 * 1523.7 * exp(-1.414 * x),
color = "orange",
linewidth = 0.6,
linetype = "solid") +
# Noms des axes
labs(x = "M1 (Prior growth)", y = "GC (percent growth change)", color = "Type de détente") +
theme_minimal() +
# Personnalisation pour forcer l'affichage des axes x et y
theme(
# Ajoute les lignes continues pour les axes x et y
axis.line = element_line(color = "black", linewidth = 0.5),
# Ajoute les petites graduations (ticks) sur les axes
axis.ticks = element_line(color = "black"),
axis.ticks.length = unit(2, "pt"),
# Met en forme le texte des axes (les chiffres)
axis.text = element_text(color = "black", size = 10),
# Met en gras les titres des axes
axis.title = element_text(color = "black", size = 12, face = "bold")
)
ggplot(bai.GC_BL) +
# Les points colorés selon le type de Release
geom_point(aes(M1, GC, color = Release)) +
# Ajout de la courbe théorique
geom_function(fun = function(x) 1523.7 * exp(-1.414 * x),
color = "black",
linewidth = 1,
linetype = "solid") +
# Noms des axes
labs(x = "M1 (Prior growth)", y = "GC (percent growth change)", color = "Type de détente") +
# Limiter les axes pour ne commencer qu'à 0 (optionnel, si pertinent pour vos données)
# xlim(0, NA) + ylim(0, NA) +
theme_minimal() +
# Personnalisation pour forcer l'affichage des axes x et y
theme(
# Ajoute les lignes continues pour les axes x et y
axis.line = element_line(color = "black", linewidth = 0.5),
# Ajoute les petites graduations (ticks) sur les axes
axis.ticks = element_line(color = "black"),
axis.ticks.length = unit(2, "pt"),
# Met en forme le texte des axes (les chiffres)
axis.text = element_text(color = "black", size = 10),
# Met en gras les titres des axes
axis.title = element_text(color = "black", size = 12, face = "bold")
)
Interpetation : Il n’y a un problème car la boundary line qui
doit être la limite supérieure et donc etre toujours supérieur à la de
des valeurs mais elle est quasi
bai.GC_BL_YearMean <- bai.GC_BL %>%
group_by(Site, Esp, Year) %>% # Regrouper les données par site, espèce et année
summarise(
n_obs = n(), # Nombre d’observations dans chaque groupe
Mean.GC = mean(GC, na.rm = TRUE), # Moyenne de GC en ignorant les valeurs manquantes
Mean.BL = mean(BL, na.rm = TRUE), # Moyenne de GC en ignorant les valeurs manquantes
Mean.Ratio = mean(Ratio, na.rm = TRUE), # Moyenne de GC en ignorant les valeurs manquantes
SE.GC = case_when(
n_obs > 1 ~ sd(GC, na.rm = TRUE) / sqrt(n_obs), # Erreur standard si au moins 2 observations
TRUE ~ 0 # Sinon, erreur standard nulle (ou NA_real_ si tu préfères)
),
SE.BL = case_when(
n_obs > 1 ~ sd(BL, na.rm = TRUE) / sqrt(n_obs), # Erreur standard si au moins 2 observations
TRUE ~ 0 # Sinon, erreur standard nulle (ou NA_real_ si tu préfères)
),
SE.Ratio = case_when(
n_obs > 1 ~ sd(Ratio, na.rm = TRUE) / sqrt(n_obs), # Erreur standard si au moins 2 observations
TRUE ~ 0 # Sinon, erreur standard nulle (ou NA_real_ si tu préfères)
),
IC_inf_GC = Mean.GC - 1.96 * SE.GC, # Borne inférieure de l’intervalle de confiance à 95 %
IC_sup_GC = Mean.GC + 1.96 * SE.GC, # Borne supérieure de l’intervalle de confiance à 95 %
IC_inf_BL = Mean.BL - 1.96 * SE.BL, # Borne inférieure de l’intervalle de confiance à 95 %
IC_sup_BL = Mean.BL + 1.96 * SE.BL, # Borne supérieure de l’intervalle de confiance à 95 %
IC_inf_Ratio = Mean.Ratio - 1.96 * SE.Ratio, # Borne inférieure de l’intervalle de confiance à 95 %
IC_sup_Ratio = Mean.Ratio + 1.96 * SE.Ratio, # Borne supérieure de l’intervalle de confiance à 95 %
.groups = "drop" # Retirer le regroupement après le résumé
)
bai.GC_BL_YearMean2 <- bai.GC_BL_YearMean %>%
mutate(
Release = case_when(
Mean.Ratio > 0.5 * Mean.BL ~ "Major", # Détente majeure
Mean.Ratio >= 0.2 * Mean.BL & Mean.Ratio <= 0.5 * Mean.BL ~ "Moderate", # Détente mineure/modérée
Mean.Ratio < 0.2 * Mean.BL ~ "RAS", # Pas de détente (Sans détente)
TRUE ~ "RAS" # Sécurité pour les valeurs manquantes (NA)
),
Seuil_Moderate = 0.2 * Mean.BL,
Seuil_Major = 0.5 * Mean.BL
)
En rouge, la coube de Ratio et en vers celle de %GC