From 88aaf56729fad78ce59280388ae40a24217df8b8 Mon Sep 17 00:00:00 2001 From: Tanushree Tunstall Date: Sun, 4 Sep 2022 21:35:08 +0100 Subject: [PATCH] thing --- ml/global.R | 286 ++++++++++++++++++++++++++++++++-------------------- ml/server.R | 96 ++++++++++++------ ml/ui.R | 12 +-- 3 files changed, 250 insertions(+), 144 deletions(-) diff --git a/ml/global.R b/ml/global.R index 978d644..ba92a9d 100644 --- a/ml/global.R +++ b/ml/global.R @@ -40,6 +40,12 @@ split_file = c( "_none_complete" ) +split_file_FS = c( + "_70_30_complete", + "_80_20_complete", + "_sl_complete" +) + # necessary because the names will be wrong otherwise split_map = data.frame( files=c( @@ -82,6 +88,23 @@ for (x in gene) { try({loaded_files[[load_name]] = read.csv(filename)}) } } +# Loader for per-gene Feature Selection CSVs +for (x in gene) { + #x=tolower(x) + for (split in split_file_FS){ + filedata = paste0(x, split) + filename = paste0(data_dir,'LSHTM_ML/output/genes/',x,split,'_FS.csv') + + #print(c(filename)) + #load_name=paste0(combo[gene==x,"drug"],'_',split_map['splits'][split_map['files']==split]) + load_name=paste0(x,'_baselineC_',split_map['splits'][split_map['files']==split], '_FS') + print(load_name) + # try() on its own is fine here because we don't need to do anything if it fails + try({loaded_files[[load_name]] = read.csv(filename)}) + } +} + + # Funky loader for combined data for (x in gene) { for (ac in c('_actual','_complete', '_FS')){ @@ -104,7 +127,9 @@ for (x in gene) { scores=c("F1", "ROC_AUC", "JCC", "MCC", "Accuracy", "Recall", "Precision") -resample_types <<- unique(thing$resampling) +#resample_types <<- unique(thing$resampling) +resample_types = c("none", "Random Oversampling", "Over+Under", "Random Undersampling", "SMOTE") + makeplot = function(x, # the DataFrame to plot selection, # scoring method e.g. 'MCC' @@ -152,21 +177,24 @@ makeplot = function(x, # the DataFrame to plot ) ) } - ggplot(data=plot_data, aes_string(x="Model_name", - y=selection, - fill="source_data", - group=selection) ) + - geom_bar(stat="identity" - , width = 0.75 - , position=position_dodge2(padding=0.1, preserve='total', reverse=TRUE) + ggplot( + data=plot_data, aes_string( + x="Model_name", + y=selection, + fill="source_data" #, + #group=selection + ) + ) + + geom_bar( + stat="identity" + , width = 0.75 + , position=position_dodge2(padding=0.1, preserve='total', reverse=TRUE) ) + coord_cartesian(ylim = c(y_coord_min, 1)) + annotation_custom(grob) + - # doesn't work with plotly but looks nice :-( geom_label(aes_string(label=selection), position=position_dodge(width = -0.75), - #position=position_dodge2(padding=0.1), - vjust = 1.5, + #vjust = 1.5, alpha=0.75, fill="white" @@ -174,107 +202,15 @@ makeplot = function(x, # the DataFrame to plot scale_color_manual(values = colour_range) + scale_fill_manual(values = colour_range) + - + # add little numbers for the BT bars only labs(x="",y=paste(selection,"Score")) + theme( axis.text.x = element_text(angle = 90), ) - # ggplotly() } if (interactive()){ - server=shinyServer(function(input, output) { - observeEvent({ - input$combined_model - input$combined_data - input$combined_training_genes - input$score_dropdown - input$resample_dropdown - input$drug_dropdown - input$split_dropdown - - },{ - combined_model = input$combined_model - selection = input$score_dropdown - resampler = input$resample_dropdown - selected_drug = input$drug_dropdown - selected_split = input$split_dropdown - combined_data = input$combined_data - combined_training_genes = input$combined_training_genes - - selected_gene = combo[combo$drug == selected_drug,'gene'] - if (combined_data == "FS"){ - updateRadioButtons( - inputId="combined_training_genes", - choiceNames = c("One", "Two"), - choiceValues = c("1", "2"), - selected = "2" - ) - } else{ - updateRadioButtons( - inputId="combined_training_genes", - choiceNames = c("Five", "Six"), - choiceValues = c("5","6"), - selected = "5" - ) - } - # hide stuff if selected - if(combined_model == "combined") { - #if(combined_model == TRUE) { - - hide("split_dropdown") - #show("resample_dropdown") - show("combined_data") - show("combined_training_genes") - filedata = paste0(combined_training_genes, - 'genes_logo_skf_BT_', - selected_gene, - '_', - combined_data - ) - print(filedata) - - print('doing COMBINED plot') - output$plot <- renderPlot(makeplot(loaded_files[[filedata]], - selection, - "none", # always 'none' for combined plot - gene = combo[drug==selected_drug,"gene"], - combined_training_genes = combined_training_genes, - display_combined = TRUE, - ) - ) - # e.g. - # makeplot(loaded_files$`5genes_logo_skf_BT_pnca_actual`, "MCC", "none" , gene = 'foo', combined_training_genes = '1234', display_combined = TRUE) - } else { - show("split_dropdown") - #show("resample_dropdown") - hide("combined_data") - hide("combined_training_genes") - filedata = paste0(combo[drug==selected_drug,"gene"], - '_baselineC_', - selected_split - ) - print(filedata) - print("doing GENE plot") - output$plot <- renderPlot(makeplot(loaded_files[[filedata]], - selection, - resampler, - gene = combo[drug==selected_drug,"gene"], - display_combined = FALSE, - ) - ) - - - } - # 6genes_logo_skf_BT_gid_complete - - # filedata example for combined: 6genes_logo_skf_BT_embb_actual - # 6genes_logo_skf_BT_embb_combined - }) - } - ) - ui=dashboardPage(skin="purple", dashboardHeader(title="Score Selector"), dashboardSidebar( @@ -293,14 +229,14 @@ if (interactive()){ radioButtons("combined_data", label="Data Type", - choiceNames = c("Complete", "Actual", "Feature Selection"), - choiceValues = c("complete", "actual", "FS"), + choiceNames = c("Complete", "Actual"), + choiceValues = c("complete", "actual"), selected="complete" ), radioButtons("combined_training_genes", label="Training Genes", - choiceNames = c("One", "Two", "Five", "Six"), - choiceValues = c("1", "2", "5","6"), + choiceNames = c("Five", "Six"), + choiceValues = c("5","6"), selected = "5" ), radioButtons("drug_dropdown", @@ -327,13 +263,145 @@ if (interactive()){ dashboardBody( useShinyjs(), #plotlyOutput("plot", height = 800), - plotOutput("plot", height = 800), + box(plotOutput("plot"), width="100%"), + box(plotOutput("feature_plot"), width="100%", title="Feature Selection"), # %>% withSpinner(color="#0dc5c1"), # uncomment if you want the spinner #downloadButton("save", "Download Plot"), #DT::dataTableOut("plotdata"), verbatimTextOutput("debug") ) ) + + + server=shinyServer(function(input, output, session) { + observeEvent({ + input$combined_model + input$combined_data + input$combined_training_genes + input$score_dropdown + input$resample_dropdown + input$drug_dropdown + input$split_dropdown + + },{ + combined_model = input$combined_model + selection = input$score_dropdown + resampler = input$resample_dropdown + selected_drug = input$drug_dropdown + selected_split = input$split_dropdown + combined_data = input$combined_data + combined_training_genes = input$combined_training_genes + + selected_gene = combo[combo$drug == selected_drug,'gene'] + # if (combined_data == "FS"){ + # updateRadioButtons( + # inputId="combined_training_genes", + # choiceNames = c("One", "Two"), + # choiceValues = c("1", "2"), + # selected = "2" + # ) + # } else{ + # updateRadioButtons( + # inputId="combined_training_genes", + # choiceNames = c("Five", "Six"), + # choiceValues = c("5","6"), + # selected = "5" + # ) + # } + # hide stuff if selected + if(combined_model == "combined") { + #if(combined_model == TRUE) { + + hide("split_dropdown") + #show("resample_dropdown") + show("combined_data") + show("combined_training_genes") + #show("feature_plot") + filedata = paste0(combined_training_genes, + 'genes_logo_skf_BT_', + selected_gene, + '_', + combined_data + ) + feature_data = paste0(as.character(as.numeric(combined_training_genes)-4), # lol + 'genes_logo_skf_BT_', + selected_gene, + '_FS' + ) + + print(filedata) + + print('doing COMBINED plot') + output$plot <- renderPlot( + makeplot( + loaded_files[[filedata]], + selection, + resampler, + gene = combo[drug==selected_drug,"gene"], + combined_training_genes = combined_training_genes, + display_combined = TRUE + ),height=450 + ) + print("doing FEATURE SELECTION plot corresponding to COMBINED plot") + output$feature_plot <- renderPlot( + makeplot( + loaded_files[[feature_data]], + selection, + "none", # always 'none' for Feature Selection + gene = combo[drug==selected_drug,"gene"], + combined_training_genes = "NO DATA", + display_combined = TRUE + ),height=450 + ) + + # e.g. + # makeplot(loaded_files$`5genes_logo_skf_BT_pnca_actual`, "MCC", "none" , gene = 'foo', combined_training_genes = '1234', display_combined = TRUE) + } else { + show("split_dropdown") + #show("resample_dropdown") + hide("combined_data") + hide("combined_training_genes") + #hide("feature_plot") + + filedata = paste0( + combo[drug==selected_drug,"gene"], + '_baselineC_', + selected_split + ) + + feature_data = paste0( + combo[drug==selected_drug,"gene"], + '_baselineC_', + selected_split, + "_FS" + ) + + print(filedata) + print("doing GENE plot") + output$plot <- renderPlot(makeplot(loaded_files[[filedata]], + selection, + resampler, + gene = combo[drug==selected_drug,"gene"], + display_combined = FALSE + ),height=450 + ) + print("doing FEATURE SELECTION plot corresponding to GENE plot") + output$feature_plot <- renderPlot(makeplot(loaded_files[[feature_data]], + selection, + "none", + gene = combo[drug==selected_drug,"gene"], + display_combined = FALSE + ),height=450 + ) + + } + # 6genes_logo_skf_BT_gid_complete + + # filedata example for combined: 6genes_logo_skf_BT_embb_actual + # 6genes_logo_skf_BT_embb_combined + }) + } + ) app <- shinyApp(ui, server) runApp(app) } \ No newline at end of file diff --git a/ml/server.R b/ml/server.R index a1c54b1..7b2820f 100644 --- a/ml/server.R +++ b/ml/server.R @@ -1,6 +1,5 @@ library(shiny) - -shinyServer(function(input, output) { +shinyServer(function(input, output, session) { observeEvent({ input$combined_model input$combined_data @@ -20,21 +19,21 @@ shinyServer(function(input, output) { combined_training_genes = input$combined_training_genes selected_gene = combo[combo$drug == selected_drug,'gene'] - if (combined_data == "FS"){ - updateRadioButtons( - inputId="combined_training_genes", - choiceNames = c("One", "Two"), - choiceValues = c("1", "2"), - selected = "2" - ) - } else{ - updateRadioButtons( - inputId="combined_training_genes", - choiceNames = c("Five", "Six"), - choiceValues = c("5","6"), - selected = "5" - ) - } + # if (combined_data == "FS"){ + # updateRadioButtons( + # inputId="combined_training_genes", + # choiceNames = c("One", "Two"), + # choiceValues = c("1", "2"), + # selected = "2" + # ) + # } else{ + # updateRadioButtons( + # inputId="combined_training_genes", + # choiceNames = c("Five", "Six"), + # choiceValues = c("5","6"), + # selected = "5" + # ) + # } # hide stuff if selected if(combined_model == "combined") { #if(combined_model == TRUE) { @@ -43,23 +42,44 @@ shinyServer(function(input, output) { #show("resample_dropdown") show("combined_data") show("combined_training_genes") + #show("feature_plot") filedata = paste0(combined_training_genes, 'genes_logo_skf_BT_', selected_gene, '_', combined_data ) + feature_data = paste0(as.character(as.numeric(combined_training_genes)-4), # lol + 'genes_logo_skf_BT_', + selected_gene, + '_FS' + ) + print(filedata) print('doing COMBINED plot') - output$plot <- renderPlot(makeplot(loaded_files[[filedata]], - selection, - "none", # always 'none' for combined plot - gene = combo[drug==selected_drug,"gene"], - combined_training_genes = combined_training_genes, - display_combined = TRUE, + output$plot <- renderPlot( + makeplot( + loaded_files[[filedata]], + selection, + resampler, + gene = combo[drug==selected_drug,"gene"], + combined_training_genes = combined_training_genes, + display_combined = TRUE + ),height=450 ) + print("doing FEATURE SELECTION plot corresponding to COMBINED plot") + output$feature_plot <- renderPlot( + makeplot( + loaded_files[[feature_data]], + selection, + "none", # always 'none' for Feature Selection + gene = combo[drug==selected_drug,"gene"], + combined_training_genes = "NO DATA", + display_combined = TRUE + ),height=450 ) + # e.g. # makeplot(loaded_files$`5genes_logo_skf_BT_pnca_actual`, "MCC", "none" , gene = 'foo', combined_training_genes = '1234', display_combined = TRUE) } else { @@ -67,21 +87,39 @@ shinyServer(function(input, output) { #show("resample_dropdown") hide("combined_data") hide("combined_training_genes") - filedata = paste0(combo[drug==selected_drug,"gene"], - '_baselineC_', - selected_split + #hide("feature_plot") + + filedata = paste0( + combo[drug==selected_drug,"gene"], + '_baselineC_', + selected_split ) + + feature_data = paste0( + combo[drug==selected_drug,"gene"], + '_baselineC_', + selected_split, + "_FS" + ) + print(filedata) print("doing GENE plot") output$plot <- renderPlot(makeplot(loaded_files[[filedata]], - selection, + selection, resampler, gene = combo[drug==selected_drug,"gene"], - display_combined = FALSE, + display_combined = FALSE + ),height=450 ) + print("doing FEATURE SELECTION plot corresponding to GENE plot") + output$feature_plot <- renderPlot(makeplot(loaded_files[[feature_data]], + selection, + "none", + gene = combo[drug==selected_drug,"gene"], + display_combined = FALSE + ),height=450 ) - } # 6genes_logo_skf_BT_gid_complete diff --git a/ml/ui.R b/ml/ui.R index 7cdcdd8..d7e9ff4 100644 --- a/ml/ui.R +++ b/ml/ui.R @@ -7,7 +7,6 @@ library(ggplot2) library(grid) # for the info box library(plotly) library(shinycssloaders) - dashboardPage(skin="purple", dashboardHeader(title="Score Selector"), dashboardSidebar( @@ -26,14 +25,14 @@ dashboardPage(skin="purple", radioButtons("combined_data", label="Data Type", - choiceNames = c("Complete", "Actual", "Feature Selection"), - choiceValues = c("complete", "actual", "FS"), + choiceNames = c("Complete", "Actual"), + choiceValues = c("complete", "actual"), selected="complete" ), radioButtons("combined_training_genes", label="Training Genes", - choiceNames = c("One", "Two", "Five", "Six"), - choiceValues = c("1", "2", "5","6"), + choiceNames = c("Five", "Six"), + choiceValues = c("5","6"), selected = "5" ), radioButtons("drug_dropdown", @@ -60,7 +59,8 @@ dashboardPage(skin="purple", dashboardBody( useShinyjs(), #plotlyOutput("plot", height = 800), - plotOutput("plot", height = 800), + box(plotOutput("plot"), width="100%"), + box(plotOutput("feature_plot"), width="100%", title="Feature Selection"), # %>% withSpinner(color="#0dc5c1"), # uncomment if you want the spinner #downloadButton("save", "Download Plot"), #DT::dataTableOut("plotdata"),