Skip to content
Snippets Groups Projects
ui.R 16.2 KiB
Newer Older
thierrychambert's avatar
thierrychambert committed
rm(list = ls(all.names = TRUE))

thierrychambert's avatar
thierrychambert committed
## Load libraries
thierrychambert's avatar
thierrychambert committed
library(shiny)
library(shinyjs)
library(shinyMatrix)
library(tidyverse)
library(eolpop)

thierrychambert's avatar
thierrychambert committed

## Load species list
Marie-Bocage's avatar
Marie-Bocage committed
species_data <- read.csv("./inst/ShinyApp/species_list.csv", sep = ",")
thierrychambert's avatar
thierrychambert committed
species_list <- unique(as.character(species_data$NomEspece))
thierrychambert's avatar
thierrychambert committed

thierrychambert's avatar
thierrychambert committed
## Load survival and fecundities data
data_sf <- read.csv("./inst/ShinyApp/survivals_fecundities_species.csv", sep = ",")#, encoding = "UTF-8")
thierrychambert's avatar
thierrychambert committed
(data_sf)
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
# Fixed parameters (for now)
nsim = 10
coeff_var_environ = 0.10
time_horzion = 30
theta = 1 # DD parameter theta
Marie-Bocage's avatar
Marie-Bocage committed

#####################
### Pre-fill data ###
#####################

thierrychambert's avatar
thierrychambert committed
## Data elicitation pre-fill data
# fatalities
eli_fatalities <- c(1.0, 2, 5, 8,  0.80,
                    0.2, 0, 3, 6,  0.90,
                    0.2, 2, 4, 10, 0.90,
                    0.1, 1, 3, 7,  0.70)
thierrychambert's avatar
thierrychambert committed

# population size
eli_pop_size <-   c(1.0, 150, 200, 250, 0.80,
                    0.5, 120, 180, 240, 0.90,
                    0.8, 170, 250, 310, 0.90,
                    0.3, 180, 200, 230, 0.70)
thierrychambert's avatar
thierrychambert committed

# carrying capacity
eli_carrying_cap <- c(1.0, 500, 700, 1000, 0.80,
                      0.5, 1000, 1500, 2000, 0.90,
                      0.8, 800, 1200, 1600, 0.90,
                      0.3, 100, 1200, 1500, 0.70)
thierrychambert's avatar
thierrychambert committed

# population growth rate
eli_pop_growth <- c(1 , 0.95, 0.98, 1.00, 0.95,
                    0.2, 0.97, 1.00, 1.01, 0.90,
                    0.5, 0.92, 0.96, 0.99, 0.90,
                    0.3, 0.90, 0.95, 0.98, 0.70)
thierrychambert's avatar
thierrychambert committed

## Other pre-fill data
# fatalities for several wind farms (cumulated impacts)
init_cumul <- c(10, 5, 8,
                0.05, 0.05, 0.05,
                2010, 2015, 2018)

thierrychambert's avatar
thierrychambert committed
init_cumul_add <- c(3, 0.05, 2020)

###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
thierrychambert's avatar
thierrychambert committed

Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed

