From 84116f6cb2ffd98ce5feda5a8833ec1d772f4ce2 Mon Sep 17 00:00:00 2001
From: David Pleydell <david.pleydell@inrae.fr>
Date: Mon, 18 Mar 2024 12:21:30 +0100
Subject: [PATCH 1/2] Added mapMCDA_English.Rmd

---
 vignettes/mapMCDA_English.Rmd                 | 319 ++++++++++++++++++
 vignettes/{mapMCDA.Rmd => mapMCDA_French.Rmd} |  10 +-
 2 files changed, 324 insertions(+), 5 deletions(-)
 create mode 100644 vignettes/mapMCDA_English.Rmd
 rename vignettes/{mapMCDA.Rmd => mapMCDA_French.Rmd} (98%)

diff --git a/vignettes/mapMCDA_English.Rmd b/vignettes/mapMCDA_English.Rmd
new file mode 100644
index 0000000..cc8d87f
--- /dev/null
+++ b/vignettes/mapMCDA_English.Rmd
@@ -0,0 +1,319 @@
+---
+title: "Getting Started"
+date: "`r Sys.Date()`"
+output:
+   rmarkdown::html_vignette:
+     toc: true
+     toc_depth: 2
+vignette: >
+  %\VignetteIndexEntry{Aperçu du package}
+  %\VignetteEngine{knitr::rmarkdown}
+  %\VignetteEncoding{UTF-8}
+---
+
+```{r packages}
+require(sf)
+require(terra)
+require(mapMCDA)
+```
+
+# Introduction
+
+The `mapMCDA` package facilitates the weighting of several risk factors to produce an epidemiological risk map.
+
+However, a user's expertise can be crucial to the interpretation of each risk factor.
+This is expressed at three levels within mapMCDA:
+
+1. Choice of relevant risk factors.
+
+2. For each factor, setting a common risk scale (e.g. between 0 and 100).
+
+3. Two-way assessment of the relative importance of the risk factors.
+
+
+Next, we use the maps provided by the package to produce an example risk map.
+__This map has no epidemiological value.__
+
+
+
+# 1. Facteurs de risque
+
+<!-- La fonction `mapMCDA_datasets()` permet de charger en mémoire toutes les cartes disponibles dans le package. -->
+The function `mapMCDA_datasets()` is used to load into memory all the maps available within the package.
+
+<!-- L'objet `cmr` est une simple liste de cartes : objets de type `sf` pour les cartes vectoriels et de type `SpatRaster` pour les cartes raster. -->
+The `cmr` object is a simple list of maps: objects of type `sf` for vectorial for vector maps and of type `SpatRaster` for raster maps.
+
+<!-- Pour utiliser d'autre cartographie, utiliser les fonctions `sf::st_read` et `terra::rast()`  -->
+<!-- respectivement pour des cartes vectoriels ou raster. -->
+To use other maps, use the functions `sf::st_read` and `terra::rast()` for vector and raster maps respectively.
+
+<!-- On peut aussi bénéficier de la fonction `load_layer()` pour charger tout type -->
+<!-- des cartes automatiquement, comme démontré dans le code commenté. -->
+You can also use the `load_layer()` function to load any type
+of maps automatically, as demonstrated in the commented code.
+
+```{r facteurs-risque}
+cmr <- mapMCDA_datasets()
+
+# layers <- list.files(
+#   system.file("cartography/CMR", package = "mapMCDA"),
+#   full.names = TRUE
+# )
+# cmr <- lapply(layers, load_layer)
+# names(cmr) <- rmext(basename(layers)))
+
+```
+
+<!-- L'une de ces cartes est celle des unités épidémiologiques, utilisée pour établir le cadre de travail. -->
+One of these maps is that of the epidemiological units, used to establish the working framework.
+
+
+<!-- ```{r unite-epidemiologique, fig.cap = "Unités épidémiologiques d'exemple pour le Cameroun."} -->
+<!-- unites_epi <- cmr$cmr_admin3 -->
+<!-- par(mar = c(0, 0, 0, 0)) -->
+<!-- plot(st_geometry(unites_epi)) -->
+<!-- ``` -->
+
+```{r epidemiological-units, fig.cap = "Epidemiological units example for Cameroon."}
+epi_units <- cmr$cmr_admin3
+par(mar = c(0, 0, 0, 0))
+plot(st_geometry(epi_units))
+```
+
+
+
+<!-- # 2. Mise en échelle -->
+# 2. Scaling
+
+<!-------------------------------------------------------------------------------------->
+<!-- Chaque facteur de risque varie dans une échelle qui lui est propre.			  -->
+<!-- La densité animale, par exemple, varie entre 0 et presque 5500 têtes par $km^2$. -->
+<!-- 																				  -->
+<!-- Pour les cartes _vectorielles_, qui representent la localisation des entités	  -->
+<!-- spatiales telles que lacs ou forêts, on considère la __distance__ à dites		  -->
+<!-- entités.																		  -->
+<!-- 																				  -->
+<!-- Ce package utilise pour l'instant une fonction linèaire pour la mise en échelle. -->
+<!-- Cependant, la rélation peut être directe ou inverse.							  -->
+<!-------------------------------------------------------------------------------------->
+Each risk factor varies on its own scale.
+Animal density, for example, varies between 0 and almost 5500 heads per $km^2$.
+
+For _vector maps_, which show the location of spatial features such as lakes or forests,
+we consider the __distance__ to these entities.
+
+This package currently uses a linear function for scaling.
+However, the relationship can be direct or inverse.
+
+<!-------------------------------------------------------------------------------------->
+<!-- ```{r mise-echelle, fig.width=4, fig.cap = "Mis en échelle directe ou inverse."} -->
+<!-- plot(																			  -->
+<!--   data.frame(x = c(0, 100), y = c(0, 100)),									  -->
+<!--   type = 'l',																	  -->
+<!--   xaxs = "i",																	  -->
+<!--   yaxs = "i",																	  -->
+<!--   xaxt = "n",																	  -->
+<!--   lab = c(1, 1, 7),															  -->
+<!--   xlab = c("Échelle originale"),												  -->
+<!--   ylab = c("Échelle de risque")												  -->
+<!-- )																				  -->
+<!-- abline(100, -1)																  -->
+<!-- ```																			  -->
+<!-------------------------------------------------------------------------------------->
+
+```{r scaling, fig.width=4, fig.cap = "Direct or inverse scaling."}
+plot(
+  data.frame(x = c(0, 100), y = c(0, 100)),
+  type = 'l',
+  xaxs = "i",
+  yaxs = "i",
+  xaxt = "n",
+  lab = c(1, 1, 7),
+  xlab = c("Original scale"),
+  ylab = c("Scale of risk")
+)
+abline(100, -1)
+```
+
+<!------------------------------------------------------------------------------------>
+<!-- La fonction `risk_layer()` calcule la carte de risque associé à un facteur	    -->
+<!-- concret dans une échelle donnée. Par défault c'est entre 0 et 100. Pour	    -->
+<!-- inverser la rélation il suffit de passer les limits dans l'ordre inverse, e.g. -->
+<!-- `c(100, 0)`.																    -->
+<!-- 																			    -->
+<!-- D'ailleurs, elle utilise la carte d'unités épidémiologiques pour établir	    -->
+<!-- les limits de calcul de risque.											    -->
+<!------------------------------------------------------------------------------------>
+The `risk_layer()` function calculates the risk map associated in a factor with a given scale.
+The default value is between 0 and 100.
+To reverse the relationship, simply pass the limits in reverse order, e.g.
+`c(100, 0)`.
+
+Moreover, it uses the map of epidemiological units to establish risk calculation limits.
+
+<!------------------------------------------------------->
+<!-- ```{r risk-layers}								   -->
+<!-- risques <- list(								   -->
+<!--   dens_animale = risk_layer(					   -->
+<!--     cmr$animal.density,						   -->
+<!--     boundaries = epi_units						   -->
+<!--   ),											   -->
+<!--   points_eau = risk_layer(						   -->
+<!--     cmr$water_bodies,							   -->
+<!--     boundaries = epi_units,					   -->
+<!--     scale_target = c(100, 0)  # échelle renversée -->
+<!--   ),											   -->
+<!--   parks = risk_layer(							   -->
+<!--     cmr$national_parks,						   -->
+<!--     boundaries = epi_units,					   -->
+<!--     scale_target = c(100, 0)  # échelle renversée -->
+<!--   )											   -->
+<!-- )												   -->
+<!-- ```											   -->
+<!------------------------------------------------------->
+```{r risk-layers}
+risks <- list(
+  animal_density = risk_layer(
+    cmr$animal.density,
+    boundaries = epi_units
+  ),
+  water_bodies = risk_layer(
+    cmr$water_bodies,
+    boundaries = epi_units,
+    scale_target = c(100, 0)  # renversed scale
+  ),
+  parks = risk_layer(
+    cmr$national_parks,
+    boundaries = epi_units,
+    scale_target = c(100, 0)  # renversed scale
+  )
+)
+```
+
+<!--------------------------------------------------------------------------------------->
+<!-- On voudrait examiner les cartes de risque ainsi calculées.						   -->
+<!-- Mais pour cela, il faut qu'elles soient _alignées_.							   -->
+<!-- C'est à dire, qu'elles aient les mêmes _extents_, _résolutions_ et _projections_. -->
+<!-- 																				   -->
+<!-- On peut se servir de la fonction `align_layers()` qui arrange tout ça pour nous.  -->
+<!-- Noter que ce pas n'est pas nécessaire pour continuer, car cette fonction est	   -->
+<!-- automatiquement executée si besoin.											   -->
+<!--------------------------------------------------------------------------------------->
+
+We would like to examine the risk maps calculated in this way.
+But to do this, they need to be _aligned_.
+In other words, they must have the same _extents_, _resolutions_ and _projections_.
+
+We can use the `align_layers()` function, which arranges all this for us.
+Note that this step is not necessary to continue, as this function is
+automatically executed if necessary.
+
+<!------------------------------------------------------------------------------------------------->
+<!-- ```{r align-layers, fig.width = 6, fig.cap = "Niveaux de risque associé à chaque facteur."} -->
+<!-- risques_alignes <- align_layers(risks)														 -->
+<!-- plot(terra::rast(risques_alignes), nc = 3, col = grDevices::hcl.colors(50))				 -->
+<!-- ```																						 -->
+<!------------------------------------------------------------------------------------------------->
+
+```{r align-layers, fig.width = 6, fig.cap = "Level of risk associated with each risk factor."}
+aligned_risks <- align_layers(risks)
+plot(terra::rast(aligned_risks), nc = 3, col = grDevices::hcl.colors(50))
+
+```
+
+
+<!--------------------------------------------->
+<!-- # 3. Pondération des facteurs de risque -->
+<!--------------------------------------------->
+# 3. Weighting of risk factors
+
+<!--------------------------------------------------------------------------------------->
+<!-- Il y a 3 facteurs à considérer.												   -->
+<!-- Il faut comparer 2-à-2 leurs importances relatives en une échelle de 1 à 9 et	   -->
+<!-- representer ces rélations en une matrice qui doit avoir des 1 dans son diagonale. -->
+<!-- 																				   -->
+<!-- Noter que les élements symmetriques doivent être réciproques.					   -->
+<!--------------------------------------------------------------------------------------->
+
+There are three factors to conider.
+We need to compare their relative importance 2-by-2 on a scale of 1 to 9 and
+represent these relationships in a matrix which must have 1's on its diagonal.
+
+<!-- Noter que les élements symmetriques doivent être réciproques. -->
+Note that symmetrical elements must be reciprocal.
+
+
+
+<!-- ```{r matrice-relations, echo = -1} -->
+```{r matrix-relations, echo = -1}
+M <- matrix(c(
+  1,     6, 4,
+  1/6,   1, 3,
+  1/4, 1/3, 1
+), byrow = TRUE, 3, 3)
+colnames(M) <- rownames(M) <- names(risks)
+knitr::kable(M, digits = 2)
+```
+
+<!-------------------------------------------------------------------------------------------->
+<!-- Dans cette exemple, on considère que la densité animale est 6 fois plus importante	    -->
+<!-- que la distance aux points d'eau, et 4 fois plus importante que la distance aux parcs. -->
+<!-- Au même temps, que la distance aux points d'eau est 3 fois plus importante que		    -->
+<!-- celle aux parcs.																	    -->
+<!-------------------------------------------------------------------------------------------->
+In this example, we consider that animal density is 6 times more important
+than the distance to watering holes, and 4 times more important than the distance to parks.
+At the same time, the distance to water points is 3 times greater than the distance to parks.
+
+<!---------------------------------------------------------------------------------->
+<!-- Le système calcule les coefficients de pondération les plus consistents avec -->
+<!-- ces valorations par paires, avec la fonction `compute_weights()`.			  -->
+<!---------------------------------------------------------------------------------->
+The system calculates the weighting coefficients that are most consistent with
+these pairwise values, using the `compute_weights()` function.
+
+
+```{r compute-weights, fig.width=4, echo = 1, fig.cap = "Weighting of risk factors."}
+w <- compute_weights(M)
+mapMCDA:::plot_weights(w, rownames(M))
+```
+
+
+<!--------------------------------------->
+<!-- # 4. Calcul de la carte de risque -->
+<!--------------------------------------->
+# 4. Calculation of the risk map
+
+<!-------------------------------------------------------------------------------------->
+<!-- La fonction `wlc()` (pour weighted linear combination) combine tous les facteurs -->
+<!-- de risque en utilisant les poids calculés précedament, et produise une carte	  -->
+<!-- de risque qui couvre toute la région.											  -->
+<!-------------------------------------------------------------------------------------->
+The `wlc()` function (for weighted linear combination) combines all the risk factors
+risk factors using the weights calculated above, and produces a risk map covering the whole region.
+
+
+<!------------------------------------------------------------------------------------->
+<!-- ```{r wlc, fig.width = 6, fig.height = 6, fig.cap = "Carte de risque combiné."} -->
+<!-- risque_combine <- wlc(risks, w)												 -->
+<!-- plot(risque_combine, col = hcl.colors(50))										 -->
+<!-- ```																			 -->
+<!------------------------------------------------------------------------------------->
+```{r wlc, fig.width = 6, fig.height = 6, fig.cap = "Map of combined risks."}
+combined_risk <- wlc(risks, w)
+plot(combined_risk, col = hcl.colors(50))
+```
+
+<!------------------------------------------------------------------------------------->
+<!-- Enfin, on peut produîre una carte par unité épidémiologique et dans une échelle -->
+<!-- de quelques niveaux de risque.													 -->
+<!------------------------------------------------------------------------------------->
+Finally, a map can be produced for each epidemiological unit on a homogonized scale of risk.
+
+<!-- ```{r risk-plot, fig.width = 6, fig.height = 6, fig.cap = "Carte de niveaux de risque par unité épidémiologique."} -->
+<!-- risk_plot(epi_units, v = risk_unit(combined_risk, epi_units), n = 5) -->
+<!-- ``` -->
+```{r risk-plot, fig.width = 6, fig.height = 6, fig.cap = "Map of risk level per epidemiological unit."}
+risk_plot(epi_units, v = risk_unit(combined_risk, epi_units), n = 5)
+```
diff --git a/vignettes/mapMCDA.Rmd b/vignettes/mapMCDA_French.Rmd
similarity index 98%
rename from vignettes/mapMCDA.Rmd
rename to vignettes/mapMCDA_French.Rmd
index 86876cb..8c41003 100644
--- a/vignettes/mapMCDA.Rmd
+++ b/vignettes/mapMCDA_French.Rmd
@@ -37,10 +37,11 @@ carte de risque d'exemple.
 __Cette carte n'a aucun valeur épidémiologique.__
 
 
+
 # 1. Facteurs de risque
 
 La fonction `mapMCDA_datasets()` permet de charger en mémoire toutes les cartes
-disponibles dans le package. 
+disponibles dans le package.
 
 L'objet `cmr` est une simple liste de cartes : objets de type `sf` pour
 les cartes vectoriels et de type `SpatRaster` pour les cartes raster.
@@ -48,7 +49,7 @@ les cartes vectoriels et de type `SpatRaster` pour les cartes raster.
 Pour utiliser d'autre cartographie, utiliser les fonctions `sf::st_read` et
 `terra::rast()` respectivement pour des cartes vectoriels ou raster.
 
-On peut aussi bénéficier de la fonction `load_layer()` pour charger tout type 
+On peut aussi bénéficier de la fonction `load_layer()` pour charger tout type
 des cartes automatiquement, comme démontré dans le code commenté.
 
 ```{r facteurs-risque}
