Repository 'pampa_glmsp'
hg clone https://toolshed.g2.bx.psu.edu/repos/ecology/pampa_glmsp

Changeset 0:0778efa9eb2e (2020-07-21)
Next changeset 1:e972fe2bffee (2020-07-27)
Commit message:
"planemo upload for repository https://github.com/ColineRoyaux/PAMPA-Galaxy commit 07f1028cc764f920b1e6419c151f04ab4e3600fa"
added:
FunctExeCalcGLMSpGalaxy.r
FunctPAMPAGalaxy.r
PAMPA_GLM_SP.xml
pampa_macros.xml
test-data/GLM_table_population_analysis_on_Presence_absence_sansszcl_cropped.tabular
test-data/Presence_absence_table_sansszcl_cropped.tabular
test-data/Simple_statistics_on_Presence_absence_sansszcl_cropped.txt
test-data/Unitobs.tabular
b
diff -r 000000000000 -r 0778efa9eb2e FunctExeCalcGLMSpGalaxy.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FunctExeCalcGLMSpGalaxy.r Tue Jul 21 06:00:51 2020 -0400
[
b'@@ -0,0 +1,249 @@\n+#Rscript \r\n+\r\n+#####################################################################################################################\r\n+#####################################################################################################################\r\n+################################# Compute a Generalized Linear Model from your data #################################\r\n+#####################################################################################################################\r\n+#####################################################################################################################\r\n+\r\n+###################### Packages\r\n+#suppressMessages(library(MASS))\r\n+suppressMessages(library(multcomp))\r\n+suppressMessages(library(glmmTMB)) ###Version: 0.2.3\r\n+suppressMessages(library(gap))\r\n+\r\n+###################### Load arguments and declaring variables\r\n+\r\n+args = commandArgs(trailingOnly=TRUE)\r\n+#options(encoding = "UTF-8")\r\n+\r\n+if (length(args) < 10) {\r\n+    stop("At least 4 arguments must be supplied : \\n- two input dataset files (.tabular) : metrics table and unitobs table \\n- Interest variable field from metrics table \\n- Response variable from unitobs table.", call.=FALSE) #si pas d\'arguments -> affiche erreur et quitte / if no args -> error and exit1\r\n+\r\n+} else {\r\n+    Importdata <- args[1] ###### file name : metrics table\r\n+    ImportUnitobs <- args[2] ###### file name : unitobs informations\r\n+    colmetric <- as.numeric(args[3]) ###### Selected interest metric for GLM\r\n+    listFact <- strsplit(args [4],",")[[1]] ###### Selected response factors for GLM\r\n+    listRand <- strsplit(args [5],",")[[1]] ###### Selected randomized response factors for GLM\r\n+    colFactAna <- args[6] ####### (optional) Selected splitting factors for GLMs\r\n+    Distrib <- args[7] ###### (optional) Selected distribution for GLM \r\n+    log <- args[8] ###### (Optional) Log on interest metric ?\r\n+    aggreg <- args[9] ###### Aggregation level of the data table\r\n+    source(args[10]) ###### Import functions\r\n+\r\n+}\r\n+#### Data must be a dataframe with at least 3 variables : unitobs representing location and year ("observation.unit"), species code ("species.code") and abundance ("number")\r\n+\r\n+\r\n+#Import des donn\xc3\xa9es / Import data \r\n+obs<- read.table(Importdata,sep="\\t",dec=".",header=TRUE,encoding="UTF-8") #\r\n+obs[obs == -999] <- NA \r\n+metric <- colnames(obs)[colmetric]\r\n+tabUnitobs <- read.table(ImportUnitobs,sep="\\t",dec=".",header=TRUE,encoding="UTF-8")\r\n+tabUnitobs[tabUnitobs == -999] <- NA \r\n+\r\n+vars_data1<- c("species.code")\r\n+err_msg_data1<-"The input metrics dataset doesn\'t have the right format. It needs to have at least the following 3 variables :\\n- species.code \\n- observation.unit (or year and site)\\n- numeric or integer metric\\n"\r\n+check_file(obs,err_msg_data1,vars_data1,3)\r\n+\r\n+vars_data2 <- c(listFact,listRand)\r\n+vars_data2 <- vars_data2[vars_data2 != "None"]\r\n+err_msg_data2<-"The input unitobs dataset doesn\'t have the right format. It needs to have at least the following 2 variables :\\n- observation.unit (or year and site)\\n- factors used in GLM (habitat, year and/or site)\\n"\r\n+check_file(tabUnitobs,err_msg_data2,vars_data2,2)\r\n+\r\n+\r\n+if (colFactAna != "None")\r\n+{\r\n+    FactAna <- colFactAna\r\n+    if (class(obs[FactAna]) == "numeric" || FactAna == "observation.unit"){stop("Wrong chosen separation factor : Analysis can\'t be separated by observation unit or numeric factor")}\r\n+}else{\r\n+    FactAna <- colFactAna\r\n+}\r\n+\r\n+\r\n+#factors <- fact.det.f(Obs=obs)\r\n+\r\n+####################################################################################################\r\n+########## Computing Generalized Linear Model ## Function : modeleLineaireWP2.unitobs.f ############\r\n+####################################################################################################\r\n+\r\n+modeleLineaireWP2.species.f <- function(metrique, listFact, listRand, FactAna, Distrib, log=FALSE, tabMetrics, tableMetrique, tabUnitobs,'..b'        }else{ ## if no fixed effects\r\n+            colcoef <- NULL\r\n+        }\r\n+\r\n+    }else{ ## if no random effects\r\n+        TabSum <- data.frame(species=levels(tmpData[,FactAna]),AIC=NA,Resid.deviance=NA,df.resid=NA,Null.deviance=NA,df.null=NA)\r\n+\r\n+        switch(loiChoisie,\r\n+               "gaussian"={colcoef <- unlist(lapply(c("(Intercept)",lev),\r\n+                                             FUN=function(x){lapply(c("Estimate","Std.Err","Tvalue","Pvalue","signif"),\r\n+                                                                    FUN=function(y){paste(x,y,collapse = ":")\r\n+                                                                                   })\r\n+                                                            }))},\r\n+               "quasipoisson"={colcoef <- unlist(lapply(c("(Intercept)",lev),\r\n+                                             FUN=function(x){lapply(c("Estimate","Std.Err","Tvalue","Pvalue","signif"),\r\n+                                                                    FUN=function(y){paste(x,y,collapse = ":")\r\n+                                                                                   })\r\n+                                                            }))},\r\n+               colcoef <- unlist(lapply(c("(Intercept)",lev),\r\n+                                        FUN=function(x){lapply(c("Estimate","Std.Err","Zvalue","Pvalue","signif"),\r\n+                                                               FUN=function(y){paste(x,y,collapse = ":")\r\n+                                                                              })\r\n+                                                       })))\r\n+        \r\n+    }  \r\n+  \r\n+    TabSum[,colcoef] <- NA\r\n+\r\n+    ### creating rate table \r\n+    TabRate <- data.frame(species=levels(tmpData[,FactAna]), complete_plan=NA, balanced_plan=NA, NA_proportion_OK=NA, no_residual_dispersion=NA, uniform_residuals=NA, outliers_proportion_OK=NA, no_zero_inflation=NA, observation_factor_ratio_OK=NA, enough_levels_random_effect=NA, rate=NA)\r\n+\r\n+    ## Compute Model(s) :\r\n+   \r\n+    for (sp in levels(tmpData[,FactAna])) \r\n+    {\r\n+        cutData <- tmpData[grep(sp,tmpData[,FactAna]),]\r\n+        cutData <- dropLevels.f(cutData)\r\n+\r\n+        res <-""\r\n+\r\n+        if (listRand[1] != "None")\r\n+        {\r\n+            res <- tryCatch(glmmTMB(exprML,family=loiChoisie, data=cutData), error=function(e){})\r\n+        }else{\r\n+            res <- tryCatch(glm(exprML,data=cutData,family=loiChoisie), error=function(e){})\r\n+        }\r\n+\r\n+          ## \xc3\x89criture des r\xc3\xa9sultats format\xc3\xa9s dans un fichier :\r\n+        if (! is.null(res))\r\n+        {\r\n+            TabSum <- sortiesLM.f(objLM=res, TabSum=TabSum, factAna=factAna, cut=sp, colAna="species", lev=lev, Data=cutData, metrique=metrique, type="espece", listFact=listFact)\r\n+\r\n+            TabRate[TabRate[,"species"]==sp,c(2:11)] <- noteGLM.f(data=cutData, objLM=res, metric=metrique, listFact=listFact, details=TRUE)\r\n+\r\n+        }else{\r\n+            cat("\\nCannot compute GLM for species",sp,"Check if one or more factor(s) have only one level, or try with another distribution for the model in advanced settings \\n\\n")\r\n+        }\r\n+\r\n+    }\r\n+    noteGLMs.f(tabRate=TabRate,exprML=exprML,objLM=res,file_out=TRUE)\r\n+\r\n+    ## simple statistics and infos :\r\n+    filename <- "GLMSummaryFull.txt"\r\n+\r\n+    ## Save data on model :\r\n+\r\n+    infoStats.f(filename=filename, Data=tmpData, agregLevel=aggreg, type="stat",\r\n+                metrique=metrique, factGraph=factAna, #factGraphSel=modSel,\r\n+                listFact=listFact)#, listFactSel=listFactSel)\r\n+\r\n+    return(TabSum)\r\n+}\r\n+\r\n+################# Analysis\r\n+\r\n+Tab <- modeleLineaireWP2.species.f(metrique=metric, listFact=listFact, listRand=listRand, FactAna=FactAna, Distrib=Distrib, tabMetrics=obs, tableMetrique=aggreg, tabUnitobs=tabUnitobs, outresiduals=SupprOutlay, nbName="number")\r\n+\r\n+write.table(Tab,"GLMSummary.tabular", row.names=FALSE, sep="\\t", dec=".",fileEncoding="UTF-8")\r\n+\r\n'
b
diff -r 000000000000 -r 0778efa9eb2e FunctPAMPAGalaxy.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FunctPAMPAGalaxy.r Tue Jul 21 06:00:51 2020 -0400
[
b'@@ -0,0 +1,3568 @@\n+#Rscript\n+\n+\n+##################################################################################################################################\n+####################### PAMPA Galaxy tools functions : Calculate metrics, compute GLM and plot   #################################\n+##################################################################################################################################\n+\n+#### Based on Yves Reecht R script\n+#### Modified by Coline ROYAUX for integrating within Galaxy-E\n+\n+######################################### start of the function fact.def.f called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Define the finest aggregation with the observation table\n+\n+fact.det.f <- function (Obs,\n+                        size.class="size.class",\n+                        code.especes="species.code",\n+                        unitobs="observation.unit")\n+{\n+    if (any(is.element(c(size.class), colnames(obs))) && all(! is.na(obs[, size.class])))\n+        {\n+            factors <- c(unitobs, code.especes, size.class)\n+        }else{\n+            factors <- c(unitobs, code.especes)\n+        }\n+    return(factors)\n+}\n+\n+######################################### end of the function fact.def.f \n+\n+######################################### start of the function def.typeobs.f called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Define observation type from colnames\n+\n+def.typeobs.f <- function(Obs)\n+{\n+    if (any(is.element(c("rotation","rot","rotate"),colnames(obs))))\n+    {\n+        ObsType <- "SVR"\n+    }else{\n+        ObsType <- "other"\n+    }\n+    return(ObsType)\n+}\n+######################################### end of the function fact.def.f \n+\n+######################################### start of the function create.unitobs called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Create unitobs column when inexistant\n+create.unitobs <- function(data,year="year",point="point", unitobs="observation.unit")\n+{\n+    if (is.element(paste(unitobs),colnames(data)) && all(grepl("[1-2][0|8|9][0-9]{2}_.*",data[,unitobs])==FALSE))\n+    {\n+        unitab <- data\n+\n+    }else{ \n+\n+        unitab <- unite(data,col="observation.unit",c(year,point))\n+    }\n+    return(unitab)\n+}\n+######################################### start of the function create.unitobs\n+\n+######################################### start of the function create.year.point called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### separate unitobs column when existant\n+create.year.point <- function(data,year="year",point="point", unitobs="observation.unit")\n+{\n+    if (all(grepl("[1-2][0|8|9][0-9]{2}_.*",data[,unitobs]))==TRUE)\n+    {\n+        tab <- separate(data,col=unitobs,into=c(year,point),sep="_")\n+    }else{\n+        tab <- separate(data,col=unitobs,into=c("site1", year,"obs"),sep=c(2,4))\n+        tab <- unite(tab, col=point, c("site1","obs"))\n+\n+    }\n+\n+    tab <- cbind(tab,observation.unit = data[,unitobs])\n+\n+    return(tab)\n+}\n+######################################### start of the function create.unitobs\n+\n+######################################### start of the function check_file called by every Galaxy Rscripts\n+\n+check_file<-function(dataset,err_msg,vars,nb_vars){\n+\n+    ## Purpose: General function to check integrity of input file. Will \n+    ##          check numbers and contents of variables(colnames).\n+    ##          return an error message and exit if mismatch detected\n+    ## ----------------------------------------------------------------------\n+    ## Arguments: dataset : dataset name\n+    ##            err_msg : output error\n+    ##            vars : expected name of variables\n+    ##            nb_vars : expected number of variables\n+    ## ----------------------------------------------------------------------\n+    ## Author: Alan Amosse, Benjamin Yguel \n+\n+    if(ncol(dataset) < nb_vars){ #checking for r'..b'+  plot(predict(fittedModel), resid(fittedModel, type = "response") , main = "Raw residuals" , ylab = "Residual", xlab = "Predicted")\n+  mtext("Conventional residual plots", outer = T)\n+}\n+\n+\n+\n+\n+#\n+#\n+# if(quantreg == F){\n+#\n+#   lines(smooth.spline(simulationOutput$fittedPredictedResponse, simulationOutput$scaledResiduals, df = 10), lty = 2, lwd = 2, col = "red")\n+#\n+#   abline(h = 0.5, col = "red", lwd = 2)\n+#\n+# }else{\n+#\n+#   #library(gamlss)\n+#\n+#   # qrnn\n+#\n+#   # http://r.789695.n4.nabble.com/Quantile-GAM-td894280.html\n+#\n+#   #require(quantreg)\n+#   #dat <- plyr::arrange(dat,pred)\n+#   #fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.5,data = dat)\n+#\n+#   probs = c(0.25, 0.50, 0.75)\n+#\n+#   w <- p <- list()\n+#   for(i in seq_along(probs)){\n+#     capture.output(w[[i]] <- qrnn::qrnn.fit(x = as.matrix(simulationOutput$fittedPredictedResponse), y = as.matrix(simulationOutput$scaledResiduals), n.hidden = 4, tau = probs[i], iter.max = 1000, n.trials = 1, penalty = 1))\n+#     p[[i]] <- qrnn::qrnn.predict(as.matrix(sort(simulationOutput$fittedPredictedResponse)), w[[i]])\n+#   }\n+#\n+#\n+#\n+#   #plot(simulationOutput$fittedPredictedResponse, simulationOutput$scaledResiduals, xlab = "Predicted", ylab = "Residual", main = "Residual vs. predicted\\n lines should match", cex.main = 1)\n+#\n+#   #lines(sort(simulationOutput$fittedPredictedResponse), as.vector(p[[1]]), col = "red")\n+#\n+#   matlines(sort(simulationOutput$fittedPredictedResponse), matrix(unlist(p), nrow = length(simulationOutput$fittedPredictedResponse), ncol = length(p)), col = "red", lty = 1)\n+#\n+#   #     as.vector(p[[1]])\n+#   #\n+#   #\n+#   #     lines(simulationOutput$fittedPredictedResponse,p[[1]], col = "red", lwd = 2)\n+#   #     abline(h = 0.5, col = "red", lwd = 2)\n+#   #\n+#   #     fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.25,data = dat)\n+#   #     lines(unique(dat$pred)[-1],fit$coef[1] + fit$coef[-1], col = "green", lwd = 2, lty =2)\n+#   #     abline(h = 0.25, col = "green", lwd = 2, lty =2)\n+#   #\n+#   #     fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.75,data = dat)\n+#   #     lines(unique(dat$pred)[-1],fit$coef[1] + fit$coef[-1], col = "blue", lwd = 2, lty = 2)\n+#   #     abline(h = 0.75, col = "blue", lwd = 2, lty =2)\n+# }\n+\n+####################### plot.R\n+\n+####################### random.R\n+\n+#\' Record and restore a random state\n+#\' \n+#\' The aim of this function is to record, manipualate and restor a random state\n+#\' \n+#\' @details This function is intended for two (not mutually exclusive tasks)\n+#\' \n+#\' a) record the current random state\n+#\' \n+#\' b) change the current random state in a way that the previous state can be restored\n+#\' \n+#\' @return a list with various infos about the random state that after function execution, as well as a function to restore the previous state before the function execution\n+#\' \n+#\' @param seed seed argument to set.seed(). NULL = no seed, but random state will be restored. F = random state will not be restored\n+#\' @export\n+#\' @example inst/examples/getRandomStateHelp.R\n+#\' @author Florian Hartig\n+#\' \n+getRandomState <- function(seed = NULL){\n+  \n+  # better to explicitly access the global RS?\n+  # current = get(".Random.seed", .GlobalEnv, ifnotfound = NULL)\n+  \n+  current = mget(".Random.seed", envir = .GlobalEnv, ifnotfound = list(NULL))[[1]]\n+  \n+  if(is.logical(seed) & seed == F){\n+    restoreCurrent <- function(){}    \n+  }else{\n+    restoreCurrent <- function(){\n+      if(is.null(current)) rm(".Random.seed", envir = .GlobalEnv) else assign(".Random.seed", current , envir = .GlobalEnv)\n+    }    \n+  }\n+\n+  # setting seed\n+  if(is.numeric(seed)) set.seed(seed)\n+\n+  # ensuring that RNG has been initialized\n+  if (is.null(current))runif(1) \n+  \n+  randomState = list(seed, state = get(".Random.seed", globalenv()), kind = RNGkind(), restoreCurrent = restoreCurrent)  \n+  return(randomState)\n+}\n+\n+####################### random.R\n+\n+######################################### Package DHARMa\n'
b
diff -r 000000000000 -r 0778efa9eb2e PAMPA_GLM_SP.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PAMPA_GLM_SP.xml Tue Jul 21 06:00:51 2020 -0400
[
@@ -0,0 +1,144 @@
+<tool id="pampa_glmsp" name="Compute GLM on population data" version="@VERSION@">
+    <description>Compute a GLM of your choice on population data</description>
+    <macros>
+        <import>pampa_macros.xml</import>
+    </macros>
+    <expand macro="GLM_requirements"/>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript 
+         '$__tool_directory__/FunctExeCalcGLMSpGalaxy.r' 
+         '$input_metric'
+         '$input_unitobs'
+         '$varint'
+         '$varrep'
+         '$varrand'
+         'species.code'
+         #if $settings.advanced=='advanced' 
+             $settings.distrib
+             'FALSE'
+         #else
+             'None'
+             'FALSE'
+         #end if
+         'unitSp'
+         '$__tool_directory__/FunctPAMPAGalaxy.r' 
+         '$output_summary'
+         '$output_recap'
+    ]]>
+    </command>
+    <inputs>
+        <expand macro="pampa_input_GLM"/>
+        <expand macro="pampa_var_GLM"/>
+        <conditional name="settings">
+            <expand macro="pampa_advanced_params_select_GLM"/>
+        </conditional>
+    </inputs>
+    <outputs>
+
+        <data name="output_summary" from_work_dir="GLMSummary.tabular" format="tabular" label="GLM - Results from your population analysis on ${on_string}"/>
+        <expand macro="pampa_output_GLM"/>
+    </outputs>
+    <tests>
+        <test> 
+            <param name="input_metric" value="Presence_absence_table_sansszcl_cropped.tabular"/>
+            <param name="input_unitobs" value="Unitobs.tabular"/>
+            <param name="varint" value="4"/>
+            <param name="varrep" value="year,site,habitat"/>
+            <param name="varrand" value="site"/>
+            <param name="advanced" value="simple"/>
+            <output name="output_summary">
+                <assert_contents> 
+                    <has_n_lines n="4"/>
+                </assert_contents> 
+            </output>
+            <output name="output_recap">  
+                <assert_contents> 
+                    <has_n_lines n="607"/>
+                </assert_contents> 
+            </output>     
+            <output name="output_rate">
+                <assert_contents> 
+                    <has_n_lines n="46"/>
+                </assert_contents> 
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+===============================================================
+Compute GLM on population data with selected interest variables
+===============================================================
+
+**What it does**
+
+This tool from PAMPA toolsuite computes Generalized Linear Models on population data. 
+
+It allows user to choose composition of the model :
+
+- Interest variable among numeric or integer variables of the input file
+
+- Response variables among year, site and/or habitat
+
+- Allocation of random effect on year and/or site
+
+|
+
+**Input description**
+
+A tabular file with population data. Must at least contain three or four columns depending on the case : 
+
+- ['year' and 'location'] or ['observation.unit'] 
+
+- 'species.code'
+
+- At least one population metric 
+
++------------------+--------------+---------+---------+-----+       
+| observation.unit | species.code | metric1 | metric2 | ... |            
++==================+==============+=========+=========+=====+        
+|   site_yearID    | species code |    2    |   0.4   | ... |            
++------------------+--------------+---------+---------+-----+        
+|        ...       |      ...     |   ...   |   ...   | ... |       
++------------------+--------------+---------+---------+-----+           
+
+OR
+
++------+----------+--------------+---------+---------+-----+
+| year | location | species.code | metric1 | metric2 | ... |
++======+==========+==============+=========+=========+=====+
+| 2000 |locationID| species code |    2    |   0.4   | ... |
++------+----------+--------------+---------+---------+-----+
+|  ... |    ...   |      ...     |   ...   |   ...   | ... |
++------+----------+--------------+---------+---------+-----+
+
+The first input may be extracted from the 'Calculate presence absence' tool.
+
+A tabular file with unitobs or location data which contains at least as much columns as used response variables and separation factor in addition with the 'observation.unit' or 'location' and 'species.code' column.
+
++--------------------------------+--------------+---------+--------+------------+-----+       
+| observation.unit OR location   | species.code |  site   |  year  |  habitat   | ... |            
++================================+==============+=========+========+============+=====+        
+|  site_yearID     OR locationID | species code | site ID |  2000  | habitatID  | ... |            
++--------------------------------+--------------+---------+--------+------------+-----+        
+|              ...               |      ...     |   ...   |   ...  |     ...    | ... |       
++--------------------------------+--------------+---------+--------+------------+-----+ 
+
+|
+
+**Output**
+
+Two text files : 
+
+- A first text file with GLM results. One analysis per species.
+
+- A second text file with simple statistics on the whole dataset.
+
+|
+
+**Source**
+
+Derived from PAMPA scripts (https://wwz.ifremer.fr/pampa/Meth.-Outils/Outils) written by Yves Reecht.
+
+  ]]></help>
+
+  <expand macro="pampa_bibref" />
+</tool>
b
diff -r 000000000000 -r 0778efa9eb2e pampa_macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pampa_macros.xml Tue Jul 21 06:00:51 2020 -0400
b
@@ -0,0 +1,82 @@
+<macros>
+    <token name="@VERSION@">0.0.1</token>
+    <xml name="Pampa_requirements">
+        <requirements>
+            <requirement type="package" version="1.0.2">r-tidyr</requirement>
+        </requirements>    
+    </xml>
+    <xml name="GLM_requirements">
+        <requirements>
+            <requirement type="package" version="1.2.2">r-gap</requirement>
+            <requirement type="package" version="1.0.1">r-glmmtmb</requirement>
+            <requirement type="package" version="1.4_13">r-multcomp</requirement>
+        </requirements>    
+    </xml>
+    <xml name="Plot_requirements">
+        <requirements>
+            <requirement type="package" version="3.1.1">r-ggplot2</requirement>
+        </requirements>    
+    </xml>
+    <xml name="pampa_input_calculate">
+        <param name="input" type="data" format="tabular" label="Input file" help="Observation data file, with location, year, species and abundance."/>
+    </xml>
+    <xml name="pampa_advanced_params_select">
+        <param name="advanced" type="select" label="Specify advanced parameters">
+            <option value="simple" selected="true">No, use program defaults.</option>
+            <option value="advanced">Yes, see full parameter list.</option>
+        </param>        
+        <when value="simple">
+        </when>        
+    </xml>
+    <xml name="pampa_advanced_params_select_GLM">
+        <param name="advanced" type="select" label="Specify advanced parameters">
+            <option value="simple" selected="true">No, use program defaults.</option>
+            <option value="advanced">Yes, see full parameter list.</option>
+        </param>        
+        <when value="simple">
+        </when>        
+        <when value="advanced">
+            <param name="distrib" type="select" label="Distribution for model">
+                <option selected="true" value="None">Auto</option>
+                <option value="gaussian">Gaussian</option>
+                <option value="inverse.gaussian">Inverse Gaussian</option>
+                <option value="poisson">Poisson</option>
+                <option value="quasipoisson">Quasi-Poisson</option>
+                <option value="binomial">Binomial</option>
+                <option value="quasibinomial">Quasi-Binomial</option>
+                <option value="Gamma">Gamma</option>
+            </param>
+        </when>
+    </xml>
+    <xml name="pampa_input_GLM">
+        <param name="input_metric" type="data" format="tabular" label="Input metrics file" help="Metrics data file, with location, year, and metrics informations that can be used as interest variable."/>
+        <param name="input_unitobs" type="data" format="tabular" label="Unitobs informations file" help="Unitobs file, with all informations available about unitobs."/>
+        <param name="varint" type="data_column" data_ref="input_metric" label="Interest variable from metrics file" help= "Choose the field of the interest variable."/>
+    </xml>
+    <xml name="pampa_var_GLM">
+        <param name="varrep" type="select" label="Response variables" help= "Choose the response variables you want to include in your analysis." multiple="true">
+            <option selected="true" value="year">Year</option>
+            <option selected="true" value="site">Site</option>
+            <option selected="true" value="habitat">Habitat</option>
+        </param>
+        <param name="varrand" type="select" label="Random effect ?" help="Allocate a random effect on site or year makes your model more reliable as random events on a peculiar site or year can affect populations, it takes account of pseudoreplication. However, avoid applying it on a less than 10 levels variable (less than 10 different sites and/or year)." multiple="true">
+            <option value="year">Year</option>
+            <option selected="true" value="site">Site</option>
+        </param>
+    </xml>
+    <xml name="pampa_output_GLM">
+        <data name="output_recap" from_work_dir="GLMSummaryFull.txt" format="txt" label="Simple statistics on chosen variables on ${on_string}"/>
+        <data name="output_rate" from_work_dir="RatingGLM.txt" format="txt" label="Your analysis rating file on ${on_string}"/>
+    </xml>
+    <xml name="pampa_bibref">
+        <citations>
+            <citation type="bibtex">
+     @unpublished{pampayves,
+     title={ PAMPA "ressources et biodiversité" scripts },
+            author={Yves Reecht},
+            url={https://wwz.ifremer.fr/pampa/Meth.-Outils/Outils}
+            }
+            </citation>
+        </citations>
+    </xml>
+</macros>
b
diff -r 000000000000 -r 0778efa9eb2e test-data/GLM_table_population_analysis_on_Presence_absence_sansszcl_cropped.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/GLM_table_population_analysis_on_Presence_absence_sansszcl_cropped.tabular Tue Jul 21 06:00:51 2020 -0400
b
@@ -0,0 +1,4 @@
+"species" "AIC" "BIC" "logLik" "deviance" "df.resid" "site Std.Dev" "site NbObservation" "site NbLevels" "(Intercept) Estimate" "(Intercept) Std.Err" "(Intercept) Zvalue" "(Intercept) Pvalue" "(Intercept) signif" "2007 Estimate" "2007 Std.Err" "2007 Zvalue" "2007 Pvalue" "2007 signif" "2008 Estimate" "2008 Std.Err" "2008 Zvalue" "2008 Pvalue" "2008 signif" "2009 Estimate" "2009 Std.Err" "2009 Zvalue" "2009 Pvalue" "2009 signif" "2010 Estimate" "2010 Std.Err" "2010 Zvalue" "2010 Pvalue" "2010 signif" "2012 Estimate" "2012 Std.Err" "2012 Zvalue" "2012 Pvalue" "2012 signif" "2013 Estimate" "2013 Std.Err" "2013 Zvalue" "2013 Pvalue" "2013 signif" "2014 Estimate" "2014 Std.Err" "2014 Zvalue" "2014 Pvalue" "2014 signif" "2015 Estimate" "2015 Std.Err" "2015 Zvalue" "2015 Pvalue" "2015 signif" "2017 Estimate" "2017 Std.Err" "2017 Zvalue" "2017 Pvalue" "2017 signif" "Algueraie Estimate" "Algueraie Std.Err" "Algueraie Zvalue" "Algueraie Pvalue" "Algueraie signif" "Corail vivant Estimate" "Corail vivant Std.Err" "Corail vivant Zvalue" "Corail vivant Pvalue" "Corail vivant signif" "Detritique Estimate" "Detritique Std.Err" "Detritique Zvalue" "Detritique Pvalue" "Detritique signif" "Fond lagonaire Estimate" "Fond lagonaire Std.Err" "Fond lagonaire Zvalue" "Fond lagonaire Pvalue" "Fond lagonaire signif" "Herbier Estimate" "Herbier Std.Err" "Herbier Zvalue" "Herbier Pvalue" "Herbier signif"
+"Abalstel" 465.778668402852 530.012669606292 -217.889334201426 435.778668402852 520 2.02893200110294e-11 535 87 0.582003897784078 0.16995917980052 3.42437459669534 0.000616216168469682 "yes" NA NA NA NA NA -0.19415426356584 0.145972631275553 -1.33007305458058 0.183494202488272 "no" 0.00824541649995591 0.132249306065064 0.0623475218531531 0.950286085093627 "no" -0.0469231466299359 0.127874642775125 -0.366946453273407 0.713658960013819 "no" -0.026333156943764 0.127546916274464 -0.206458593535093 0.83643270551623 "no" 0.0449902599405432 0.123577649181079 0.364064701332996 0.715809694931448 "no" -0.00566671318079257 0.12968331601722 -0.0436965475191898 0.965146291270581 "no" -0.00315955678300799 0.134390106623576 -0.023510337646043 0.981243192515925 "no" -0.0211838550997583 0.134469226544777 -0.157536825666981 0.874821787532576 "no" NA NA NA NA NA -0.584431910188132 0.17913769577747 -3.26247308056328 0.00110444661730468 "yes" -0.555457917136758 0.181703900796363 -3.05693997048123 0.00223609052438647 "yes" -0.533422320342636 0.181778685227503 -2.9344602183421 0.00334128381555499 "yes" 2.60899691274078 0.221452905612334 11.7812719843377 4.87517680861174e-32 "yes"
+"Hemifasc" 989.708308026567 1053.94230923001 -479.854154013284 959.708308026567 520 0.0731913677511507 535 87 0.80188975303788 0.301651463759325 2.65833204667515 0.00785284807116327 "yes" NA NA NA NA NA 0.481141192254312 0.272853104782075 1.76337078018076 0.0778379746547175 "no" 0.491975244697431 0.258717316966712 1.9015937953652 0.0572242797228078 "no" 0.52417509191558 0.257940994484472 2.03215116295574 0.0421383552019658 "yes" 0.704061126955671 0.258153165214832 2.72729999792859 0.00638549547621618 "yes" 0.922884191406201 0.242885260944276 3.79967144905484 0.000144888046528251 "yes" 1.07227573954628 0.268950382217829 3.98689055841469 6.69448864477017e-05 "yes" 1.20570832792662 0.291950452161748 4.12983887847734 3.63017553679052e-05 "yes" 0.952662560597608 0.276776209505792 3.44199583590898 0.000577439138478601 "yes" NA NA NA NA NA -1.4622104258899 0.300994684364961 -4.85792773707906 1.18620683066582e-06 "yes" -1.44397094980884 0.305397744683802 -4.72816507307175 2.26557963478985e-06 "yes" -1.45728966857269 0.302234347092491 -4.82172090165093 1.42324990478013e-06 "yes" -1.34910839377147 0.366744594037812 -3.67860471757186 0.000234513401805964 "yes"
+"Zebrscop" 2937.50168275753 3001.73568396097 -1453.75084137876 2907.50168275753 520 6.86847494946857 535 87 -0.783376806033906 1.96843225335046 -0.397969909658067 0.690652366321943 "no" NA NA NA NA NA -2.46263154439423 1.71419485921636 -1.43661120621959 0.150828497639506 "no" -2.81277062425383 1.65194192826306 -1.70270551048445 0.0886231931264859 "no" -2.24200293533928 1.6471883066992 -1.36110906459264 0.173479225491309 "no" 1.92420443459089 1.66604387989188 1.15495423488832 0.248109168047627 "no" 5.03567066902903 1.4881081746922 3.38394127165561 0.00071453285120286 "yes" 2.56255810319688 1.81706438444276 1.41027369483263 0.158458882708268 "no" 0.73344942166209 1.94553641122863 0.37699084809156 0.706180406176162 "no" 0.419840113473674 1.90401994599711 0.220501951335289 0.825480252830466 "no" NA NA NA NA NA 1.33928270409068 1.87987517063075 0.712431721538894 0.47619747813314 "no" 0.437923054943406 1.89963982379853 0.230529519047318 0.817680328217623 "no" 0.52253919562426 1.87614268249488 0.278517833691301 0.780614877108231 "no" -1.7132623404351 2.24757733331173 -0.762270697004523 0.445898459177794 "no"
b
diff -r 000000000000 -r 0778efa9eb2e test-data/Presence_absence_table_sansszcl_cropped.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/Presence_absence_table_sansszcl_cropped.tabular Tue Jul 21 06:00:51 2020 -0400
b
b'@@ -0,0 +1,2134 @@\n+"point"\t"year"\t"species.code"\t"number"\t"number.max"\t"number.sd"\t"pres.abs"\t"observation.unit"\n+"AB_0008"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080008"\n+"AB_0015"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080015"\n+"AB_0027"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080027"\n+"AB_0031"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080031"\n+"AB_0037"\t"08"\t"Abalstel"\t0\t0\tNA\t0\t"AB080037"\n+"AB_0042"\t"08"\t"Abalstel"\t0\t0\tNA\t0\t"AB080042"\n+"AB_0057"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080057"\n+"AB_0076"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090076"\n+"AB_0081"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090081"\n+"AB_0095"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090095"\n+"AB_0097"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090097"\n+"AB_0098"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090098"\n+"AB_0104"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090104"\n+"AB_0105"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090105"\n+"AB_0106"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090106"\n+"AB_0120"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090120"\n+"AB_0121"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090121"\n+"AB_0122"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090122"\n+"AB_0123"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090123"\n+"AB_0124"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090124"\n+"AB_0125"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090125"\n+"AB_0126"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090126"\n+"AB_0127"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090127"\n+"AB_0132"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090132"\n+"AB_0133"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090133"\n+"AB_0134"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090134"\n+"AB_0135"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090135"\n+"AB_0143"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090143"\n+"AB_0148"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090148"\n+"AB_0149"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090149"\n+"AB_0151"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090151"\n+"AB_0601"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090601"\n+"AB_0602"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090602"\n+"AB_0603"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090603"\n+"AB_0001"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100001"\n+"AB_0002"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100002"\n+"AB_0006"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100006"\n+"AB_0008"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100008"\n+"AB_0009"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100009"\n+"AB_0010"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100010"\n+"AB_0011"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100011"\n+"AB_0015"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100015"\n+"AB_0017"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100017"\n+"AB_0019"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100019"\n+"AB_0020"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100020"\n+"AB_0021"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100021"\n+"AB_0023"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100023"\n+"AB_0024"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100024"\n+"AB_0025"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100025"\n+"AB_0028"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100028"\n+"AB_0029"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100029"\n+"AB_0031"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100031"\n+"AB_0035"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100035"\n+"AB_0036"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100036"\n+"AB_0038"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100038"\n+"AB_0042"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100042"\n+"AB_0046"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100046"\n+"AB_0047"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100047"\n+"AB_0048"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100048"\n+"AB_0049"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100049"\n+"AB_0052"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100052"\n+"AB_0055"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100055"\n+"AB_0060"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100060"\n+"AB_0061"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100061"\n+"AB_0062"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100062"\n+"AB_0072"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100072"\n+"AB_0077"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100077"\n+"AB_0078"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100078"\n+"AB_0079"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100079"\n+"AB_0081"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100081"\n+"AB_0082"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100082"\n+"AB_0085"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100085"\n+"AB_0086"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100086"\n+"AB_0087"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100087"\n+"AB_0088"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100088"\n+"AB_0089"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100089"\n+"AB_0090"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100090"\n+"AB_0091"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100091"\n+"AB_0092"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100092"\n+"AB_0093"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100093"\n+"AB_0094"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100094"\n+"AB_0095"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100095"\n+"AB_0096"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100096"\n+"AB_0097"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100097"\n+"'..b'"PA_0044"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170044"\n+"PA_0050"\t"17"\t"Zebrscop"\t1\t2\t1\t1\t"PA170050"\n+"PA_0051"\t"17"\t"Zebrscop"\t0.5\t1\t0.707106781186548\t1\t"PA170051"\n+"PA_0054"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170054"\n+"PA_0055"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170055"\n+"PA_0056"\t"17"\t"Zebrscop"\t4\t5\t1.73205080756888\t1\t"PA170056"\n+"PA_0057"\t"17"\t"Zebrscop"\t9.66666666666667\t17\t6.35085296108588\t1\t"PA170057"\n+"PA_0058"\t"17"\t"Zebrscop"\t18\t25\t6.08276253029822\t1\t"PA170058"\n+"PA_0059"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170059"\n+"PA_0060"\t"17"\t"Zebrscop"\t5.33333333333333\t8\t2.51661147842358\t1\t"PA170060"\n+"PA_0066"\t"17"\t"Zebrscop"\t2\t2\tNA\t1\t"PA170066"\n+"PA_0068"\t"17"\t"Zebrscop"\t1\t1\t0\t1\t"PA170068"\n+"PA_0074"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170074"\n+"PA_0079"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170079"\n+"PA_0080"\t"17"\t"Zebrscop"\t5.66666666666667\t7\t1.52752523165195\t1\t"PA170080"\n+"PA_0081"\t"17"\t"Zebrscop"\t2.5\t4\t2.12132034355964\t1\t"PA170081"\n+"PA_0083"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170083"\n+"PA_0084"\t"17"\t"Zebrscop"\t2.33333333333333\t3\t1.15470053837925\t1\t"PA170084"\n+"PA_0088"\t"17"\t"Zebrscop"\t1.5\t2\t0.707106781186548\t1\t"PA170088"\n+"PA_0091"\t"17"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"PA170091"\n+"PA_0093"\t"17"\t"Zebrscop"\t1\t1\t0\t1\t"PA170093"\n+"PA_0094"\t"17"\t"Zebrscop"\t3\t3\tNA\t1\t"PA170094"\n+"PA_0100"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170100"\n+"PE_0007"\t"14"\t"Zebrscop"\t1\t1\t0\t1\t"PE140007"\n+"PE_0025"\t"14"\t"Zebrscop"\t0\t0\tNA\t0\t"PE140025"\n+"PE_0029"\t"14"\t"Zebrscop"\t0\t0\tNA\t0\t"PE140029"\n+"PE_0031"\t"14"\t"Zebrscop"\t1\t1\t0\t1\t"PE140031"\n+"PE_0033"\t"14"\t"Zebrscop"\t0\t0\t0\t0\t"PE140033"\n+"PE_0035"\t"14"\t"Zebrscop"\t2.33333333333333\t3\t1.15470053837925\t1\t"PE140035"\n+"PO_0001"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120001"\n+"PO_0004"\t"12"\t"Zebrscop"\t1.5\t2\t0.707106781186548\t1\t"PO120004"\n+"PO_0007"\t"12"\t"Zebrscop"\t2\t3\t1\t1\t"PO120007"\n+"PO_0018"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120018"\n+"PO_0028"\t"12"\t"Zebrscop"\t2\t3\t1.4142135623731\t1\t"PO120028"\n+"PO_0045"\t"12"\t"Zebrscop"\t2.33333333333333\t3\t0.577350269189626\t1\t"PO120045"\n+"PO_0048"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120048"\n+"PO_0053"\t"12"\t"Zebrscop"\t1\t1\t0\t1\t"PO120053"\n+"PO_0066"\t"12"\t"Zebrscop"\t1\t1\t0\t1\t"PO120066"\n+"PO_0092"\t"12"\t"Zebrscop"\t6.16666666666667\t8.5\t2.25462487641145\t1\t"PO120092"\n+"PO_0094"\t"12"\t"Zebrscop"\t1\t1\t0\t1\t"PO120094"\n+"PO_0096"\t"12"\t"Zebrscop"\t2\t3\t1\t1\t"PO120096"\n+"PO_0121"\t"12"\t"Zebrscop"\t5\t6\t1.4142135623731\t1\t"PO120121"\n+"PO_0134"\t"12"\t"Zebrscop"\t0\t0\tNA\t0\t"PO120134"\n+"PO_0136"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120136"\n+"PO_0200"\t"12"\t"Zebrscop"\t2\t2\tNA\t1\t"PO120200"\n+"PO_0203"\t"12"\t"Zebrscop"\t3.6\t4\t0.565685424949238\t1\t"PO120203"\n+"PO_0205"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120205"\n+"PO_0206"\t"12"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"PO120206"\n+"PO_0233"\t"12"\t"Zebrscop"\t2\t2\tNA\t1\t"PO120233"\n+"RD_0219"\t"07"\t"Zebrscop"\t0\t0\t0\t0\t"RD070219"\n+"RD_0230"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"RD070230"\n+"RD_0031"\t"08"\t"Zebrscop"\t0\t0\tNA\t0\t"RD080031"\n+"RD_0103"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090103"\n+"RD_0105"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090105"\n+"RD_0108"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090108"\n+"RD_0109"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090109"\n+"RD_0107"\t"10"\t"Zebrscop"\t0\t0\tNA\t0\t"RD100107"\n+"RL_0250"\t"07"\t"Zebrscop"\t1\t1\tNA\t1\t"RL070250"\n+"RL_0145"\t"08"\t"Zebrscop"\t1\t1\t0\t1\t"RL080145"\n+"RL_0078"\t"09"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"RL090078"\n+"RL_0089"\t"09"\t"Zebrscop"\t2\t2\t0\t1\t"RL090089"\n+"RL_0093"\t"09"\t"Zebrscop"\t1\t1\t0\t1\t"RL090093"\n+"RL_0066"\t"10"\t"Zebrscop"\t1\t1\tNA\t1\t"RL100066"\n+"RL_0076"\t"10"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"RL100076"\n+"RS_0169"\t"07"\t"Zebrscop"\t2.33333333333333\t3\t0.577350269189626\t1\t"RS070169"\n+"RS_0189"\t"07"\t"Zebrscop"\t1\t1\t0\t1\t"RS070189"\n+"SI_0078"\t"07"\t"Zebrscop"\t1\t1\tNA\t1\t"SI070078"\n+"SI_0079"\t"07"\t"Zebrscop"\t8.33333333333333\t12\t4.04145188432738\t1\t"SI070079"\n+"SI_0080"\t"07"\t"Zebrscop"\t2\t3\t1.4142135623731\t1\t"SI070080"\n+"SI_0082"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"SI070082"\n+"SI_0197"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"SI070197"\n+"SI_0222"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"SI070222"\n+"SI_0194"\t"08"\t"Zebrscop"\t0\t0\t0\t0\t"SI080194"\n+"WA_0002"\t"14"\t"Zebrscop"\t1\t1\t0\t1\t"WA140002"\n'
b
diff -r 000000000000 -r 0778efa9eb2e test-data/Simple_statistics_on_Presence_absence_sansszcl_cropped.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/Simple_statistics_on_Presence_absence_sansszcl_cropped.txt Tue Jul 21 06:00:51 2020 -0400
b
b'@@ -0,0 +1,614 @@\n+\n+##################################################\n+Metrics and factors (and possible units/selections):\n+\n+ Metrics: number \n+            aggregated per observation units.\n+\n+Analyses factor(s): \n+ *  year \n+ *  habitat \n+ *  site \n+ *  \n+\n+########################\n+Base statistics:\n+\n+        Min.      1st Qu.       Median         Mean      3rd Qu.         Max. \n+   0.0000000    0.0000000    0.0000000    0.8886154    1.0000000   46.6666667 \n+          sd            N \n+   2.3900000 2133.0000000 \n+\n+#########################################\n+Statistics per combination of factor levels:\n+\n+                                              Min.    1st Qu.    Median\n+2007.Algueraie.Ilot Signal                       0 0.00000000 0.0000000\n+2007.Algueraie.Radiales Signal laregnere         0 0.00000000 0.0000000\n+2007.Corail vivant.Ilot Signal                   0 0.00000000 0.0000000\n+2007.Corail vivant.NA                            0 0.00000000 0.0000000\n+2007.Corail vivant.Recif Senez                   0 0.00000000 0.0000000\n+2007.Detritique.Recif Laregnere                  0 0.00000000 0.0000000\n+2007.Fond lagonaire.Ilot Signal                  0 0.00000000 0.0000000\n+2007.Herbier.Ilot Signal                         0 0.00000000 0.0000000\n+2008.Corail vivant.Abore                         0 0.00000000 0.0000000\n+2008.Corail vivant.Laregnere                     0 0.16666667 0.3333333\n+2008.Corail vivant.NA                            0 0.00000000 0.0000000\n+2008.Detritique.Mbe Kouen                        0 0.00000000 0.0000000\n+2008.Detritique.NA                               0 0.00000000 0.0000000\n+2008.Detritique.Recif Laregnere                  0 0.00000000 0.0000000\n+2008.Fond lagonaire.Abore                        0 0.00000000 0.0000000\n+2008.Fond lagonaire.NA                           0 0.00000000 0.0000000\n+2008.Herbier.Ilot Signal                         0 0.00000000 0.0000000\n+2008.Herbier.Radiales Signal laregnere           0 0.00000000 0.0000000\n+2009.Algueraie.NA                                0 0.00000000 0.0000000\n+2009.Corail vivant.Abore                         0 0.00000000 0.0000000\n+2009.Corail vivant.Mbe Kouen                     0 0.00000000 0.0000000\n+2009.Corail vivant.NA                            0 0.00000000 0.0000000\n+2009.Corail vivant.Recif Laregnere               0 0.00000000 0.0000000\n+2009.Detritique.Mbe Kouen                        0 0.00000000 0.0000000\n+2009.Detritique.NA                               0 0.00000000 0.0000000\n+2009.Detritique.Recif Laregnere                  0 0.00000000 0.0000000\n+2009.Fond lagonaire.Mbe Kouen                    0 0.00000000 0.0000000\n+2009.Fond lagonaire.NA                           0 0.00000000 0.0000000\n+2009.Fond lagonaire.Radiales Signal laregnere    0 0.00000000 0.0000000\n+2009.Herbier.Radiales Signal laregnere           0 0.00000000 0.0000000\n+2010.Corail vivant.Abore                         0 0.00000000 0.0000000\n+2010.Detritique.Abore                            0 0.00000000 0.0000000\n+2010.Detritique.Laregnere                        0 0.00000000 0.0000000\n+2010.Detritique.Mbe Kouen                        0 0.00000000 0.0000000\n+2010.Detritique.Recif Laregnere                  0 0.00000000 0.0000000\n+2010.Fond lagonaire.Abore                        0 0.00000000 0.0000000\n+2010.Fond lagonaire.Laregnere                    0 0.00000000 0.0000000\n+2010.Fond lagonaire.Mbe Kouen                    0 0.00000000 0.0000000\n+2010.Herbier.Radiales Signal laregnere           0 0.00000000 0.0000000\n+2012.Corail vivant.Baie Port Bouquet             0 0.00000000 0.0000000\n+2012.Corail vivant.Cap Goulvain                  0 0.00000000 0.0000000\n+2012.Corail vivant.Deva                          0 0.00000000 0.0000000\n+2012.Corail vivant.Grand recif Ngoe              0 0.00000000 0.0000000\n+2012.Corail vivant.Ilot de sable                 0 0.00000000 0.0000000\n+2012.Corail vivant.Ilots                         0 0.00000000 0.0000000\n+2012.Corail vivant.NA  '..b'ritique.Recif Nogumatiugi              0.5774   3\n+2013.Detritique.Recif Tironhua                 0.5774   3\n+2013.Detritique.Seche Croissant                4.6190   3\n+2013.Fond lagonaire.Bampton nord               0.9623   3\n+2013.Fond lagonaire.Barriere nord-ouest        0.5774   3\n+2013.Fond lagonaire.Corne sud                  0.5774   3\n+2013.Fond lagonaire.Crouy                      4.6190   3\n+2013.Fond lagonaire.Ilot Koko                  0.8367   6\n+2013.Fond lagonaire.Lagon Mba Mbo              4.6190   3\n+2013.Fond lagonaire.Mba                        4.6190   3\n+2013.Fond lagonaire.Mbe Kouen                 18.6700   6\n+2013.Fond lagonaire.Mbo                        4.0410   3\n+2013.Fond lagonaire.NA                         1.4070 147\n+2013.Fond lagonaire.Recif Bellona Sud          0.5774   3\n+2013.Fond lagonaire.Recif Cimenia              1.2880  18\n+2013.Fond lagonaire.Recif Ia                   0.8660   3\n+2013.Fond lagonaire.Recif Ie                   0.5774   3\n+2013.Fond lagonaire.Recif Mbe Kouen            5.7740   3\n+2013.Fond lagonaire.Recif Ndunekunie           1.3470   3\n+2013.Fond lagonaire.Recif Neokouie             1.4050   6\n+2013.Fond lagonaire.Recif Neokumbi             0.9174   6\n+2013.Fond lagonaire.Recif Nogumatiugi          1.0470  15\n+2013.Fond lagonaire.Recif Puakue               0.7698   3\n+2013.Fond lagonaire.Recif Purembi              0.7698   3\n+2013.Fond lagonaire.Recif Senez                4.6190   3\n+2013.Fond lagonaire.Recif Umbei                0.5774   3\n+2013.Fond lagonaire.Seche Croissant            4.6190   3\n+2013.Herbier.Ilot Signal                       4.6190   3\n+2013.Herbier.Laregnere                         4.6190   3\n+2014.Corail vivant.Baie Xepenehe               1.1140  42\n+2014.Corail vivant.Grand Astrolabe             7.8930  12\n+2014.Corail vivant.Jinek                       0.9786  27\n+2014.Corail vivant.Petit Astrolabe             4.8880  33\n+2014.Corail vivant.Petrie                      0.7311  12\n+2014.Corail vivant.Pointe Easo                 0.9290   6\n+2014.Corail vivant.Recif Jinek                 0.5863   6\n+2014.Corail vivant.Walpole                     0.5774   3\n+2014.Detritique.Baie Xepenehe                  1.7530   6\n+2014.Detritique.Grand Astrolabe                1.4430   3\n+2014.Detritique.Hunter                         1.6730   6\n+2014.Detritique.Jinek                          0.6894   9\n+2014.Detritique.Petrie                         0.5164   6\n+2014.Fond lagonaire.Baie Xepenehe              0.7698   3\n+2014.Fond lagonaire.Grand Astrolabe            1.1550   3\n+2014.Fond lagonaire.Jinek                      0.5018   6\n+2015.Corail vivant.Grand Guilbert              0.5000   3\n+2015.Corail vivant.Huon                        1.6960  48\n+2015.Corail vivant.Merite                      0.5774   3\n+2015.Corail vivant.Pelotas                     1.0550  12\n+2015.Corail vivant.Petit Guilbert              0.5774   3\n+2015.Corail vivant.Portail                     0.8941   9\n+2015.Corail vivant.Surprise                    0.5278  21\n+2015.Detritique.Huon                           1.1370   6\n+2015.Detritique.Portail                        0.6646   6\n+2015.Fond lagonaire.Huon                       0.5774   3\n+2015.Fond lagonaire.Portail                    0.5774   3\n+2017.Corail vivant.Grand Astrolabe             1.7660  12\n+2017.Corail vivant.Petit Astrolabe             0.8367   6\n+2017.Corail vivant.Petrie                      1.5490  15\n+2017.Detritique.Grand Astrolabe                3.6290  30\n+2017.Detritique.Petit Astrolabe                0.5751  36\n+2017.Detritique.Petrie                         0.7760  18\n+2017.Fond lagonaire.Grand Astrolabe            0.5774   3\n+2017.Fond lagonaire.Petit Astrolabe            0.8367   6\n+2017.Fond lagonaire.Petrie                     0.8660   3\n+\n+######################################### \n+Fitted model:\n+\tnumber ~ year + habitat + (1 | site)\n+\n+\n+Family :  gaussian \n+Response :  number\n\\ No newline at end of file\n'
b
diff -r 000000000000 -r 0778efa9eb2e test-data/Unitobs.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/Unitobs.tabular Tue Jul 21 06:00:51 2020 -0400
b
b'@@ -0,0 +1,2862 @@\n+"AMP"\t"observation.unit"\t"type"\t"site"\t"station"\t"carac1"\t"carac2"\t"fraction"\t"jour"\t"mois"\t"year"\t"heure"\t"nebulosite"\t"dirVent"\t"forceVent"\t"etatMer"\t"courant"\t"maree"\t"lune"\t"latitude"\t"longitude"\t"statut_protection"\t"avant_apres"\t"biotop1"\t"biotop2"\t"habitat"\t"habitat2"\t"habitat3"\t"visibilite"\t"prof_min"\t"prof_max"\t"DimObs1"\t"DimObs2"\t"nb_observateur"\t"observateur"\n+"AMP"\t"AB080001"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.43877\t166.34874\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t6\t4.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080002"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.43975\t166.35523\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t6\t2.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080003"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t2\t-999\tNA\t"MM"\t"PQ"\t-22.4474\t166.36406\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t8\t2.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080004"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t2\t-999\tNA\t"MM"\t"PQ"\t-22.44773\t166.36715\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Herbier"\t"Recif barriere interne"\t"SG1"\t8\t2.7\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080005"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.45701\t166.37434\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\tNA\t7\t4.1\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080006"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.45893\t166.3782\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t10\t1.8\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080007"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.46091\t166.37847\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t7\t1.6\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080008"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.46931\t166.38774\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Corail vivant"\t"Recif barriere interne"\t"LC3"\t8\t2.3\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080009"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.47137\t166.39462\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t10\t3\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080010"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.47395\t166.39954\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA3"\t7\t3.7\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080011"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.47507\t166.39572\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA3"\t10\t2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080012"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.48081\t166.41733\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Detritique"\t"Recif barriere interne"\t"SA5"\t9\t2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080013"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.48161\t166.41947\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Detritique"\t"Recif barriere interne"\t"D7"\t8\t2.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080014"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"PM"\t"PQ"\t-22.48274\t166.42438\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Detritique"\t"Recif barriere i'..b'\t0\t-999\tNA\t"MD"\t"LM"\t-22.3063035\t166.2917041\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"front recifal"\t"Detritique"\t"Frangeant ilot"\t"D1"\t6\t10.2\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100129"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2955173\t166.2967791\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Detritique"\t"Frangeant ilot"\t"D2"\t6.5\t5.3\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100130"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2947766\t166.2960761\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Detritique"\t"Frangeant ilot"\t"D1"\t7\t5.4\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100131"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2937402\t166.2949608\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Frangeant ilot"\t"SA3"\t7\t4.8\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100132"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t16\t4\t2010\tNA\tNA\tNA\t5\t-999\tNA\t"MD"\t"PC"\t-22.2929916\t166.2928995\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Frangeant ilot"\t"SA4"\t7.5\t3.8\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100133"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2930767\t166.2914348\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Detritique"\t"Frangeant ilot"\t"D2"\t6.5\t3.7\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100136"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.3052715\t166.2907546\t"RE"\t"AP"\t"Ile lagonaire"\t"lagon profond"\t"Detritique"\t"Frangeant ilot"\t"D3"\t6.5\t10.5\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100138"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.3022725\t166.2895628\t"RE"\t"AP"\t"Ile lagonaire"\t"lagon profond"\t"Detritique"\t"Frangeant ilot"\t"D2"\t6\t8\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100151"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2940228\t166.2910229\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Detritique"\t"Frangeant ilot"\t"D6"\t5\t3.5\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100152"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2951626\t166.2903255\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Frangeant ilot"\t"LC3"\t7\t5.4\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100153"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t27\t4\t2010\tNA\tNA\tNA\t2\t-999\tNA\t"MD"\t"LM"\t-22.2960763\t166.2901483\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Detritique"\t"Frangeant ilot"\t"D6"\t7\t3.5\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100154"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t27\t4\t2010\tNA\tNA\tNA\t2\t-999\tNA\t"MD"\t"LM"\t-22.2968722\t166.2895325\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Fond lagonaire"\t"Frangeant ilot"\t"D7"\t6\t4.6\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100155"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2981441\t166.2895349\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Detritique"\t"Frangeant ilot"\t"D6"\t7\t4.1\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"WA140001"\t"SVR"\t"Walpole"\tNA\t"Recif ilot"\tNA\t1\t1\t7\t2014\tNA\tNA\t"SW"\t3\t3\tNA\tNA\t"LM"\t-22.59854\t168.95012\t"HR"\t"AP"\t"Recif frangeant expose a l\\92ocean"\t"front recifal"\t"Corail vivant"\t"Frangeant oceanique"\t"D6"\t10\t10\t-999\t-999\t-999\t-999\t"William Roman"\n+"AMP"\t"WA140002"\t"SVR"\t"Walpole"\tNA\t"Recif ilot"\tNA\t1\t1\t7\t2014\tNA\tNA\t"SW"\t3\t3\tNA\tNA\t"LM"\t-22.60011\t168.94862\t"HR"\t"AP"\t"Recif frangeant expose a l\\92ocean"\t"front recifal"\t"Corail vivant"\t"Frangeant oceanique"\t"LC1"\t10\t15\t-999\t-999\t-999\t-999\t"William Roman"\n+"AMP"\t"WA140003"\t"SVR"\t"Walpole"\tNA\t"Recif ilot"\tNA\t1\t1\t7\t2014\tNA\tNA\t"SW"\t3\t4\tNA\tNA\t"LM"\t-22.60251\t168.94389\t"HR"\t"AP"\t"Recif frangeant expose a l\\92ocean"\t"front recifal"\t"Detritique"\t"Frangeant oceanique"\t"D1"\t10\t23.3\t-999\t-999\t-999\t-999\t"William Roman"\n'