From 3829154c1e4e8e04ea477eb5ca2f439864a4b057 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Sun, 25 Sep 2022 20:01:42 +0200 Subject: [PATCH] Use newly computed metrics --- DESCRIPTION | 2 +- R/genes_table.R | 28 +++++++++++++++++----------- R/ranking.R | 24 ++++++++---------------- R/server.R | 6 ++++-- R/sysdata.rda | Bin 5640 -> 24173 bytes R/ui.R | 35 +++++++++++++++++++++++++++-------- man/genes.Rd | 2 +- man/rank_genes.Rd | 20 ++++---------------- scripts/gsea.R | 4 ++-- 9 files changed, 64 insertions(+), 57 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 21a9a1a..10256d1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -15,7 +15,7 @@ Description: This package contains precomputed data including comparisons in License: AGPL (>= 3) Encoding: UTF-8 Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.0 +RoxygenNote: 7.2.1 Depends: R (>= 2.10) LazyData: true diff --git a/R/genes_table.R b/R/genes_table.R index d8b54a2..b7d61a3 100644 --- a/R/genes_table.R +++ b/R/genes_table.R @@ -71,14 +71,17 @@ genes_table_server <- function(id, data) { "target=\"_blank\">{hgnc_name}" ), "Rank" = rank, - "Percentile" = percentile, + "%" = percentile, "Score" = score, "Median" = median_expression, + "IQR" = iqr_expression, + "QCV" = qcv_expression, "Mean" = mean_expression, - "Standard deviation" = sd_expression, - "Expressed" = above_zero, - "Above median" = above_median, - "Above 95%" = above_95 + "SD" = sd_expression, + "CV" = cv_expression, + "> 0" = above_zero, + "> median" = above_median, + "> 95%" = above_95 )], options = list( dom = "frtip", @@ -90,18 +93,21 @@ genes_table_server <- function(id, data) { ) |> DT::formatPercentage( c( - "Percentile", - "Score", - "Expressed", - "Above median", - "Above 95%" + "%", + "> 0", + "> median", + "> 95%" ), digits = 2, ) |> DT::formatRound(c( + "Score", "Median", + "IQR", + "QCV", "Mean", - "Standard deviation" + "SD", + "CV" )) }) }) diff --git a/R/ranking.R b/R/ranking.R index 7d5f089..dba5618 100644 --- a/R/ranking.R +++ b/R/ranking.R @@ -3,34 +3,26 @@ #' This function will compute a weighted average across multiple metrics that #' define how ubiquitous a gene is based on its expression across samples. #' -#' @param cross_sample_metric Metric to use for calculating the number of -#' samples a gene is expressed in. One of `above_95`, `above_median` or -#' `above_zero`. -#' @param cross_sample_weight Weighting of the cross sample metric within the -#' final score. -#' @param mean_expression_weight Weighting of the gene's mean expression within -#' the final score. -#' @param sd_expression_weight Weighting of the standard deviation of the -#' gene's expression within the final score. -#' #' @return A `data.table` with gene data as well as the scores, ranks and #' percentiles for each gene. #' #' @export rank_genes <- function(cross_sample_metric = "above_95", cross_sample_weight = 0.5, - mean_expression_weight = 0.25, - sd_expression_weight = -0.25) { + level_metric = "median_expression_normalized", + level_weight = 0.25, + variation_metric = "qcv_expression_normalized", + variation_weight = -0.25) { total_weight <- abs(cross_sample_weight) + - abs(mean_expression_weight) + - abs(sd_expression_weight) + abs(level_weight) + + abs(variation_weight) data <- copy(ubigen::genes) data[, score := (cross_sample_weight * get(cross_sample_metric) + - mean_expression_weight * mean_expression_normalized + - sd_expression_weight * sd_expression_normalized) / + level_weight * get(level_metric) + + variation_weight * get(variation_metric)) / total_weight] # Normalize scores to be between 0.0 and 1.0. diff --git a/R/server.R b/R/server.R index f02f504..2ff93fb 100644 --- a/R/server.R +++ b/R/server.R @@ -5,8 +5,10 @@ server <- function(input, output, session) { rank_genes( cross_sample_metric = input$cross_sample_metric, cross_sample_weight = input$cross_sample_weight, - mean_expression_weight = input$mean_expression, - sd_expression_weight = input$sd_expression + level_metric = input$level_metric, + level_weight = input$level_weight, + variation_metric = input$variation_metric, + variation_weight = input$variation_weight ) }) diff --git a/R/sysdata.rda b/R/sysdata.rda index 62f44994b79022a09be3976d2aae02c2db91091f..fd826b09a7262bc972a5405cd671333cf5e917bd 100644 GIT binary patch literal 24173 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 literal 5640 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 color = ~source ) |> plotly::add_lines( - x = ~bucket_smoothed, - y = ~total_smoothed, + x = bucket_smoothed, + y = total_smoothed, name = "All (smoothed)" ) |> plotly::layout(