@@ -79,7 +80,7 @@ La densité animale, par exemple, varie entre 0 et presque 5500 têtes par $km^2
 
 Pour les cartes _vectorielles_, qui representent la localisation des entités
 spatiales telles que lacs ou forêts, on considère la __distance__ à dites
-entités. 
+entités.
 
 Ce package utilise pour l'instant une fonction linèaire pour la mise en échelle.
 Cependant, la rélation peut être directe ou inverse.
@@ -131,7 +132,7 @@ risques <- list(
 ```
 
 On voudrait examiner les cartes de risque ainsi calculées.
-Mais pour cela, il faut qu'elles soient _alignées_. 
+Mais pour cela, il faut qu'elles soient _alignées_.
 C'est à dire, qu'elles aient les mêmes _extents_, _résolutions_ et _projections_.
 
 On peut se servir de la fonction `align_layers()` qui arrange tout ça pour nous.
@@ -196,4 +197,3 @@ de quelques niveaux de risque.
 ```{r risk-plot, fig.width = 6, fig.height = 6, fig.cap = "Carte de niveaux de risque par unité épidémiologique."}
 risk_plot(unites_epi, v = risk_unit(risque_combine, unites_epi), n = 5)
 ```
-
-- 
GitLab


From 1d385bb6f365f03e72c29446591b62dffdaff4e6 Mon Sep 17 00:00:00 2001
From: David Pleydell <david.pleydell@inrae.fr>
Date: Mon, 18 Mar 2024 12:41:34 +0100
Subject: [PATCH 2/2] Updated VignetteIndexEntry

---
 vignettes/mapMCDA_English.Rmd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/vignettes/mapMCDA_English.Rmd b/vignettes/mapMCDA_English.Rmd
index cc8d87f..c3bd969 100644
--- a/vignettes/mapMCDA_English.Rmd
+++ b/vignettes/mapMCDA_English.Rmd
@@ -6,7 +6,7 @@ output:
      toc: true
      toc_depth: 2
 vignette: >
-  %\VignetteIndexEntry{Aperçu du package}
+  %\VignetteIndexEntry{Getting Started}
   %\VignetteEngine{knitr::rmarkdown}
   %\VignetteEncoding{UTF-8}
 ---
-- 
GitLab