Référentiel Complet 12 Familles
Pascal Obstétar
2026-02-19
Source:vignettes/complete-referential_fr.Rmd
complete-referential_fr.RmdIntroduction
Le package nemeton propose un référentiel complet de
12 familles d’indicateurs pour l’évaluation
multi-critères des services écosystémiques forestiers. Cette vignette
démontre l’utilisation de l’ensemble du référentiel avec le jeu de
données massif_demo_units.
Les 12 Familles
| Code | Famille | Indicateurs | Nb |
|---|---|---|---|
| C | Carbone & Vitalité | C1 (biomasse), C2 (NDVI) | 2 |
| B | Biodiversité | B1 (protection), B2 (structure), B3 (connectivité) | 3 |
| W | Eau | W1 (réseau hydro), W2 (zones humides), W3 (TWI) | 3 |
| A | Air & Microclimat | A1 (couverture), A2 (qualité air) | 2 |
| F | Fertilité des Sols | F1 (fertilité), F2 (érosion) | 2 |
| L | Paysage | L1 (fragmentation), L2 (lisière), L3 (TVB) | 3 |
| T | Temps & Dynamique | T1 (ancienneté), T2 (changements) | 2 |
| R | Risques & Résilience | R1 (incendie), R2 (tempête), R3 (stress), R4 (gibier) | 4 |
| S | Social & Usages | S1 (sentiers), S2 (accessibilité), S3 (proximité) | 3 |
| P | Production & Économie | P1 (volume), P2 (productivité), P3 (qualité) | 3 |
| E | Énergie & Climat | E1 (bois-énergie), E2 (évitement CO2) | 2 |
| N | Naturalité & Wilderness | N1 (distance infra), N2 (continuité), N3 (composite) | 3 |
| Total | 32 |
Chargement des Données
# Le jeu de données de démonstration
data(massif_demo_units)
# Aperçu des données de base
head(massif_demo_units)
#> Simple feature collection with 6 features and 88 fields
#> Geometry type: POLYGON
#> Dimension: XY
#> Bounding box: xmin: 698041.8 ymin: 6499388 xmax: 702507.7 ymax: 6504159
#> Projected CRS: RGF93 v1 / Lambert-93
#> parcel_id forest_type age_class management species age
#> 1 P01 Futaie mixte Mature Mixte FASY 68
#> 2 P02 Futaie résineuse Moyen Production PIAB 33
#> 3 P03 Futaie feuillue Surannée Conservation QUPE 104
#> 4 P04 Futaie feuillue Surannée Production ABAL 166
#> 5 P05 Futaie résineuse Moyen Production PISY 47
#> 6 P06 Futaie résineuse Mature Production QURO 79
#> establishment_year density height dbh volume strata fertility climate
#> 1 1958 266 30.3 45.8 557.7 4 1 continental
#> 2 1993 465 30.4 57.5 1541.7 1 3 atlantique
#> 3 1922 128 31.7 41.7 232.7 2 2 atlantique
#> 4 1860 104 29.9 42.6 186.1 2 1 atlantique
#> 5 1979 324 27.5 51.5 779.5 2 2 atlantique
#> 6 1947 281 38.6 76.1 2072.1 2 1 atlantique
#> surface_ha area_ha A1 A1_norm A2 A2_norm B1 B1_norm
#> 1 4.989211 4.989211 0.5293842 32.76917 41.31477 15.769170 0 0.00000
#> 2 5.867935 5.867935 0.6934514 56.20735 54.25911 83.462924 0 0.00000
#> 3 6.557777 6.557777 1.0000000 100.00000 40.10522 9.443733 2 66.66667
#> 4 9.989553 9.989553 0.8866660 83.80943 47.07552 45.895638 0 0.00000
#> 5 5.906395 5.906395 0.5849180 40.70258 48.98128 55.861977 1 33.33333
#> 6 1.048296 1.048296 0.3000000 0.00000 56.56038 95.497643 2 66.66667
#> B2 B2_norm B3 B3_norm C1 C1_norm C2 C2_norm
#> 1 2.556369 41.55096 0.8262637 90.87085 258.9182 91.81550 0.03279953 98.02844
#> 2 2.387431 35.94171 0.3583569 17.21558 228.1229 78.28157 0.01631406 72.74375
#> 3 2.482645 39.10309 0.6591732 64.56840 193.5217 63.07502 0.03085372 95.04404
#> 4 2.177975 28.98713 0.6150537 57.62336 187.2273 60.30875 0.00574035 56.52626
#> 5 2.455282 38.19456 0.6392320 61.42937 269.4859 96.45981 0.01794201 75.24062
#> 6 1.853111 18.20065 0.5374482 45.40713 277.5413 100.00000 -0.02087305 15.70780
#> E1 E1_norm E2 E2_norm F1 F1_norm F2 F2_norm family_A
#> 1 0.6332431 48.4520928 1.286294 37.35401 3 50 15.017516 63.53406 24.26917
#> 2 0.5003880 0.1410856 1.135298 30.18071 3 50 18.802915 79.54881 69.83514
#> 3 0.5000000 0.0000000 1.037217 25.52125 3 50 8.778060 37.13702 54.72187
#> 4 0.5000000 0.0000000 1.679691 56.04287 4 75 16.643021 70.41103 64.85253
#> 5 0.5239562 8.7113699 0.500000 0.00000 4 75 23.180358 98.06830 48.28228
#> 6 0.5000000 0.0000000 0.500000 0.00000 2 25 6.919386 29.27359 47.74882
#> family_B family_C family_E family_F family_L family_N family_P family_R
#> 1 44.14061 94.92197 42.903050 56.76703 31.33202 50.88637 47.68739 32.09087
#> 2 17.71910 75.51266 15.160900 64.77440 88.45910 23.50773 86.78162 24.35791
#> 3 56.77938 79.05953 12.760627 43.56851 64.18903 29.82359 46.78139 42.35100
#> 4 28.87016 58.41750 28.021436 72.70551 56.54965 82.49126 48.20880 26.49766
#> 5 44.31909 85.85022 4.355685 86.53415 29.12421 24.91877 75.19072 66.66667
#> 6 43.42482 57.85390 0.000000 27.13680 73.96207 18.79035 14.75698 13.46698
#> family_S family_T family_W L1 L1_norm L2 L2_norm N1
#> 1 24.30425 54.11307 9.825682 0.2521898 10.97026 0.3017459 51.69377 1823.0542
#> 2 24.18268 46.60595 50.880574 0.5743217 100.00000 0.3891689 76.91820 670.1452
#> 3 37.86009 77.38554 23.501831 0.3701597 43.57440 0.4164985 84.80367 1365.9276
#> 4 17.50914 38.82146 49.612081 0.3389725 34.95499 0.3934184 78.14431 2734.2239
#> 5 81.17865 24.74926 61.265609 0.3539412 39.09197 0.1889777 19.15645 628.5385
#> 6 61.86987 55.77872 4.498593 0.3858981 47.92413 0.4691661 100.00000 1259.2921
#> N1_norm N2 N2_norm N3 N3_norm P1 P1_norm P2
#> 1 66.05463 200.27051 24.049640 73.73125 62.55485 383.7837 79.52972 2.000000
#> 2 23.10333 125.83536 14.560032 52.89941 32.85982 303.2654 60.34486 10.150362
#> 3 49.02451 101.35012 11.438453 50.19713 29.00781 268.2949 52.01252 4.796243
#> 4 100.00000 384.00619 47.473781 100.00000 100.00000 250.9696 47.88446 6.134844
#> 5 21.55329 238.93704 28.979168 46.84107 24.22387 317.5492 63.74822 8.705667
#> 6 45.05183 20.07441 1.076754 37.03275 10.24246 50.0000 0.00000 4.414458
#> P2_norm P3 P3_norm R1 R1_norm R2 R2_norm R3 R3_norm
#> 1 0.00000 65.29495 63.53244 1 0 4 75 0.3397302 21.27261
#> 2 100.00000 84.57162 100.00000 1 0 2 25 0.5299777 48.07374
#> 3 34.30821 60.26851 54.02344 2 25 3 50 0.5582243 52.05299
#> 4 50.73203 56.03258 46.00991 1 0 3 50 0.3980824 29.49298
#> 5 82.27447 73.76151 79.54946 3 50 3 50 0.8985756 100.00000
#> 6 29.62394 39.45421 14.64700 1 0 1 0 0.4755124 40.40094
#> S1 S1_norm S2 S2_norm S3 S3_norm T1
#> 1 0.473262981 30.4048558 49.06710 36.33387 1904.090 6.174013 88.06364
#> 2 0.004570495 0.2936322 77.80352 72.25440 1000.000 0.000000 82.82317
#> 3 0.963719475 61.9143116 51.13707 38.92133 2866.255 12.744614 126.47324
#> 4 0.817609054 52.5274243 20.00000 0.00000 1000.000 0.000000 62.19125
#> 5 1.162277601 74.6707102 75.09220 68.86525 15643.478 100.000000 10.00000
#> 6 1.556537495 100.0000000 70.17784 62.72230 4351.499 22.887318 130.42042
#> T1_norm T2 T2_norm W1 W1_norm W2 W2_norm W3
#> 1 57.29425 11.324896 50.93189 0.1862923 9.782561 1.119890 10.45221 5.089475
#> 2 53.44804 9.198844 39.76386 0.5393849 28.324119 8.374436 78.16072 8.400556
#> 3 85.48470 14.819030 69.28638 0.4476438 23.506618 2.896998 27.03841 6.050851
#> 4 38.30539 9.117684 39.33753 1.1437187 60.058825 4.913373 45.85774 8.110192
#> 5 0.00000 11.052026 49.49852 1.0737964 56.387074 3.125075 29.16711 13.072421
#> 6 88.38171 6.040972 23.17574 0.0000000 0.000000 0.000000 0.00000 5.470996
#> W3_norm geometry
#> 1 9.242271 POLYGON ((698299.9 6499928,...
#> 2 46.156887 POLYGON ((701702.2 6500418,...
#> 3 19.960465 POLYGON ((702240.4 6500270,...
#> 4 42.919675 POLYGON ((700641.3 6504129,...
#> 5 98.242638 POLYGON ((699268.2 6500307,...
#> 6 13.495779 POLYGON ((699943.5 6499421,...
# Calculer les indicateurs pour la démonstration
# Les indicateurs sont générés de manière synthétique pour les besoins de cette vignette
set.seed(42)
n <- nrow(massif_demo_units)
# Générer des valeurs synthétiques pour tous les indicateurs
massif_demo_units$C1 <- runif(n, 50, 300) # Biomasse t/ha
massif_demo_units$C2 <- runif(n, 0.3, 0.9) # NDVI
massif_demo_units$B1 <- runif(n, 0, 100) # Protection %
massif_demo_units$B2 <- runif(n, 20, 80) # Structure diversity
massif_demo_units$B3 <- runif(n, 100, 3000) # Distance corridor m
massif_demo_units$W1 <- runif(n, 0, 500) # Distance hydro m
massif_demo_units$W2 <- runif(n, 0, 50) # Zones humides %
massif_demo_units$W3 <- runif(n, 2, 15) # TWI
massif_demo_units$A1 <- runif(n, 40, 95) # Couverture %
massif_demo_units$A2 <- runif(n, 1, 5) # Qualité air (ATMO)
massif_demo_units$F1 <- runif(n, 30, 90) # Fertilité
massif_demo_units$F2 <- runif(n, 0, 50) # Érosion
massif_demo_units$L1 <- runif(n, 0.1, 0.9) # Fragmentation
massif_demo_units$L2 <- runif(n, 0, 200) # Lisière m
massif_demo_units$T1 <- runif(n, 20, 150) # Ancienneté ans
massif_demo_units$T2 <- runif(n, -20, 20) # Changement %
massif_demo_units$R1 <- runif(n, 10, 90) # Risque incendie
massif_demo_units$R2 <- runif(n, 10, 80) # Risque tempête
massif_demo_units$R3 <- runif(n, 0, 100) # Stress
massif_demo_units$S1 <- runif(n, 0, 5) # Accessibilité
massif_demo_units$S2 <- runif(n, 0, 100) # Sentiers
massif_demo_units$S3 <- runif(n, 0, 50000) # Proximité m
massif_demo_units$P1 <- runif(n, 50, 500) # Volume m³/ha
massif_demo_units$P2 <- runif(n, 2, 15) # Productivité
massif_demo_units$P3 <- runif(n, 30, 90) # Qualité
massif_demo_units$E1 <- runif(n, 1, 12) # Bois-énergie
massif_demo_units$E2 <- runif(n, 5, 25) # Évitement CO2
massif_demo_units$N1 <- runif(n, 100, 5000) # Distance infra m
massif_demo_units$N2 <- runif(n, 0, 100) # Continuité
massif_demo_units$N3 <- runif(n, 20, 80) # Naturalité compositeCréer les Indices de Famille
Le système de famille permet d’agréger les indicateurs individuels en indices synthétiques par famille :
# Créer tous les indices de famille (12 familles)
# create_family_index() détecte automatiquement toutes les familles par préfixe
result <- create_family_index(massif_demo_units)
# Afficher les indices de famille
result |>
sf::st_drop_geometry() |>
select(parcel_id, starts_with("family_")) |>
head()
#> parcel_id family_A family_B family_C family_E family_F family_L family_N
#> 1 P01 24.26917 44.14061 94.92197 42.903050 56.76703 31.33202 50.88637
#> 2 P02 69.83514 17.71910 75.51266 15.160900 64.77440 88.45910 23.50773
#> 3 P03 54.72187 56.77938 79.05953 12.760627 43.56851 64.18903 29.82359
#> 4 P04 64.85253 28.87016 58.41750 28.021436 72.70551 56.54965 82.49126
#> 5 P05 48.28228 44.31909 85.85022 4.355685 86.53415 29.12421 24.91877
#> 6 P06 47.74882 43.42482 57.85390 0.000000 27.13680 73.96207 18.79035
#> family_P family_R family_S family_T family_W
#> 1 47.68739 32.09087 24.30425 54.11307 9.825682
#> 2 86.78162 24.35791 24.18268 46.60595 50.880574
#> 3 46.78139 42.35100 37.86009 77.38554 23.501831
#> 4 48.20880 26.49766 17.50914 38.82146 49.612081
#> 5 75.19072 66.66667 81.17865 24.74926 61.265609
#> 6 14.75698 13.46698 61.86987 55.77872 4.498593Visualisation Radar 12-Axes
Le radar 12-axes permet de visualiser le profil complet d’une parcelle sur l’ensemble des 12 familles :
# Radar pour la parcelle 1 (toutes les 12 familles)
nemeton_radar(
result,
unit_id = 1,
mode = "family"
)
Analyse Croisée Inter-Familles
Matrice de Corrélation
# Calculer les corrélations entre toutes les familles
families_all <- c(
"family_C", "family_B", "family_W", "family_A",
"family_F", "family_L", "family_T", "family_R",
"family_S", "family_P", "family_E", "family_N"
)
correlations <- compute_family_correlations(result, families = families_all)
# Visualiser la matrice de corrélation
plot_correlation_matrix(correlations)
Hotspots Multi-Critères
Identifier les parcelles qui excellent simultanément sur plusieurs familles :
# Hotspots pour conservation (C, B, N)
hotspots_conservation <- identify_hotspots(
result,
families = c("family_C", "family_B", "family_N"),
threshold = 0.7,
min_families = 2
)
# Hotspots pour production durable (P, C, E)
hotspots_production <- identify_hotspots(
result,
families = c("family_P", "family_C", "family_E"),
threshold = 0.7,
min_families = 2
)
# Hotspots pour services sociaux (S, A, L)
hotspots_social <- identify_hotspots(
result,
families = c("family_S", "family_A", "family_L"),
threshold = 0.7,
min_families = 2
)
# Afficher les hotspots
table(hotspots_conservation$is_hotspot)
#>
#> TRUE
#> 20
table(hotspots_production$is_hotspot)
#>
#> TRUE
#> 20
table(hotspots_social$is_hotspot)
#>
#> FALSE TRUE
#> 1 19Cartographie Multi-Familles
Familles S, P, E, N
# Visualiser les nouvelles familles S, P, E, N
library(patchwork)
p_social <- ggplot(result) +
geom_sf(aes(fill = family_S)) +
scale_fill_viridis_c(name = "Social") +
labs(title = "Famille S - Social & Usages") +
theme_minimal()
p_production <- ggplot(result) +
geom_sf(aes(fill = family_P)) +
scale_fill_viridis_c(name = "Production") +
labs(title = "Famille P - Production & Économie") +
theme_minimal()
p_energy <- ggplot(result) +
geom_sf(aes(fill = family_E)) +
scale_fill_viridis_c(name = "Énergie") +
labs(title = "Famille E - Énergie & Climat") +
theme_minimal()
p_naturalness <- ggplot(result) +
geom_sf(aes(fill = family_N)) +
scale_fill_viridis_c(name = "Naturalité") +
labs(title = "Famille N - Naturalité & Wilderness") +
theme_minimal()
(p_social + p_production) / (p_energy + p_naturalness)
Toutes les Familles
# Créer une facette pour toutes les 12 familles
result_long <- result |>
sf::st_drop_geometry() |>
tidyr::pivot_longer(
cols = starts_with("family_"),
names_to = "famille",
values_to = "valeur"
) |>
left_join(
result |> select(parcel_id, geometry),
by = "parcel_id"
) |>
sf::st_as_sf()
# Labels des familles pour la facette
family_labels <- c(
family_C = "C - Carbone",
family_B = "B - Biodiversité",
family_W = "W - Eau",
family_A = "A - Air",
family_F = "F - Fertilité",
family_L = "L - Paysage",
family_T = "T - Temps",
family_R = "R - Risques",
family_S = "S - Social",
family_P = "P - Production",
family_E = "E - Énergie",
family_N = "N - Naturalité"
)
ggplot(result_long) +
geom_sf(aes(fill = valeur)) +
facet_wrap(~famille, ncol = 4, labeller = labeller(famille = family_labels)) +
scale_fill_viridis_c(name = "Score") +
labs(title = "Référentiel Complet 12 Familles") +
theme_minimal() +
theme(
strip.text = element_text(face = "bold"),
axis.text = element_blank(),
axis.ticks = element_blank()
)
Normalisation et Indice Composite
# Normaliser tous les indicateurs
result_norm <- normalize_indicators(
result,
indicators = c(
paste0("C", 1:2), paste0("B", 1:3), paste0("W", 1:3),
paste0("A", 1:2), paste0("F", 1:2), paste0("L", 1:2),
paste0("T", 1:2), paste0("R", 1:3), paste0("S", 1:3),
paste0("P", 1:3), paste0("E", 1:2), paste0("N", 1:3)
),
method = "minmax"
)
# Créer un indice composite global (toutes familles)
result_composite <- create_composite_index(
result_norm,
indicators = families_all,
weights = rep(1, 12), # Poids égaux pour toutes les familles
name = "nemeton_index_12"
)
# Visualiser l'indice composite
ggplot(result_composite) +
geom_sf(aes(fill = nemeton_index_12)) +
scale_fill_viridis_c(name = "Score", limits = c(0, 100)) +
labs(title = "Indice Composite Nemeton (12 Familles)") +
theme_minimal()
Comparaison de Scénarios
# Créer différents indices pour différents objectifs de gestion
# Scénario 1: Conservation intégrale
composite_conservation <- create_composite_index(
result_norm,
indicators = c("family_C", "family_B", "family_W", "family_N"),
weights = c(0.3, 0.4, 0.15, 0.15),
name = "conservation"
)
# Scénario 2: Production durable
composite_production <- create_composite_index(
result_norm,
indicators = c("family_P", "family_E", "family_F", "family_C"),
weights = c(0.4, 0.25, 0.2, 0.15),
name = "production"
)
# Scénario 3: Services sociaux
composite_social <- create_composite_index(
result_norm,
indicators = c("family_S", "family_A", "family_L", "family_R"),
weights = c(0.35, 0.25, 0.2, 0.2),
name = "social"
)
# Comparer les scénarios
comparison <- result |>
mutate(
conservation = composite_conservation$conservation,
production = composite_production$production,
social = composite_social$social
) |>
sf::st_drop_geometry() |>
select(parcel_id, conservation, production, social) |>
tidyr::pivot_longer(cols = -parcel_id, names_to = "scenario", values_to = "score")
# Visualiser le classement des parcelles selon les scénarios
ggplot(comparison, aes(x = reorder(parcel_id, score), y = score, fill = scenario)) +
geom_col(position = "dodge") +
coord_flip() +
scale_fill_viridis_d() +
labs(
title = "Classement des Parcelles selon 3 Scénarios de Gestion",
x = "Parcelle",
y = "Score",
fill = "Scénario"
) +
theme_minimal()
Conclusion
Cette vignette a démontré l’utilisation complète du référentiel 12 familles de nemeton. Le package permet :
- Évaluation holistique : Couvre l’ensemble des dimensions des services écosystémiques (biophysiques, écologiques, sociaux, économiques)
- Flexibilité : Possibilité de créer des indices composites adaptés à différents objectifs de gestion
- Analyse croisée : Identification des synergies et trade-offs entre familles
- Visualisation : Radars 12-axes, cartes multi-familles, matrices de corrélation
Pour aller plus loin, consultez la vignette “Multi-Criteria Optimization” qui présente les outils d’analyse Pareto, de clustering et de trade-off analysis.