Skip to content
Snippets Groups Projects
ui.R 12.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • thierrychambert's avatar
    thierrychambert committed
    rm(list = ls(all.names = TRUE))
    
    library(shiny)
    library(shinyjs)
    library(shinyMatrix)
    library(tidyverse)
    
    library(eolpop)
    
    # source("./inst/ShinyApp/f_output.R")
    source("./inst/ShinyApp/param_fixes.R")
    
    
    Marie-Bocage's avatar
    Marie-Bocage committed
    species_data <- read.csv("./inst/ShinyApp/species_list.csv", sep = ",")
    
    species_list <- unique(as.character(species_data$NomEspece))
    
    Marie-Bocage's avatar
    Marie-Bocage committed
    # Data elicitation, fatalities for cumulated impacts, vital rates and DD_params
    
    data_eli = c("",1, 50, 70, 100, 0.80, "", 0.2, 200, 240, 280, 0.90, "", 0.2, 100, 180, 300, 0.90,"",  0.1, 120, 160, 220, 0.70)
    data_fatalities = c(5, 10, 15, 0.05, 0.05, 0.05, 2010, 2013, 2016)
    data_vr = c(0.5, 0.7, 0.8, 0.95, 0, 0, 0.05, 0.55)
    
    rMax  = NULL
    theta = 1
    DD_params = list(rMax = rMax, K = NULL, theta = theta)
    
    # UI
    
    
    thierrychambert's avatar
    thierrychambert committed
    ui <- fluidPage(
      useShinyjs(),
    
    Marie-Bocage's avatar
    Marie-Bocage committed
      titlePanel("eolpop_2 : Impact demographique des éoliennes"),
    
      # Creation of the first page (select species, analysis type choice)
    
      wellPanel(
        selectInput(inputId = "species_list",
                    h4(strong("Sélection d'une espèce ou groupe d'espèces")),
                    choices = species_list),
        radioButtons(inputId = "analysis_choice",
                     h4(strong("Sélectionner un type d'analyse")),
                     choices = c("Impacts non cumulés" = "scenario", "Impacts cumulés" = "cumulated"))
      ), # End wellPanel
    
      # Info
    
      wellPanel(
        fluidRow(
          column(width = 6,
                 textOutput(outputId = "specie_name"),
                 h4("#Partie Mortalités"),
                 textOutput(outputId = "fatalities_mean_info"),
                 textOutput(outputId = "fatalities_se_info"),
                 textOutput(outputId = "fatalities_expert_info"),
                 h4("#Partie Taille de la population"),
                 textOutput(outputId = "pop_size_mean_info"),
                 textOutput(outputId = "pop_size_se_info"),
                 textOutput(outputId = "pop_size_expert_info")),
          fluidRow(
            column(width = 6,
                   h4("#Partie Capacité de charge"),
                   textOutput(outputId = "carrying_cap_mean_info"),
                   textOutput(outputId = "carrying_cap_se_info"),
                   textOutput(outputId = "carrying_cap_expert_info"),
                   h4("#Partie Tendance de la population"),
                   textOutput(outputId = "pop_trend_type_info"),
                   textOutput(outputId = "pop_trend_mean_info"),
                   textOutput(outputId = "pop_trend_se_info"),
                   textOutput(outputId = "pop_trend_expert_info"))
          )
        )
      ), # End wellPanel
    
    
      # Creation of units (fatalities, pop size, carrying capacity, pop trend and vital rates).
    
    
    thierrychambert's avatar
    thierrychambert committed
      sidebarLayout(
        sidebarPanel(
    
    
    Marie-Bocage's avatar
    Marie-Bocage committed
          # First part : Fatalities
    
          actionButton(inputId = "button_fatalities",
                       label = "Mortalités"),
          radioButtons(inputId = "fatal_constant",
                       label = h4("Modélisation"),
                       choices = c("Taux de mortalités (h) constant" = "h",
                                   "Nombre de mortalités (M) constant" = "M")),
    
          # Part for none cumulated impacts
    
          radioButtons(inputId = "fatalities_input_type",
                       label = h4("Source des données"),
                       choices = c("Valeurs", "Elicitation d'expert")),
          numericInput(inputId = "fatalities_mean",
                       label = "Moyenne des mortalités annuelles",
                       value = 5,
                       min = 0, max = Inf, step = 1),
          numericInput(inputId = "fatalities_se",
                       label = "Ecart-type des mortalités annuelles",
                       value = 0.05,
                       min = 0, max = Inf, step = 1),
          matrixInput(inputId = "fatalities_mat_expert",
                      value = matrix(data = data_eli, 4, 6, dimnames = list(c("#1", "#2", "#3", "#4"), c("Nom", "Poids", "Min", "Meilleure Estimation", "Max", "IC (coverage)" )), byrow = TRUE),
                      class = "numeric",
                      rows = list(names = TRUE),
                      cols = list(names = TRUE)),
    
          # Part for cumulated impacts
    
          numericInput(inputId = "farm_number_cumulated",
                       label = "Nombre de parcs éoliens",
                       value = 2, min = 2, max = Inf, step = 1),
          matrixInput(inputId = "fatalities_mat_cumulated",
                      value = matrix(data = data_fatalities, 3, 3, dimnames = list(c("#1", "#2", "#3"), c("Moyennes des mortalités annuelles",
                                                                                                          "Ecart-type des mortalités annuelles",
                                                                                                          "Année de mise en service du parc"))),
                      class = "numeric",
                      rows = list(names = TRUE),
                      cols = list(names = TRUE)),
    
          # Second part : Pop size
    
          br(),
          actionButton(inputId = "button_pop_size",
                       label = "Taille de la population"),
          radioButtons(inputId = "pop_size_type",
                       label = h4("Unité"),
                       choices = c("Nombre de couple" = "Npair", "Effectif total" = "Ntotal")),
          radioButtons(inputId = "pop_size_input_type",
                       label = h4("Type de saisie"),
                       choices = c("Valeurs", "Elicitation d'expert")),
          numericInput(inputId = "pop_size_mean",
                       label = "Moyenne de la taille de la population",
                       value = 200,
                       min = 0, max = Inf, step = 100),
          numericInput(inputId = "pop_size_se",
                       label = "Ecart-type de la taille de la population",
                       value = 25,
                       min = 0, max = Inf, step = 1),
          matrixInput(inputId = "pop_size_mat_expert",
                      value = matrix(data = data_eli, 4, 6, dimnames = list(c("#1", "#2", "#3", "#4"), c("Nom", "Poids", "Min", "Meilleure Estimation", "Max", "IC (coverage)" )), byrow = TRUE),
                      class = "numeric",
                      rows = list(names = TRUE),
                      cols = list(names = TRUE)),
    
          # Third part : Carrying capacity
    
          br(),
          actionButton(inputId = "button_carrying_cap",
                       label = "Capacité de charge"),
          radioButtons(inputId = "carrying_cap_input_type",
                       label = h4("Type d'unité"),
                       choices = c("Valeurs", "Elicitation d'expert")),
          numericInput(inputId = "carrying_cap_mean",
                       label = "Moyenne de la capacité de charge",
                       value = 500,
                       min = 0, max = Inf, step = 1),
          numericInput(inputId = "carrying_cap_se",
                       label = "Ecart-type de la capacité de charge",
                       value = 1,
                       min = 0, max = Inf, step = 1),
          matrixInput(inputId = "carrying_cap_mat_expert",
                      value = matrix("", 4, 6, dimnames = list(c("#1", "#2", "#3", "#4"), c("Nom", "Poids", "Min", "Meilleure Estimation", "Max", "IC (coverage)" ))),
                      class = "numeric",
                      rows = list(names = TRUE),
                      cols = list(names = TRUE)),
    
          # Fourth part : Pop trend
    
          br(),
          actionButton(inputId = "button_pop_trend",
                       label = "Tendance de la population"),
          radioButtons(inputId = "lambda_input_type",
                       label = h4("Type de tendance"),
                       choices = c("Taux de croissance", "Elicitation d'expert", "Tendance locale ou régionale")),
          numericInput(inputId = "pop_growth_mean",
                       label = "Moyenne de la croissance de la population",
                       value = 1,
                       min = 0, max = Inf, step = 1),
          numericInput(inputId = "pop_growth_se",
                       label = "Ecart-type de la croissance de la population",
                       value = 0.03,
                       min = 0, max = Inf, step = 1),
          matrixInput(inputId = "pop_growth_mat_expert",
                      value = matrix("", 4, 6, dimnames = list(c("#1", "#2", "#3", "#4"), c("Nom", "Poids", "Min", "Meilleure Estimation", "Max", "IC (coverage)" ))),
                      class = "numeric",
                      rows = list(names = TRUE),
                      cols = list(names = TRUE)),
          radioButtons(inputId = "pop_trend",
                       label = h4("Tendance de la population"),
                       choices = c("Croissance", "Stable", "Déclin")),
          radioButtons(inputId = "pop_trend_strength",
                       label = NULL,
                       choices = c("Faible", "Moyen", "Fort")),
    
          # Fifth part : Vital rates
    
          br(),
          actionButton(inputId = "button_vital_rates",
                       label = "Paramètres démographiques"),
          radioButtons(inputId = "fill_type_vr",
                       label = "Type de saisie",
                       choices = c("Automatique", "Manuelle")),
          matrixInput(inputId = "mat_display_vr",
                      value = matrix("", 4, 2, dimnames = list(c("Juv 1", "Juv 2", "Juv 3", "Adulte"), c("Survie", "Fécondité"))),
                      class = "numeric",
                      rows = list(names = TRUE),
                      cols = list(names = TRUE)),
          matrixInput(inputId = "mat_fill_vr",
                      value = matrix(data = data_vr, 4, 2, dimnames = list(c("Juv 1", "Juv 2", "Juv 3", "Adulte"), c("Survie", "Fécondité"))),
                      class = "numeric",
                      rows = list(names = TRUE),
                      cols = list(names = TRUE))
        ), # End sidebarPanel
    
        # End of units
    
        # Creation of outputs parts
    
    
    thierrychambert's avatar
    thierrychambert committed
        mainPanel(
          tabsetPanel(
            tabPanel(title = "Impact population",
                     strong(span(textOutput("message"), style="color:blue; font-size:24px", align = "center")),
    
    Marie-Bocage's avatar
    Marie-Bocage committed
                     br(),
    
    thierrychambert's avatar
    thierrychambert committed
                     actionButton(inputId = "run", label = "Lancer l'analyse"),
                     hr(),
    
    Marie-Bocage's avatar
    Marie-Bocage committed
                     h4("Graphique : Impact relatif de chaque scénario", align = "center"),
                     plotOutput("graph_impact", width = "100%", height = "550px"),
                     hr(),
                     h4("Graphique : Trajectoire démographique", align = "center"),
                     plotOutput("graph_traj", width = "100%", height = "550px")),
    
    thierrychambert's avatar
    thierrychambert committed
    
    
    Marie-Bocage's avatar
    Marie-Bocage committed
            tabPanel(title = "Distribution paramètres",
                     br(),
                     actionButton(inputId = "run_expert", label = "Analyse"),
                     br(),
                     hr(),
                     h4("#Graphe élicitation d'expert pour les mortalités", align = "center"),
                     textOutput(outputId = "fatalities_expert_mean"),
                     textOutput(outputId = "fatalities_expert_sqrt_var"),
                     plotOutput(outputId = "fatalities_expert_plot"),
                     hr(),
                     h4("#Graphe élicitation d'expert pour la taille de la population", align = "center"),
                     textOutput(outputId = "pop_size_expert_mean"),
                     textOutput(outputId = "pop_size_expert_sqrt_var"),
                     plotOutput(outputId = "pop_size_expert_plot"),
                     hr(),
                     h4("#Graphe élicitation d'expert pour la capacité de charge", align = "center"),
                     textOutput(outputId = "carrying_cap_expert_mean"),
                     textOutput(outputId = "carrying_cap_expert_sqrt_var"),
                     plotOutput(outputId = "carrying_cap_expert_plot"),
                     hr(),
                     h4("#Graphe élicitation d'expert pour la tendance de la population", align = "center"),
                     textOutput(outputId = "pop_growth_expert_mean"),
                     textOutput(outputId = "pop_growth_expert_sqrt_var"),
                     plotOutput(outputId = "pop_growth_expert_plot"),
            ),
    
    thierrychambert's avatar
    thierrychambert committed
    
    
    Marie-Bocage's avatar
    Marie-Bocage committed
            tabPanel(title = "Rapport",
                     br(),
                     radioButtons(inputId = "lifestyle",
                                  h4("Mode de vie de l'espèce"),
                                  choices = c("Sédentaire", "Non-sédentaire nicheur", "Non-sédentaire hivernant", "Migrateur de passage")),
                     numericInput(inputId = "wind_turbines",
                                  h4("Nombre d'éoliennes"),
                                  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"),
                                  value = 1, min = 0, max = Inf, step = 1)
    
    thierrychambert's avatar
    thierrychambert committed
    
    
    Marie-Bocage's avatar
    Marie-Bocage committed
            ) # End tabPanel
          ) # End tabSetPanel
        ) # End mainPanel
    
    thierrychambert's avatar
    thierrychambert committed
      ) # sidebarLayout
    
    Marie-Bocage's avatar
    Marie-Bocage committed
    ) # FluidPage
    
    # End UI
    
    thierrychambert's avatar
    thierrychambert committed
    
    # shinyApp(ui = ui, server = server)