changeset 0:ce9979488ebb draft default tip

planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/Geom_mean_workflow commit 3f11e193fd9ba5bf0c706cd5d65d6398166776cb
author ecology
date Sat, 25 Nov 2023 15:18:33 +0000
parents
children
files Bar_plot.R Map_shp.R Map_shp.xml Moyenne_geom.r test-data/0_RESULTATS_BOIS_BIODIV_2021_V2.csv test-data/GRECO/GRECO_l93.dbf test-data/GRECO/GRECO_l93.html test-data/GRECO/GRECO_l93.prj test-data/GRECO/GRECO_l93.shp test-data/GRECO/GRECO_l93.shx test-data/bar_plot.pdf test-data/evolution_rate.tsv test-data/histo_data.tsv test-data/map.pdf test-data/regres2008_2012_scaled.csv test-data/regres2013_2017_scaled.csv test-data/res2008_2012_scaled.csv test-data/res2013_2017_scaled.csv
diffstat 18 files changed, 442 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Bar_plot.R	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,52 @@
+#Script pour bar plot simple 
+
+#### loading required R libraries
+#### chargement des packages R utilisés
+library(ggplot2)
+
+###### overall parameters and settings
+###### paramètres globaux utilisés
+
+args = commandArgs(trailingOnly=TRUE) 
+if (length(args)==0)
+{
+    stop("This tool needs at least one argument")
+}else{
+    data <- args[1]
+    title <- as.character(args[2])
+    error_bar <- args[3]
+    color <- as.character(args[4])
+    ylab <- as.character(args[5])
+}
+
+histo_data = read.table(data, header= T)
+
+if (error_bar == "true"){
+
+   ggplot(histo_data, aes(x = variable_name, y = variable, fill = variable_name)) +
+     geom_bar(stat = "identity", position = "dodge", fill = color) +
+     geom_errorbar(aes(ymin = variable - standard_deviation, ymax = variable + standard_deviation), 
+                   position = position_dodge(0.9), width = 0.25) +
+     geom_text(aes(label = variable), vjust = -2, color = "black", size = 4) +
+     ggtitle(title) +
+     ylab(ylab) +
+     theme_minimal()+
+     theme(legend.position = "none",
+           axis.title.x = element_blank())
+
+   ggsave("bar_plot.pdf", device = pdf, width = 20, height = 20, units = "cm")
+
+}else{
+
+   ggplot(histo_data, aes(x = variable_name, y = variable, fill = variable_name)) +
+     geom_bar(stat = "identity", position = "dodge", fill = color) +
+     geom_text(aes(label = variable), vjust = -1, color = "black", size = 4) +
+     ggtitle(title) +
+     ylab(ylab) +
+     theme_minimal()+
+     theme(legend.position = "none",
+           axis.title.x = element_blank())
+
+   ggsave("bar_plot.pdf", device = pdf, width = 20, height = 20, units = "cm")}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Map_shp.R	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,62 @@
+library(ggplot2)
+library(sf)
+library(dplyr)
+library(RColorBrewer)
+library(ggspatial)
+
+args = commandArgs(trailingOnly=TRUE) 
+if (length(args)==0)
+{
+    stop("This tool needs at least one argument")
+}else{
+    dataMap <- args[1]
+    dataEvo <- args[2]
+    title <- args[3]
+    legend <- args[4]
+    coord <- args[5]
+     
+}
+
+title <- gsub("\\\\n", "\n", title) 
+legend <-gsub("\\\\n", "\n", legend) 
+#read data
+
+data_map = st_read(dataMap)
+data_evo = read.delim(dataEvo,header=TRUE,sep="\t")
+
+#bring together data
+
+data_fin = bind_cols(data_map,data_evo[2])
+
+
+# define the data intervals
+intervals <- cut(data_fin$Evolution_rate, breaks = c(-Inf, 0, 9, 20, Inf), labels = c("Moins de 0", "0 à 10", "10 à 20", "Plus de 20"))
+
+# Make the map with ggplot2 
+
+if (coord == "true"){
+  ggplot(data_fin) +
+    geom_sf(aes(fill = intervals)) +
+    scale_fill_manual(values = c('#D9F0D3',"#A6DBA0","#5AAE61","#1B7837")) +
+    labs(title = title, fill = legend) +
+    annotation_scale()
+    
+  #outuput 
+  ggsave("map.pdf", device = "pdf")
+
+}else{
+  ggplot(data_fin) +
+    geom_sf(aes(fill = intervals)) +
+    scale_fill_manual(values = c('#D9F0D3',"#A6DBA0","#5AAE61","#1B7837")) +
+    labs(title = title, fill = legend) +
+    theme_void()+
+    annotation_scale()
+    
+  #outuput 
+  ggsave("map.pdf", device = "pdf")
+}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Map_shp.xml	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,72 @@
+<tool id="Map_shp" name="Make a map with a shapefile" version="0.1.0+galaxy0">
+    <requirements>
+       <requirement type="package" version="4.3.2">r-base</requirement>
+       <requirement type="package" version="3.4.4">r-ggplot2</requirement>
+       <requirement type="package" version="1.0_14">r-sf</requirement>
+       <requirement type="package" version="1.1.9">r-ggspatial</requirement>
+       <requirement type="package" version="1.1.3">r-dplyr</requirement>
+       <requirement type="package" version="1.1_3">r-rcolorbrewer</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript
+         "$__tool_directory__/Map_shp.R"
+          #if $input1.is_of_type("shp") 
+             ${os.path.join( $input1.extra_files_path, "shapefile.shp" )} 
+          #else
+            "$input1" 
+          #end if
+         "$input2"
+         "$input3"
+         "$input4"
+         "$input5"
+         "$output"
+          
+    ]]></command>
+    <inputs>
+       <param name="input1" type="data" format="shp" label="Shapefile"/>
+       <param name="input2" type="data" format="tabular" label="Data to represent"/>
+       <param name="input3" type="text" label="What is the title of your map ?">
+          <sanitizer invalid_char="">
+              <valid initial="string.printable">
+                  <add value="é"/>
+                  <add value="è"/>
+              </valid>
+          </sanitizer>
+       </param>
+       <param name="input4" type="text" label="What is the legend of your map ?">
+          <sanitizer invalid_char="">
+              <valid initial="string.printable">
+                  <add value="é"/>
+                  <add value="è"/>
+              </valid>
+         </sanitizer>
+        </param>
+       <param name="input5" type="boolean" label="Display the geographical coordinates ?"/>
+    </inputs>
+    <outputs>
+       <data name="output" from_work_dir="map.pdf" format="pdf" label="map.pdf"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="input1" value="GRECO/GRECO_l93.html" ftype="shp">
+                 <composite_data value="GRECO/GRECO_l93.shp"/>
+                 <composite_data value="GRECO/GRECO_l93.shx"/>
+                 <composite_data value="GRECO/GRECO_l93.dbf"/>
+                 <composite_data value="GRECO/GRECO_l93.prj"/>
+            </param>
+            <param name='input2' value="evolution_rate.tsv"/>
+            <param name='input3' value="Taux d'évolution du volume des bois favorables à la biodiversité par GRECO"/>
+            <param name='input4' value="Taux d'évolution (%) \nentre les périodes \n2008-2012 et 2013-2017"/>
+            <param name='input5' value="true"/>
+            <output name='output' value="map.pdf"/>
+        </test>
+    </tests>
+    <help><![CDATA[
+==================    
+**What it does ?**
+==================
+
+This tool allows to build a map from a shapefile and color the areas according to a percentage (case study dead wood evolution rate).
+
+    ]]></help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Moyenne_geom.r	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,156 @@
+#### loading required R libraries
+#### chargement des packages R utilisés
+library(gdata)
+library(XLConnect)
+library(rms)
+
+###### overall parameters and settings
+###### paramètres globaux utilisés
+
+args = commandArgs(trailingOnly=TRUE) 
+if (length(args)==0)
+{
+    stop("This tool needs at least one argument")
+}else{
+    data <- args[1]
+    sep <- args[2]
+    HR <- args[3]
+     
+}
+
+if (HR =="false"){HR<-FALSE} else {HR<-TRUE}
+
+###nrep: number of samples used to calculate geometric means
+###nrep: nombre d'échantillons utilisés pour calculer les moyennes géométriques
+nrep<-10000
+
+#______________________________________________________________________________________________________________________________________________________________________________________________
+###### common functions
+###### fonction utiles pour la suite
+
+		convert.to.numeric<-function(x){
+		t(apply(x,1,function(x){as.double(sub(" ","",as.character(x)))}))}
+
+		
+		### calculus of the logarithm of nrep geometric means, sampling based on a lognormal distribution with the same moments as the empirical ones (means & Ics)
+			#to prevent negative values
+		### calcul du logarithme de nrep moyennes géométriques, l'échantillonnage étant fait avec la distribution lognormale de mêmes moments que les momenst empriques (means et ICs)
+			#pour éviter d'avoir des valeurs négatives
+
+		lgeomean<-function(means,ICs,nrep)
+		{#means: vector: mean estimates for the different categories 
+		#ICs: vector: in proportion to the mean, difference between the extremum of the 95% confidence interval and the mean
+		require(mvtnorm)
+		#calculation of the parameters of the log normal distribution (on the log scale)
+		#cf. http://127.0.0.1:26338/library/stats/html/Lognormal.html
+		logsigma<-sqrt(log((ICs/qnorm(0.975)/means)^2+1))
+		logmean<-log(means)-1/2*logsigma^2
+
+		#gaussian sampling on the log scale then taking exponential
+		temp<-exp(rmvnorm(nrep,mean=logmean,sigma=diag(logsigma*logsigma)))
+
+		#taking geometric mean over categories, but kept on the log scale
+		geomm.rep<-apply(temp,1,function(x){(mean(log(x),na.rm=TRUE))})
+		#c(mean(geomm.rep),sd(geomm.rep))
+		geomm.rep}
+#_______________________________________________________________________________________________________________________________________________________________________________________________
+
+###### importation des données
+###### importation of data
+temp<-read.csv(file=data,sep=sep,header=HR,encoding="UTF-8")
+
+data2008_2012<-temp[4:14,]
+data2013_2017<-temp[21:31,]
+
+meandata2008_2012<-convert.to.numeric(data2008_2012[,c(3,6,9)])
+ICdata2008_2012<-convert.to.numeric(data2008_2012[,c(5,8,11)])
+meandata2013_2017<-convert.to.numeric(data2013_2017[,c(3,6,9)])
+ICdata2013_2017<-convert.to.numeric(data2013_2017[,c(5,8,11)])
+
+####### code to calculate (nrep) logarithms of geometric means by region (Greco)
+####### code pour calculer les nrep logarithmes de moyennes géométriques par région (GRECO)
+
+set.seed(1)
+#first period
+#première période
+rest2008_2012<-sapply(1:dim(data2008_2012)[1],function(region){lgeomean(meandata2008_2012[region,],ICdata2008_2012[region,],nrep)})
+
+set.seed(3)
+#first period but with different seed
+#première période mais avec une graine différente
+rest2008_2012_s3<-sapply(1:dim(data2008_2012)[1],function(region){lgeomean(meandata2008_2012[region,],ICdata2008_2012[region,],nrep)})
+
+set.seed(2)
+#second period
+#seconde période
+rest2013_2017<-sapply(1:dim(data2013_2017)[1],function(region){lgeomean(meandata2013_2017[region,],ICdata2013_2017[region,],nrep)})
+
+
+####### code to summarize the above nrep logarithms of geometric means by region into the statistics of an overall geometric mean across regions, taking the first period as reference
+###### code pour passer des nrep logarithmes de moyenne géométrique par région aux statistiques de la moyenne géométrique globale, en prennat la première période comme référence
+
+#for the first period
+#pour la première période
+Mean_2008_2012_scaled<-{temp<-apply(rest2008_2012_s3,1,function(x){mean(x)})-apply(rest2008_2012,1,function(x){mean(x)});c(mean(exp(temp)),sd(exp(temp)),quantile(exp(temp),prob=c(0.025,0.975)))}
+
+#for the second period
+#pour la seconde période
+Mean_2013_2017_scaled<-{temp<-apply(rest2013_2017,1,function(x){mean(x)})-apply(rest2008_2012,1,function(x){mean(x)});c(mean(exp(temp)),sd(exp(temp)),quantile(exp(temp),prob=c(0.025,0.975)))}
+
+
+
+############### NATIONAL OUPUTS:
+############### SORTIES NATIONALES:
+
+res2008_2012_scaled_df = data.frame(Mean_2008_2012_scaled)
+res2008_2012_scaled_df=`rownames<-`(res2008_2012_scaled_df,c("mean","sd","2,5%","97,5%"))
+
+res2013_2017_scaled_df = data.frame(Mean_2013_2017_scaled)
+res2013_2017_scaled_df=`rownames<-`(res2013_2017_scaled_df,c("mean","sd","2,5%","97,5%"))
+
+
+write.csv(res2008_2012_scaled_df, file = "res2008_2012_scaled.csv")
+write.csv(res2013_2017_scaled_df,file= "res2013_2017_scaled.csv")
+
+############### REGIONAL OUPUTS:
+############### SORTIES REGIONALES (GRECO):
+
+regres2008_2012_scaled<-apply(rest2008_2012_s3-rest2008_2012,2,function(x){temp<-x;c(mean=mean(exp(temp)),sd=sd(exp(temp)),quantile(exp(temp),prob=c(0.025,0.975)))})
+regres2013_2017_scaled<-apply(rest2013_2017-rest2008_2012,2,function(x){temp<-x;c(mean=mean(exp(temp)),sd=sd(exp(temp)),quantile(exp(temp),prob=c(0.025,0.975)))})
+dimnames(regres2008_2012_scaled)[[2]]<-as.character(data2008_2012[,2])
+dimnames(regres2013_2017_scaled)[[2]]<-as.character(data2013_2017[,2])
+
+write.csv(regres2008_2012_scaled, file = "regres2008_2012_scaled.csv")
+write.csv(regres2013_2017_scaled, file = "regres2013_2017_scaled.csv")
+
+############### data to make a bar plot of the national evolution rate 
+histo_data = data.frame(
+  variable_name = c(names(res2008_2012_scaled_df),names(res2013_2017_scaled_df)), 
+  variable = c(round(Mean_2008_2012_scaled[1]*100),round(Mean_2013_2017_scaled[1]*100)),
+  standard_deviation = c(Mean_2008_2012_scaled[2]*100,Mean_2013_2017_scaled[2]*100)
+)
+
+write.table(histo_data, file = "histo_data.tsv",row.names = F, col.names = T ,sep ="\t")
+
+############### data to make a map of the GRECO evolution rate
+
+rate2008_2012 = data.frame(round(regres2008_2012_scaled[1,1:11]*100))
+rate2013_2017 = data.frame(round(regres2013_2017_scaled[1,1:11]*100))
+
+evol_rate = rate2013_2017-rate2008_2012
+evol_rate = cbind(data2013_2017[,2],evol_rate)
+colnames(evol_rate)<-c("Regions","Evolution_rate")
+
+
+write.table(evol_rate,"evolution_rate.tsv",sep="\t",quote=F,row.names=F,col.names=T)
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/0_RESULTATS_BOIS_BIODIV_2021_V2.csv	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,57 @@
+TOUTE LA FORET DE PRODUCTION : Y compris peupleraies,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,
+,2008-2012,,,,,,,,,,,,,,,,,,
+,GRECO,Tr±s gros bois (1000 m3),,,"Bois mort debout
+(hors chablis) (1000 m3)",,,"Bois mort au sol 
+(>=7,5 cm diamètre) (1000 m3)",,,"TOTAL
+(1000 m3)",,,"TOTAL 2013-2017
+(1000 m3)",,,Valeur ancienne à comparer,Valeur  r±cente à comparer,
+,Grand Ouest cristallin et océanique,4630,±,1020,3200,±,662,5634,±,1004,13464,±,1577,15954,±,2072,15041,13882,ns
+,Centre Nord semi-océanique,34788,±,2862,13997,±,1085,25299,±,2074,74084,±,3697,80362,±,4620,77781,75742,ns
+,Grand Est semi-continental,22613,±,2318,10581,±,1063,26660,±,4048,59853,±,4784,63219,±,3955,64637,59264,ns
+,Vosges,8165,±,1514,3912,±,622,14326,±,1898,26403,±,2506,31216,±,3014,28909,28202,ns
+,Jura,4946,±,1254,3661,±,597,7553,±,1145,16160,±,1800,17588,±,2234,17960,15354,ns
+,Sud-Ouest océanique,10011,±,1684,12695,±,1276,29281,±,2873,51986,±,3566,51773,±,3737,55552,48036,ns
+,Massif central,17343,±,2475,26785,±,1851,44932,±,3405,89061,±,4598,92591,±,5025,93659,87566,ns
+,Alpes,7500,±,1485,11312,±,1206,16152,±,2196,34965,±,2913,36582,±,3497,37878,33085,ns
+,Pyrénées,9938,±,1777,7059,±,1129,10493,±,1881,27489,±,2823,22915,±,2999,30312,19916,ns
+,Méditerranée,3389,±,1184,4177,±,753,4789,±,1275,12355,±,1896,14180,±,4081,14251,10099,ns
+,Corse,9503,±,2341,2415,±,869,2747,±,1168,12603,±,2634,15752,±,6374,15237,9378,ns
+,,,,,,,,,,,,,,,,,,,
+,France entière,130764,±,6011,99793,±,3368,187866,±,6565,418423,±,9517,442132,±,11405,427940,430727,*
+,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,
+,2013-2017,,,,,,,,,,,,,,,,,,
+,GRECO,Tr±s gros bois (1000 m3),,,"Bois mort debout
+(hors chablis) (1000 m3)",,,"Bois mort au sol 
+(>=7,5 cm diamètre) (1000 m3)",,,"TOTAL
+(1000 m3)",,,,,,,,
+,Grand Ouest cristallin et océanique,6808,±,1593,3600,±,657,5545,±,1151,15954,±,2072,,,,,,
+,Centre Nord semi-océanique,39742,±,3373,13230,±,1070,27390,±,2970,80362,±,4620,,,,,,
+,Grand Est semi-continental,26303,±,2782,11818,±,1235,25098,±,2525,63219,±,3955,,,,,,
+,Vosges,10651,±,1967,4774,±,825,15790,±,2129,31216,±,3014,,,,,,
+,Jura,5890,±,1755,3434,±,638,8264,±,1226,17588,±,2234,,,,,,
+,Sud-Ouest océanique,14293,±,2381,11794,±,1225,25686,±,2606,51773,±,3737,,,,,,
+,Massif central,20521,±,3159,28097,±,2210,43973,±,3222,92591,±,5025,,,,,,
+,Alpes,9396,±,2151,12300,±,1789,14886,±,2098,36582,±,3497,,,,,,
+,Pyrénées,9167,±,2023,5302,±,911,8446,±,2017,22915,±,2999,,,,,,
+,Méditerranée,3958,±,1582,3624,±,677,6598,±,3700,14180,±,4081,,,,,,
+,Corse,11356,±,3595,1909,±,746,4605,±,5457,15752,±,6374,,,,,,
+,,,,,,,,,,,,,,,,,,,
+,France entière,155967,±,7739,99881,±,3713,186284,±,7509,442132,±,11405,,,,,,
+,,,,,,,,,,,,,,,,,,,
+,,,,Tr±s gros bois,,,,,,,,,,,,,,,
+,,,,Bois mort debout (hors chablis),,,,,,,,,,,,,,,
+,,,,Bois mort au sol (>=7,5 cm),,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,
+,"Source : IGN, inventaire forestier national
+Domaines forestiers et temporels : 
+Forêts de production hors peupleraies et peupleraies
+Campagnes 2008-2012 et campagnes 2013-2017
+Précisions sur les données calculées pour l'indicateur ONB ""bois favorables à la biodiversité"" : 
+Très gros bois : selon la définition ONB 2018, seuils de diamètre fixé par type biologique d'essence (macro, méso ou microphanérophyte) et différencié en grande région écologique Méditérranée par rapport aux autres grandes régions écologiques. 
+     - GRECO méditerranée : Macrophanérophytes : 60,0 cm, mésophanérophytes : 32,5 cm, microphanérophytes : 22,5 cm
+     - Autres GRECO : Macrophanérophytes : 70,0 cm, mésophanérophytes : 45,0 cm, microphanérophytes : 27,5 cm
+Bois mort debout : les chablis ne sont pas comptabilisés ici.
+Bois mort au sol : seuls les volumes des bois morts au sol à partir de 7,5 cm de diamètre sont comptabilisés ici.
+",,,,,,,,,,,,,,,,,,
Binary file test-data/GRECO/GRECO_l93.dbf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/GRECO/GRECO_l93.html	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,7 @@
+<html><head><title>Shapefile Galaxy Composite Dataset</title></head><p/>
+<div>This composite dataset is composed of the following files:<p/><ul>
+<li><a href="GRECO_l93.shp" type="application/binary">shapefile.shp (Geometry File (shp))</a></li>
+<li><a href="GRECO_l93.shx" type="application/binary">shapefile.shx (Geometry index File (shx))</a></li>
+<li><a href="GRECO_l93.dbf" type="application/binary">shapefile.dbf (Columnar attributes for each shape (dbf))</a></li>
+<li><a href="GRECO_l93.prj" type="application/binary">shapefile.prj (Projection description (prj))</a> (optional)</li>
+</ul></div></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/GRECO/GRECO_l93.prj	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,1 @@
+PROJCS["RGF_1993_Lambert_93",GEOGCS["GCS_RGF_1993",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",700000.0],PARAMETER["False_Northing",6600000.0],PARAMETER["Central_Meridian",3.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",44.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
\ No newline at end of file
Binary file test-data/GRECO/GRECO_l93.shp has changed
Binary file test-data/GRECO/GRECO_l93.shx has changed
Binary file test-data/bar_plot.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/evolution_rate.tsv	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,12 @@
+Regions	Evolution_rate
+Grand Ouest cristallin et océanique	18
+Centre Nord semi-océanique	5
+Grand Est semi-continental	7
+Vosges	21
+Jura	7
+Sud-Ouest océanique	5
+Massif central	7
+Alpes	8
+Pyrénées	-18
+Méditerranée	10
+Corse	13
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/histo_data.tsv	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,3 @@
+"variable_name"	"variable"	"standard_deviation"
+"Mean_2008_2012_scaled"	100	2.38599016822497
+"Mean_2013_2017_scaled"	107	3.28578011320741
Binary file test-data/map.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/regres2008_2012_scaled.csv	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,5 @@
+"","Grand Ouest cristallin et océanique","Centre Nord semi-océanique","Grand Est semi-continental","Vosges","Jura","Sud-Ouest océanique","Massif central","Alpes","Pyrénées","Méditerranée","Corse"
+"mean",1.00296534309936,1.0011882786513,1.0008323917756,1.0015330935306,1.00348893002342,1.0012856608366,1.00012988707031,1.00190395101105,1.0031722472139,1.00724654706276,1.00990626149863
+"sd",0.0849715062265118,0.0337152057967764,0.0503372573317076,0.0665652590066563,0.0816398301398331,0.0526547042531718,0.0418715282738768,0.0636441417742403,0.0719135127523274,0.115560728970726,0.148428070380529
+"2.5%",0.844799421502814,0.936863358852826,0.90688810158476,0.87738083794475,0.851358530749395,0.901186934934736,0.919495660182742,0.882399099976615,0.871960314123855,0.800773351296782,0.752737139390172
+"97.5%",1.17715958417959,1.06979601116016,1.10261064943676,1.1370320623464,1.17018070081677,1.1085958186577,1.0844424101995,1.13112641917321,1.15174720886647,1.25420404980751,1.3325196620305
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/regres2013_2017_scaled.csv	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,5 @@
+"","Grand Ouest cristallin et océanique","Centre Nord semi-océanique","Grand Est semi-continental","Vosges","Jura","Sud-Ouest océanique","Massif central","Alpes","Pyrénées","Méditerranée","Corse"
+"mean",1.18094346489396,1.05456060640417,1.07115291024141,1.20746761659847,1.07252502068406,1.05322222633286,1.06732926839759,1.08091700379083,0.824214889677252,1.11273127297985,1.14039418272799
+"sd",0.10133348179823,0.0379181061169111,0.0497040980353504,0.0814050301787788,0.091869011405958,0.0556726380012161,0.0468324903068147,0.0740978690344627,0.0672243252401584,0.161297353404507,0.264933088151811
+"2.5%",0.994324127721413,0.980232759426124,0.977153310234652,1.05606213924044,0.90415890443177,0.946932322372878,0.980628895469241,0.943944305369814,0.701713995519032,0.829937762059617,0.712100141730523
+"97.5%",1.39337669545521,1.13008251391986,1.17066107329349,1.37662243471713,1.26134075283944,1.1664176227794,1.16214254113648,1.23264011584226,0.962689685611007,1.45776348018511,1.75082384999842
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/res2008_2012_scaled.csv	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,5 @@
+"","Mean_2008_2012_scaled"
+"mean",1.00016163522044
+"sd",0.0238599016822497
+"2,5%",0.954294144295886
+"97,5%",1.04839203288869
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/res2013_2017_scaled.csv	Sat Nov 25 15:18:33 2023 +0000
@@ -0,0 +1,5 @@
+"","Mean_2013_2017_scaled"
+"mean",1.06916362673739
+"sd",0.0328578011320741
+"2,5%",1.00711315573169
+"97,5%",1.13438128695784