R/app.R

Defines functions simulation_app

Documented in simulation_app

#' Application to visualize results of simulations
#'
#' @param simulation_results Output of the simulations function
#' @param time_results Output of the execution_time function
#'
#' @return shiny app
#'
#' @import shiny
#' @import ggplot2
#'
#' @export
#'

simulation_app <- function(simulation_results, time_results = NULL) {
    simulation_results <- dplyr::mutate(simulation_results,
                                        correlation = paste(cor_type, cor_val,
                                                            ", "),
                                        n_nonzero = as.character(n_nonzero),
                                        signal = as.character(signal))
    time_results <- dplyr::mutate(time_results,
                                  correlation = paste(cor_type, cor_val,
                                                      ", "),
                                  n_nonzero = as.character(n_nonzero),
                                  signal = as.character(signal))
    correlations <- unique(simulation_results[["correlation"]])
    column_numbers <- unique(simulation_results[["n_variables"]])
    observations_numbers <- unique(simulation_results[["n_observations"]])
    signal_strengths <- unique(simulation_results[["signal"]])
    signal_counts <- unique(simulation_results[["n_nonzero"]])
    fdrs <- unique(simulation_results[["FDR"]])
    column_choices <- colnames(time_results)
    column_choices <- column_choices[!(column_choices %in% c("model", "statistic", "value",
                                                             "cor_type", "cor_val"))]

    shinyApp(
        ui = fluidPage(title = "czesc",
                       sidebarLayout(
                           sidebarPanel(id = "HI", label = "HI",
                                        selectInput("groupby", "Group by",
                                                    choices = column_choices,
                                                    selected = column_choices[1]),
                                        checkboxGroupInput("n_obs", "Observations",
                                                           choices = observations_numbers,
                                                           selected = observations_numbers[1]),
                                        checkboxGroupInput("n_var", "Variables",
                                                           choices = column_numbers,
                                                           selected = column_numbers[1]),
                                        checkboxGroupInput("cor", "Correlation",
                                                           choices = correlations,
                                                           selected = correlations[1]),
                                        checkboxGroupInput("nonzero", "Non-zero parameters",
                                                           choices = signal_counts,
                                                           selected = signal_counts[1]),
                                        checkboxGroupInput("signal", "Signal strength",
                                                    choices = signal_strengths,
                                                    selected = signal_strengths[1]),
                                        checkboxGroupInput("fdr", "FDR",
                                                           choices = fdrs,
                                                           selected = fdrs[1])),
                           mainPanel(plotOutput("sim_plot"),
                                     plotOutput("time_plot"))
                       )
        ),
        server = function(input, output) {
            sim <- reactive({
                dplyr::filter(simulation_results,
                              correlation %in% input[["cor"]],
                              FDR %in% input[["fdr"]],
                              n_observations %in% input[["n_obs"]],
                              n_variables %in% input[["n_var"]],
                              signal %in% input[["signal"]],
                              n_nonzero %in% input[["nonzero"]])
            })
            output$sim_plot <- renderPlot(
                ggplot(sim(), aes_string(x = "model", y = "value",
                                         fill = input[["groupby"]])) +
                    geom_boxplot() +
                    facet_wrap(~statistic, scales = "free") +
                    theme_bw()
            )

            time <- reactive({
                dplyr::filter(time_results,
                              correlation %in% input[["cor"]],
                              FDR %in% input[["fdr"]],
                              n_observations %in% input[["n_obs"]],
                              n_variables %in% input[["n_var"]],
                              signal %in% input[["signal"]],
                              n_nonzero %in% input[["nonzero"]])
            })
            output$time_plot <- renderPlot(
                if(is.null(time_results)) {
                    ggplot()
                } else {
                    ggplot(time(), aes_string(x = "model", y = "value",
                                              fill = input[["groupby"]])) +
                        geom_boxplot() +
                        theme_bw()
                }
            )
        }
    )
}
StatsIMUWr/slobeC documentation built on Oct. 31, 2019, 12:03 a.m.