R/plot_feature_freq.R

Defines functions plot_feature_freq

plot_feature_freq = function(results) {
  # browser()
  # get list of features from full predictor since this uses every feature
  # feature_freq_results = NULL
  plots = list()

  datasets = unique(results$dataset)

  for(datasetLoop in datasets) {
    fp = results[results$ids == "full_predictor" & results$dataset == datasetLoop,]
    features = strsplit(toString(fp[1,"features"]),", ")[[1]]

    resultsFilterred = results %>%
      dplyr::filter(ids != "full_predictor" & dataset == datasetLoop)

    # browser()

    features_freq = data.frame(
      'feature' = c(),
      'freq' = c(),
      'dataset' = c()
    )

    for (feature in features) {
      freq = 0

      for (row in (1:nrow(resultsFilterred))) {
        # skip full_predictor
        featureVector = strsplit(toString(resultsFilterred[row, "features"]),", ")

        if (feature %in% featureVector[[1]]) {
          freq = freq + 1
        }
      }

      features_freq = rbind(features_freq, data.frame("feature" = feature, 'freq' = freq, 'dataset' = datasetLoop))
    }

    # browser()

    # calc perc
    features_freq$perc = features_freq$freq / nrow(resultsFilterred)
    features_freq = features_freq[order(-features_freq$perc),]


    # filter out features which were nevery picked
    features_freq = features_freq %>% dplyr::filter(perc > 0)



    plot = ggplot2::ggplot(data = features_freq, ggplot2::aes(x = reorder(feature, perc), y = perc)) +
      ggplot2::geom_bar(stat = "identity", width = .5, position = "dodge") +
      ggplot2::xlab("") +
      ggplot2::ylab("% chosen") +
      # ggplot2::ggtitle('Feature Choice over all Feature selection method') +
      ggplot2::coord_flip()

    plots[[datasetLoop]] = plot

    # plots = c(plots, c(plot))

    # if(is.null(feature_freq_results)) {
    #   feature_freq_results = features_freq
    # } else {
    #   feature_freq_results = rbind(feature_freq_results, features_freq)
    # }
  }


  # plot

  # distinguish between one or multiple plots
  if(length(plots) > 1) {
    return(plotly::ggplotly(do.call(plotly::subplot,plots)))
  } else {
    return(plotly::ggplotly(plots[[1]]))
  }
}
creil94/FeatureSelectionDashboard documentation built on Nov. 4, 2019, 9:17 a.m.