###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
Marie-Bocage's avatar
Marie-Bocage committed
##--------------------------------------------
##  User Interface                          --
##--------------------------------------------
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
thierrychambert's avatar
thierrychambert committed
ui <- fluidPage(
  useShinyjs(),
  titlePanel("eolpop : Impact demographique des oliennes"),
Marie-Bocage's avatar
Marie-Bocage committed


  # Creation of the first page (select species, analysis type choice)
Marie-Bocage's avatar
Marie-Bocage committed
  wellPanel(

    selectInput(inputId = "species_choice", selected = 1,
thierrychambert's avatar
thierrychambert committed
                h4(strong("Slectionner une espce")),
Marie-Bocage's avatar
Marie-Bocage committed
                choices = species_list),
Marie-Bocage's avatar
Marie-Bocage committed
    radioButtons(inputId = "analysis_choice",
                 h4(strong("Slectionner un type d'analyse")),
                 choices = c("Impacts non cumuls" = "scenario", "Impacts cumuls" = "cumulated"))
Marie-Bocage's avatar
Marie-Bocage committed
  ), # End wellPanel

Marie-Bocage's avatar
Marie-Bocage committed

  ##--------------------------------------------
  ##  General information                     --
  ##--------------------------------------------
Marie-Bocage's avatar
Marie-Bocage committed

  wellPanel(
    h2("Valeurs actuelles"),
Marie-Bocage's avatar
Marie-Bocage committed
    fluidRow(
thierrychambert's avatar
thierrychambert committed
      column(width = 4,
        div( textOutput(outputId = "species_name") ,
             style="color:black; font-size:18px; font-weight: bold", align = "left"),
      )
    ),
thierrychambert's avatar
thierrychambert committed
    fluidRow(
Marie-Bocage's avatar
Marie-Bocage committed
      column(width = 4,
Marie-Bocage's avatar
Marie-Bocage committed
             textOutput(outputId = "fatalities_mean_info"),
             textOutput(outputId = "fatalities_se_info"),
             h3("Taille de la population"),
Marie-Bocage's avatar
Marie-Bocage committed
             textOutput(outputId = "pop_size_type_info"),
Marie-Bocage's avatar
Marie-Bocage committed
             textOutput(outputId = "pop_size_mean_info"),
Marie-Bocage's avatar
Marie-Bocage committed
             textOutput(outputId = "pop_size_se_info")),
Marie-Bocage's avatar
Marie-Bocage committed
        column(width = 4,
               h3("Capacit de charge"),
Marie-Bocage's avatar
Marie-Bocage committed
               textOutput(outputId = "carrying_capacity_info"),
               h3("Tendance de la population"),
Marie-Bocage's avatar
Marie-Bocage committed
               textOutput(outputId = "pop_trend_type_info"),
Marie-Bocage's avatar
Marie-Bocage committed
               textOutput(outputId = "pop_growth_mean_info"),
               textOutput(outputId = "pop_growth_se_info")),
Marie-Bocage's avatar
Marie-Bocage committed
          column(width = 4,
                 h3("Paramtres dmographiques"),
Marie-Bocage's avatar
Marie-Bocage committed
                 tableOutput(outputId = "vital_rates_info"))

    ) # # End wellPanel
  ), # End fluidRow
  ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
  ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
  ##--------------------------------------------
  ##  Paramter Inputs                         --
  ##--------------------------------------------
thierrychambert's avatar
thierrychambert committed
  sidebarLayout(
    sidebarPanel(

      h2("Modifier les paramtres"),

      br(" "),
Marie-Bocage's avatar
Marie-Bocage committed
      ##--------------------------------------------
      ##  1. Fatalities                           --
      ##--------------------------------------------
      tags$style(HTML('#button_fatalities{background-color:#C2C8D3}')),
Marie-Bocage's avatar
Marie-Bocage committed
      actionButton(inputId = "button_fatalities",
                   label = tags$span("Mortalits annuelles", style = "font-weight: bold; font-size: 18px;")
      ),

Marie-Bocage's avatar
Marie-Bocage committed
      radioButtons(inputId = "fatal_constant",
                   label = h4("Modlisation"),
                   choices = c("Taux de mortalits (h) constant" = "h",
                               "Nombre de mortalits (M) constant" = "M")),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      ### Part for non-cumulated impacts
      # Input type
Marie-Bocage's avatar
Marie-Bocage committed
      radioButtons(inputId = "fatalities_input_type",
                   label = h4("Type de saisie"),
thierrychambert's avatar
thierrychambert committed
                   choices = c("Valeurs" = "val", "Elicitation d'expert" = "eli_exp")),
Marie-Bocage's avatar
Marie-Bocage committed

      # Values
Marie-Bocage's avatar
Marie-Bocage committed
      numericInput(inputId = "fatalities_mean",
                   label = "Moyenne des mortalits annuelles",
Marie-Bocage's avatar
Marie-Bocage committed
                   value = 5,
Marie-Bocage's avatar
Marie-Bocage committed
                   min = 0, max = Inf, step = 0.5),
Marie-Bocage's avatar
Marie-Bocage committed
      numericInput(inputId = "fatalities_se",
                   label = "Erreur-type des mortalits annuelles",
Marie-Bocage's avatar
Marie-Bocage committed
                   value = 0.05,
Marie-Bocage's avatar
Marie-Bocage committed
                   min = 0, max = Inf, step = 0.1),

      # Matrix for expert elicitation
Marie-Bocage's avatar
Marie-Bocage committed
      matrixInput(inputId = "fatalities_mat_expert",
thierrychambert's avatar
thierrychambert committed
                  value = matrix(data = eli_fatalities, nrow = 4, ncol = 5,
thierrychambert's avatar
thierrychambert committed
                                 dimnames = list(c("#1", "#2", "#3", "#4"),
                                                 c("Poids", "Min", "Best", "Max", "% IC" )),
thierrychambert's avatar
thierrychambert committed
                                 byrow = TRUE),
Marie-Bocage's avatar
Marie-Bocage committed
                  class = "numeric",
                  rows = list(names = TRUE),
                  cols = list(names = TRUE)),

thierrychambert's avatar
thierrychambert committed
      actionButton(inputId = "fatalities_run_expert", label = "Utiliser valeurs experts"),
Marie-Bocage's avatar
Marie-Bocage committed

      ### Part for cumulated impacts
Marie-Bocage's avatar
Marie-Bocage committed

      numericInput(inputId = "farm_number_cumulated",
                   label = "Nombre de parcs oliens",
Marie-Bocage's avatar
Marie-Bocage committed
                   value = 3, min = 2, max = Inf, step = 1),

Marie-Bocage's avatar
Marie-Bocage committed
      matrixInput(inputId = "fatalities_mat_cumulated",
thierrychambert's avatar
thierrychambert committed
                  value = matrix(init_cumul, 3, 3,
                                 dimnames = list(c(paste0("Parc n", c(1:3))),
thierrychambert's avatar
thierrychambert committed
                                                 c("Moyenne",
                                                   "Anne de mise en service du parc"))),
Marie-Bocage's avatar
Marie-Bocage committed
                  class = "numeric",
                  rows = list(names = TRUE),
                  cols = list(names = TRUE)),

      ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      ##--------------------------------------------
      ##  2. Population Size                      --
      ##--------------------------------------------
      tags$style(HTML('#button_pop_size{background-color:#C2C8D3}')),
Marie-Bocage's avatar
Marie-Bocage committed
      actionButton(inputId = "button_pop_size",
                   label = tags$span("Taille de la population", style = "font-weight: bold; font-size: 18px;")
      ),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      radioButtons(inputId = "pop_size_type",
                   label = h4("Unit"),
thierrychambert's avatar
thierrychambert committed
                   choices = c("Nombre de couple" = "Npair", "Effectif total" = "Ntotal"),
                   selected = "Ntotal"),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      radioButtons(inputId = "pop_size_input_type",
                   label = h4("Type de saisie"),
thierrychambert's avatar
thierrychambert committed
                   choices = c("Valeurs" = "val", "Elicitation d'expert" = "eli_exp")),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      numericInput(inputId = "pop_size_mean",
                   label = "Moyenne de la taille de la population",
                   value = 200,
Marie-Bocage's avatar
Marie-Bocage committed
                   min = 0, max = Inf, step = 50),

Marie-Bocage's avatar
Marie-Bocage committed
      numericInput(inputId = "pop_size_se",
                   label = "Erreur-type de la taille de la population",
Marie-Bocage's avatar
Marie-Bocage committed
                   value = 25,
                   min = 0, max = Inf, step = 1),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      matrixInput(inputId = "pop_size_mat_expert",
thierrychambert's avatar
thierrychambert committed
                  value = matrix(data = eli_pop_size, nrow = 4, ncol = 5,
Marie-Bocage's avatar
Marie-Bocage committed
                                 dimnames = list(c("#1", "#2", "#3", "#4"),
                                                 c("Poids", "Min", "Best", "Max", "% IC" )),
Marie-Bocage's avatar
Marie-Bocage committed
                                 byrow = TRUE),
Marie-Bocage's avatar
Marie-Bocage committed
                  class = "numeric",
                  rows = list(names = TRUE),
                  cols = list(names = TRUE)),

thierrychambert's avatar
thierrychambert committed
      actionButton(inputId = "pop_size_run_expert", label = "Utiliser valeurs experts"),
      ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      ##--------------------------------------------
      ##  3. Population Growth                    --
Marie-Bocage's avatar
Marie-Bocage committed
      ##--------------------------------------------
      tags$style(HTML('#button_pop_trend{background-color:#C2C8D3}')),
Marie-Bocage's avatar
Marie-Bocage committed
      actionButton(inputId = "button_pop_trend",
                   label = tags$span("Tendance de la population", style = "font-weight: bold; font-size: 18px;")
                   ),
Marie-Bocage's avatar
Marie-Bocage committed

      radioButtons(inputId = "pop_growth_input_type",
                   label = h4("Type de saisie"),
thierrychambert's avatar
thierrychambert committed
                   choices = c("Taux de croissance" = "val",
                               "Elicitation d'expert" = "eli_exp",
                               "Tendance locale ou rgionale" = "trend")),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      numericInput(inputId = "pop_growth_mean",
                   label = "Moyenne de la croissance de la population",
thierrychambert's avatar
thierrychambert committed
                   value = 1.1,
Marie-Bocage's avatar
Marie-Bocage committed
                   min = 0, max = Inf, step = 0.01),

Marie-Bocage's avatar
Marie-Bocage committed
      numericInput(inputId = "pop_growth_se",
                   label = "Erreur-type de la croissance de la population",
                   value = 0.01,
Marie-Bocage's avatar
Marie-Bocage committed
                   min = 0, max = Inf, step = 0.01),

Marie-Bocage's avatar
Marie-Bocage committed
      matrixInput(inputId = "pop_growth_mat_expert",
thierrychambert's avatar
thierrychambert committed
                  value = matrix(data = eli_pop_growth, nrow = 4, ncol = 5,
thierrychambert's avatar
thierrychambert committed
                                 dimnames = list(c("#1", "#2", "#3", "#4"),
                                                 c("Poids", "Min", "Best", "Max", "% IC" )),
thierrychambert's avatar
thierrychambert committed
                                 byrow = TRUE),
Marie-Bocage's avatar
Marie-Bocage committed
                  class = "numeric",
                  rows = list(names = TRUE),
                  cols = list(names = TRUE)),
Marie-Bocage's avatar
Marie-Bocage committed

thierrychambert's avatar
thierrychambert committed
      actionButton(inputId = "pop_growth_run_expert", label = "Utiliser valeurs experts"),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      radioButtons(inputId = "pop_trend",
Marie-Bocage's avatar
Marie-Bocage committed
                   label = NULL,
                   choices = c("Croissance", "Stable", "Dclin")),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      radioButtons(inputId = "pop_trend_strength",
                   label = NULL,
                   choices = c("Faible", "Moyen", "Fort")),


      ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###


      hr(),
      ##--------------------------------------------
      ##  4. Carrying capacity                    --
      ##--------------------------------------------
      tags$style(HTML('#button_carrying_cap{background-color:#C2C8D3}')),
      actionButton(inputId = "button_carrying_cap",
                   label = tags$span("Capacit de charge", style = "font-weight: bold; font-size: 18px;")
      ),

      radioButtons(inputId = "carrying_cap_input_type",
                   label = h4("Type de saisie"),
thierrychambert's avatar
thierrychambert committed
                   choices = c("Valeurs" = "val", "Elicitation d'expert" = "eli_exp")),

      numericInput(inputId = "carrying_capacity",
                   label = "Capacit de charge",
thierrychambert's avatar
thierrychambert committed
                   value = 500,
                   min = 0, max = Inf, step = 100),

      matrixInput(inputId = "carrying_cap_mat_expert",
                  value = matrix(data = eli_carrying_cap, nrow = 4, ncol = 5,
                                 dimnames = list(c("#1", "#2", "#3", "#4"),
                                                 c("Poids", "Min", "Best", "Max", "% IC" )),
                                 byrow = TRUE),
                  class = "numeric",
                  rows = list(names = TRUE),
                  cols = list(names = TRUE)),

      actionButton(inputId = "carrying_cap_run_expert", label = "Utiliser valeurs experts"),

      ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      ##--------------------------------------------
      ##  5. Vital rates                         --
      ##--------------------------------------------
      tags$style(HTML('#button_vital_rates{background-color:#C2C8D3}')),
Marie-Bocage's avatar
Marie-Bocage committed
      actionButton(inputId = "button_vital_rates",
                   label = tags$span("Paramtres dmographiques", style = "font-weight: bold; font-size: 18px;")
      ),
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
      matrixInput(inputId = "mat_fill_vr",
thierrychambert's avatar
thierrychambert committed
                  value = matrix(data = NA, 3, 2,
                                 dimnames = list(c("Juv 1", "Juv 2", "Adulte"), c("Survie", "Fcondit"))),
Marie-Bocage's avatar
Marie-Bocage committed
                  class = "numeric",
                  rows = list(names = TRUE),
                  cols = list(names = TRUE))
Marie-Bocage's avatar
Marie-Bocage committed

Marie-Bocage's avatar
Marie-Bocage committed
    ), # End sidebarPanel

Marie-Bocage's avatar
Marie-Bocage committed

    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Marie-Bocage's avatar
Marie-Bocage committed

    # Creation of outputs parts

thierrychambert's avatar
thierrychambert committed
    mainPanel(
      tabsetPanel(
        tabPanel(title = "Distribution paramtres",
                 br(),
                 hr(),

                 h3("Mortalits annuelles", align = "center"),
                 plotOutput(outputId = "fatalities_distri_plot"),
                 br(""),
                 hr(),

                 h3("Taille de la population", align = "center"),
                 plotOutput(outputId = "pop_size_distri_plot"),
                 br(""),
                 hr(),

                 h3("Taux de croissance de la population", align = "center"),
                 plotOutput(outputId = "pop_growth_distri_plot"),
                 br(""),
                 hr(),

                 h3("Capacit de charge: Elicitation d'expert", align = "center"),
                 plotOutput(outputId = "carrying_cap_distri_plot"),

        ), # End tabPanel


thierrychambert's avatar
thierrychambert committed
        tabPanel(title = "Impact population",
                 strong(span(textOutput("message"), style="color:blue; font-size:24px", align = "center")),
Marie-Bocage's avatar
Marie-Bocage committed
                 br(),
Marie-Bocage's avatar
Marie-Bocage committed
                 numericInput(inputId = "nsim", label = "Nombre de simulations",
                              value = 50, min = 0, max = Inf, step = 10),
                 br(),
thierrychambert's avatar
thierrychambert committed
                 actionButton(inputId = "run", label = "Lancer l'analyse"),
                 hr(),
                 h4("Graphique : Impact relatif de chaque scnario", align = "center"),
Marie-Bocage's avatar
Marie-Bocage committed
                 plotOutput("graph_impact", width = "100%", height = "550px"),
                 hr(),
                 h4("Graphique : Trajectoire dmographique", align = "center"),
                 plotOutput("graph_traj", width = "100%", height = "550px")
        ), # End tabPanel
Marie-Bocage's avatar
Marie-Bocage committed
        tabPanel(title = "Rapport",
                 br(),
                 radioButtons(inputId = "lifestyle",
                              h4("Mode de vie de l'espce"),
                              choices = c("Sdentaire", "Non-sdentaire nicheur", "Non-sdentaire hivernant", "Migrateur de passage")),
Marie-Bocage's avatar
Marie-Bocage committed
                 numericInput(inputId = "wind_turbines",
                              h4("Nombre d'oliennes"),
Marie-Bocage's avatar
Marie-Bocage committed
                              value = 5, min = 0, max = Inf, step = 1),
                 numericInput(inputId = "farm_number",
                              h4("Nombre de parcs"),
                              value = 1, min = 0, max = Inf, step = 1),
                 numericInput(inputId = "wind_turbines_2",
                              h4("Nombre d'oliennes"),
Marie-Bocage's avatar
Marie-Bocage committed
                              value = 1, min = 0, max = Inf, step = 1)
thierrychambert's avatar
thierrychambert committed

Marie-Bocage's avatar
Marie-Bocage committed
        ) # End tabPanel
Marie-Bocage's avatar
Marie-Bocage committed
      ) # End tabSetPanel
    ) # End mainPanel
thierrychambert's avatar
thierrychambert committed
  ) # sidebarLayout
Marie-Bocage's avatar
Marie-Bocage committed
) # FluidPage

# End UI