From 1ac135dc0b6bc85c563b932e8fbb3f8670b338e4 Mon Sep 17 00:00:00 2001 From: Pia Keukeleire Date: Fri, 17 Oct 2025 15:37:37 +0200 Subject: [PATCH 01/37] change fit_elements --- R/fit.R | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/R/fit.R b/R/fit.R index d3b1ec1..667be73 100755 --- a/R/fit.R +++ b/R/fit.R @@ -1,19 +1,12 @@ fit_elements <- function(object, normalize=TRUE, block = NULL, endomorphic=FALSE, normalizeSize=1e9, ...) { design <- data.frame(rep(1, ncol(object))) - if (normalize) { - if ("normalizeSize" %in% names(formals(normalize_counts))) { - object <- normalize_counts(object, normalizeSize=normalizeSize, block=block) - } else { - object <- normalize_counts(object, block=block) - } - } if ("endomorphic" %in% names(formals(mpralm))) { mpralm_fit <- mpralm(object = object, design = design, aggregate = "none", - normalize = F, model_type = "indep_groups", + normalize = T, model_type = "corr_groups", block = block, endomorphic = endomorphic, normalizeSize = normalizeSize, ...) } else { mpralm_fit <- mpralm(object = object, design = design, aggregate = "none", - normalize = F, model_type = "indep_groups", + normalize = T, model_type = "corr_groups", block = block, ...) } if (! endomorphic) { From a56799affbba468aa6a6312f9edaa74b53c7875f Mon Sep 17 00:00:00 2001 From: Pia Date: Tue, 25 Nov 2025 11:06:53 +0100 Subject: [PATCH 02/37] update normalize --- R/fit.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/fit.R b/R/fit.R index 667be73..7990839 100755 --- a/R/fit.R +++ b/R/fit.R @@ -2,11 +2,11 @@ fit_elements <- function(object, normalize=TRUE, block = NULL, endomorphic=FALSE design <- data.frame(rep(1, ncol(object))) if ("endomorphic" %in% names(formals(mpralm))) { mpralm_fit <- mpralm(object = object, design = design, aggregate = "none", - normalize = T, model_type = "corr_groups", + normalize = normalize, model_type = "corr_groups", block = block, endomorphic = endomorphic, normalizeSize = normalizeSize, ...) } else { mpralm_fit <- mpralm(object = object, design = design, aggregate = "none", - normalize = T, model_type = "corr_groups", + normalize = normalize, model_type = "corr_groups", block = block, ...) } if (! endomorphic) { From 364cff152c292cb219ef9f1e3e1c0f619d7c4394 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 12:37:09 +0100 Subject: [PATCH 03/37] Add EditorConfig, lintr, and update DESCRIPTION and NAMESPACE for package improvements --- .editorconfig | 48 +++++++++++++++++++++++++++++++++++++++ .lintr | 5 ++++ CONFIG-FILES-README.md | 0 DESCRIPTION | 2 ++ NAMESPACE | 4 +++- R/preprocess.R | 2 +- R/utils.R | 16 +++++++++++++ tests/testthat/test-fit.R | 5 ++++ 8 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 .editorconfig create mode 100644 .lintr create mode 100644 CONFIG-FILES-README.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d3bd0c1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,48 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +trim_trailing_whitespace = true + +# R files +[*.R] +indent_style = tab +indent_size = 4 +max_line_length = 127 + +# Rmd files (R Markdown) +[*.Rmd] +indent_style = space +indent_size = 2 +max_line_length = 127 + +# YAML files +[*.{yml,yaml}] +indent_style = space +indent_size = 2 + +# JSON files +[*.json] +indent_style = space +indent_size = 2 + +# Markdown files +[*.md] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = false + +# Makefile +[Makefile] +indent_style = tab + +# Shell scripts +[*.sh] +indent_style = space +indent_size = 2 diff --git a/.lintr b/.lintr new file mode 100644 index 0000000..a6c5ffd --- /dev/null +++ b/.lintr @@ -0,0 +1,5 @@ +linters: linters_with_defaults( + line_length_linter(127), + commented_code_linter = NULL, + object_usage_linter=NULL + ) diff --git a/CONFIG-FILES-README.md b/CONFIG-FILES-README.md new file mode 100644 index 0000000..e69de29 diff --git a/DESCRIPTION b/DESCRIPTION index 2309d53..2930046 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -28,6 +28,8 @@ Imports: graphics, statmod, tidyr, + dplyr, + rlang, GenomeInfoDb, IRanges, GenomicRanges, diff --git a/NAMESPACE b/NAMESPACE index fbe8183..f090505 100755 --- a/NAMESPACE +++ b/NAMESPACE @@ -9,6 +9,8 @@ importFrom("stats", "approxfun", "lowess") importFrom("statmod", "mixedModel2Fit") importFrom("tidyr", "pivot_wider") importFrom("tidyr", "unite") +importFrom("dplyr", "%>%", "group_by", "summarise", "mutate", "filter", "ungroup", "pull", "select", "n", "row_number") +importFrom("rlang", "sym") importFrom("mpra", MPRASet, getRNA, getDNA, getBarcode, getEid, getEseq, normalize_counts, mpralm, get_precision_weights) exportClasses("MPRASet") @@ -16,4 +18,4 @@ exportMethods("show") export(MPRASet, getRNA, getDNA, getBarcode, getEid, getEseq, getLabel) export(mpralm, get_precision_weights, compute_logratio, normalize_counts, fit_elements) export(downsample_barcodes, create_dna_df, create_rna_df, create_var_df) -export(plot_groups, mpra_treat) \ No newline at end of file +export(plot_groups, mpra_treat) diff --git a/R/preprocess.R b/R/preprocess.R index ea7d05d..1855e0d 100644 --- a/R/preprocess.R +++ b/R/preprocess.R @@ -69,7 +69,7 @@ create_var_df <- function(df, map_df) { stop("df must contain column 'name'") } - if (!any(df$name %in% map_df$REF) & !any(df$name %in% map_df$ALT)) { + if (!any(df$name %in% map_df$REF) && !any(df$name %in% map_df$ALT)) { stop("No matches found between the 'name' column in 'df' and the 'REF'/'ALT' columns in 'map_df'. Please ensure that these columns have matching values.") } diff --git a/R/utils.R b/R/utils.R index b848502..6c2e3fb 100755 --- a/R/utils.R +++ b/R/utils.R @@ -1,3 +1,19 @@ +# Declare global variables to avoid R CMD check NOTEs +utils::globalVariables(c( + # Functions from mpra package + "mpralm", "getDNA", "getRNA", "getEid", "getBarcode", "getEseq", + "normalize_counts", "get_precision_weights", "compute_logratio", + "MPRASet", "getLabel", + # Functions from other packages + "squeezeVar", "rowData", + # ggplot2 functions (in Suggests) + "ggplot", "aes", "geom_histogram", "geom_density", "theme_minimal", + "labs", "xlim", "geom_vline", "scale_color_manual", "guide_legend", + "after_stat", + # NSE column names used in dplyr and ggplot2 operations + "allele", "row_num", "n", "ID", "REF", "ALT", "max_bc", "label", "logFC" +)) + .is_mpra_or_stop <- function(object) { if (!is(object, "MPRASet")) stop("object is of class '", class(object), "', but needs to be of class 'MPRASet'") diff --git a/tests/testthat/test-fit.R b/tests/testthat/test-fit.R index 93be86a..92f0251 100644 --- a/tests/testthat/test-fit.R +++ b/tests/testthat/test-fit.R @@ -19,6 +19,11 @@ dna_log_2 <- dna dna_log_2["name_000001", "sample_count_1_bc_1"] <- NA mpra_log_2 <- MPRASet(DNA = dna_log_2, RNA = dna, eid = row.names(dna), barcode = NULL, label=labels_vec) +# block vector for replicates +nr_reps <- 2 +bcs <- ncol(dna) / nr_reps +block_vector <- rep(1:nr_reps, each = bcs) + # to test outcome type endometric == TRUE fit_MPRA_Set <- fit_elements(object = mpra_log_2, normalize=TRUE, block = block_vector, endomorphic = TRUE) fit_MArrayLM <- fit_elements(object = mpra_log_2, normalize=TRUE, block = block_vector) From 7bebc8b276073ab5ee65db72c78b64fd7ff4f8e2 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:16:57 +0100 Subject: [PATCH 04/37] linting and github action --- .editorconfig | 2 +- .github/workflows/main.yml | 27 ++++ .lintr | 5 +- R/analyze.R | 222 +++++++++++++++--------------- R/fit.R | 42 +++--- R/mpra_set.R | 36 ++--- R/preprocess.R | 207 +++++++++++++++------------- R/utils.R | 9 +- inst/scripts/makeMpraSetExample.R | 64 +++++---- man/mpraSetExample.Rd | 32 ++--- man/normalize_counts.Rd | 4 +- tests/runTests.R | 2 +- tests/testthat/test-analyze.R | 49 +++---- tests/testthat/test-fit.R | 26 ++-- tests/testthat/test-preprocess.R | 147 ++++++++++---------- 15 files changed, 469 insertions(+), 405 deletions(-) create mode 100644 .github/workflows/main.yml diff --git a/.editorconfig b/.editorconfig index d3bd0c1..1978e32 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,7 +12,7 @@ trim_trailing_whitespace = true # R files [*.R] -indent_style = tab +indent_style = space indent_size = 4 max_line_length = 127 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..338f868 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,27 @@ +--- +name: Tests + +on: # yamllint disable-line rule:truthy + push: + branches: [master, development] + pull_request: + branches: [master, development] + +jobs: + Formatting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Formatting + uses: super-linter/super-linter@v8 + env: + LINTER_RULES_PATH: . + VALIDATE_ALL_CODEBASE: false + DEFAULT_BRANCH: master + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VALIDATE_JSON: true + VALIDATE_YAML: true + YAML_CONFIG_FILE: .yamllint.yml + VALIDATE_R: true diff --git a/.lintr b/.lintr index a6c5ffd..5166a1b 100644 --- a/.lintr +++ b/.lintr @@ -1,5 +1,8 @@ linters: linters_with_defaults( line_length_linter(127), + indentation_linter(indent = 4), commented_code_linter = NULL, - object_usage_linter=NULL + object_usage_linter = NULL, + object_name_linter = NULL, + cyclocomp_linter(complexity_limit = 30) ) diff --git a/R/analyze.R b/R/analyze.R index f2ac482..6179897 100644 --- a/R/analyze.R +++ b/R/analyze.R @@ -1,125 +1,127 @@ -plot_groups <- function(object, percentile=NULL, neg_label=NULL, test_label=NULL) { - if (is(object, "MPRASet")) { - object <- rowData(object) - } else { - object <- as.data.frame(object) - } - if (!requireNamespace("ggplot2", quietly = TRUE)) { +plot_groups <- function(object, percentile = NULL, neg_label = NULL, test_label = NULL) { + if (is(object, "MPRASet")) { + object <- rowData(object) + } else { + object <- as.data.frame(object) + } + if (!requireNamespace("ggplot2", quietly = TRUE)) { stop("The 'ggplot2' package is required but not installed. Please install it.") } - if (is.null(object$logFC)) { - stop("Your MPRASet does not contain logFC values. Please run mpralm or fit_elements first.") - } - if (is.null(object$label) && (! is.null(neg_label) || ! is.null(test_label))) { - stop("Your MPRASet should contain labels.") - } - if (! is.null(neg_label) && ! neg_label %in% unique(object$label)) { - stop("The negative label you provided is not in the label column of the mpra fit object.") - } - if (! is.null(test_label) && ! test_label %in% unique(object$label)) { - stop("The test label you provided is not in the label column of the mpra fit object.") - } - if (is.null(percentile) && ! is.null(neg_label)) { - percentile <- 0.95 - print("No percentile provided, using 0.95.") - } - - if (! is.null(test_label) && ! is.null(neg_label)) { - object <- object[object$label %in% c(test_label, neg_label), ] - } + if (is.null(object$logFC)) { + stop("Your MPRASet does not contain logFC values. Please run mpralm or fit_elements first.") + } + if (is.null(object$label) && (!is.null(neg_label) || !is.null(test_label))) { + stop("Your MPRASet should contain labels.") + } + if (!is.null(neg_label) && !neg_label %in% unique(object$label)) { + stop("The negative label you provided is not in the label column of the mpra fit object.") + } + if (!is.null(test_label) && !test_label %in% unique(object$label)) { + stop("The test label you provided is not in the label column of the mpra fit object.") + } + if (is.null(percentile) && !is.null(neg_label)) { + percentile <- 0.95 + print("No percentile provided, using 0.95.") + } - plot <- ggplot(object, aes(x = logFC, fill = label, y = after_stat(density))) + - geom_histogram(alpha = 0.5, position = "identity", binwidth = 0.1) + - geom_density(alpha = 0.2, adjust = 1) + - theme_minimal() + - labs(title = "Normalized Histogram of logratio Values", x = "Logratio", y = "Density", color = NULL) + - xlim(c(min(object$logFC), max(object$logFC))) + if (!is.null(test_label) && !is.null(neg_label)) { + object <- object[object$label %in% c(test_label, neg_label), ] + } - if (!is.null(neg_label)) { + plot <- ggplot(object, aes(x = logFC, fill = label, y = after_stat(density))) + + geom_histogram(alpha = 0.5, position = "identity", binwidth = 0.1) + + geom_density(alpha = 0.2, adjust = 1) + + theme_minimal() + + labs(title = "Normalized Histogram of logratio Values", x = "Logratio", y = "Density", color = NULL) + + xlim(c(min(object$logFC), max(object$logFC))) - percentile_up <- quantile(object$logFC[object$label == neg_label], percentile) - up_label <- paste(percentile, "th percentile of negative controls", sep="") + if (!is.null(neg_label)) { + percentile_up <- quantile(object$logFC[object$label == neg_label], percentile) + up_label <- paste(percentile, "th percentile of negative controls", sep = "") - percentile_down <- quantile(object$logFC[object$label == neg_label], 1 - percentile) - down_label <- paste(1 - percentile, "th percentile of negative controls", sep="") + percentile_down <- quantile(object$logFC[object$label == neg_label], 1 - percentile) + down_label <- paste(1 - percentile, "th percentile of negative controls", sep = "") - plot <- plot + - geom_vline(aes(xintercept = percentile_up, color = up_label), linetype = "dashed", size = 1) + - geom_vline(aes(xintercept = percentile_down, color = down_label), linetype = "dashed", size = 1) + - scale_color_manual(values = setNames(c("green", "orange"), c(up_label, down_label)), - guide = guide_legend(override.aes = list(linetype = "dashed"))) - } + plot <- plot + + geom_vline(aes(xintercept = percentile_up, color = up_label), linetype = "dashed", size = 1) + + geom_vline(aes(xintercept = percentile_down, color = down_label), linetype = "dashed", size = 1) + + scale_color_manual( + values = setNames(c("green", "orange"), c(up_label, down_label)), + guide = guide_legend(override.aes = list(linetype = "dashed")) + ) + } - return(plot) + return(plot) } +# Moderated t-statistics relative to a logFC threshold. +# Davis McCarthy, Gordon Smyth, adapted by Pia Keukeleire from original function in limma package. +# This version shifts the mean of the coefficients to the mean of +# the negative controls in order to work with negative upper thresholds. +# percentile: The percentile of the negative controls to use as the threshold. +# 25 November 2024. +mpra_treat <- function(fit, percentile = 0.975, neg_label, trend = FALSE, robust = FALSE, winsor.tail.p = c(0.05, 0.1)) { + # Check fit + if (is(fit, "MPRASet")) { + mpra <- attr(fit, "MArrayLM") + mpra$logFC <- rowData(fit)$logFC + mpra$label <- getLabel(fit) + fit <- mpra + } + if (!is(fit, "MArrayLM")) stop("fit must be an MArrayLM object") + if (is.null(fit$coefficients)) stop("coefficients not found in fit object") + if (is.null(fit$stdev.unscaled)) stop("stdev.unscaled not found in fit object") + if (is.null(fit$label)) stop("Your mpra fit object should contain a label column.") -mpra_treat <- function(fit, percentile=0.975, neg_label, trend=FALSE, robust=FALSE, winsor.tail.p=c(0.05,0.1)) -# Moderated t-statistics relative to a logFC threshold. -# Davis McCarthy, Gordon Smyth, adapted by Pia Keukeleire from original function in limma package. -# This version shifts the mean of the coefficients to the mean of the negative controls in order to work with negative upper thresholds. -# percentile: The percentile of the negative controls to use as the threshold. -# 25 November 2024. -{ -# Check fit - if (is(fit, "MPRASet")) { - mpra <- attr(fit, "MArrayLM") - mpra$logFC <- rowData(fit)$logFC - mpra$label <- getLabel(fit) - fit <- mpra - } - if(!is(fit,"MArrayLM")) stop("fit must be an MArrayLM object") - if(is.null(fit$coefficients)) stop("coefficients not found in fit object") - if(is.null(fit$stdev.unscaled)) stop("stdev.unscaled not found in fit object") - if (is.null(fit$label)) stop("Your mpra fit object should contain a label column.") - - fit$lods <- NULL + fit$lods <- NULL - neg_mean <- mean(fit$coefficients[fit$label == neg_label]) + neg_mean <- mean(fit$coefficients[fit$label == neg_label]) - coefficients <- as.matrix(fit$coefficients - neg_mean) - coefficients_neg <- as.matrix(fit$coefficients[fit$label == neg_label] - neg_mean) + coefficients <- as.matrix(fit$coefficients - neg_mean) + coefficients_neg <- as.matrix(fit$coefficients[fit$label == neg_label] - neg_mean) - stdev.unscaled <- as.matrix(fit$stdev.unscaled) - sigma <- fit$sigma - df.residual <- fit$df.residual - if (is.null(coefficients) || is.null(stdev.unscaled) || is.null(sigma) || - is.null(df.residual)) - stop("No data, or argument is not a valid lmFit object") - if (max(df.residual) == 0) - stop("No residual degrees of freedom in linear model fits") - if (!any(is.finite(sigma))) - stop("No finite residual standard deviations") - if(trend) { - covariate <- fit$Amean - if(is.null(covariate)) stop("Need Amean component in fit to estimate trend") - } else { - covariate <- NULL - } - sv <- squeezeVar(sigma^2, df.residual, covariate=covariate, robust=robust, winsor.tail.p=winsor.tail.p) - fit$df.prior <- sv$df.prior - fit$s2.prior <- sv$var.prior - fit$s2.post <- sv$var.post - df.total <- df.residual + sv$df.prior - df.pooled <- sum(df.residual,na.rm=TRUE) - df.total <- pmin(df.total,df.pooled) - fit$df.total <- df.total + stdev.unscaled <- as.matrix(fit$stdev.unscaled) + sigma <- fit$sigma + df.residual <- fit$df.residual + if (is.null(coefficients) || is.null(stdev.unscaled) || is.null(sigma) || is.null(df.residual)) { + stop("No data, or argument is not a valid lmFit object") + } + if (max(df.residual) == 0) { + stop("No residual degrees of freedom in linear model fits") + } + if (!any(is.finite(sigma))) { + stop("No finite residual standard deviations") + } + if (trend) { + covariate <- fit$Amean + if (is.null(covariate)) stop("Need Amean component in fit to estimate trend") + } else { + covariate <- NULL + } + sv <- squeezeVar(sigma^2, df.residual, covariate = covariate, robust = robust, winsor.tail.p = winsor.tail.p) + fit$df.prior <- sv$df.prior + fit$s2.prior <- sv$var.prior + fit$s2.post <- sv$var.post + df.total <- df.residual + sv$df.prior + df.pooled <- sum(df.residual, na.rm = TRUE) + df.total <- pmin(df.total, df.pooled) + fit$df.total <- df.total - acoef <- abs(coefficients) - se <- stdev.unscaled*sqrt(fit$s2.post) - lfc_right <- quantile(coefficients_neg, percentile) - lfc_left <- quantile(coefficients_neg, 1-percentile) - tstat.right <- (acoef-lfc_right)/se - tstat.left <- (acoef-lfc_left)/se - fit$t <- array(0,dim(coefficients),dimnames=dimnames(coefficients)) - fit$p.value <- pt(tstat.right, df=df.total,lower.tail=FALSE) + pt(tstat.left,df=df.total,lower.tail=FALSE) - tstat.right <- pmax(tstat.right,0) - tstat.left <- pmax(tstat.left,0) - fc.up <- (coefficients > lfc_right) - fc.down <- (coefficients < lfc_left) - fit$t[fc.up] <- tstat.right[fc.up] - fit$t[fc.down] <- tstat.left[fc.down] - fit$treat.lfc_right <- lfc_right - fit$treat.lfc_left <- lfc_left - fit -} \ No newline at end of file + acoef <- abs(coefficients) + se <- stdev.unscaled * sqrt(fit$s2.post) + lfc_right <- quantile(coefficients_neg, percentile) + lfc_left <- quantile(coefficients_neg, 1 - percentile) + tstat.right <- (acoef - lfc_right) / se + tstat.left <- (acoef - lfc_left) / se + fit$t <- array(0, dim(coefficients), dimnames = dimnames(coefficients)) + fit$p.value <- pt(tstat.right, df = df.total, lower.tail = FALSE) + pt(tstat.left, df = df.total, lower.tail = FALSE) + tstat.right <- pmax(tstat.right, 0) + tstat.left <- pmax(tstat.left, 0) + fc.up <- (coefficients > lfc_right) + fc.down <- (coefficients < lfc_left) + fit$t[fc.up] <- tstat.right[fc.up] + fit$t[fc.down] <- tstat.left[fc.down] + fit$treat.lfc_right <- lfc_right + fit$treat.lfc_left <- lfc_left + fit +} diff --git a/R/fit.R b/R/fit.R index 7990839..1924e54 100755 --- a/R/fit.R +++ b/R/fit.R @@ -1,19 +1,23 @@ -fit_elements <- function(object, normalize=TRUE, block = NULL, endomorphic=FALSE, normalizeSize=1e9, ...) { - design <- data.frame(rep(1, ncol(object))) - if ("endomorphic" %in% names(formals(mpralm))) { - mpralm_fit <- mpralm(object = object, design = design, aggregate = "none", - normalize = normalize, model_type = "corr_groups", - block = block, endomorphic = endomorphic, normalizeSize = normalizeSize, ...) - } else { - mpralm_fit <- mpralm(object = object, design = design, aggregate = "none", - normalize = normalize, model_type = "corr_groups", - block = block, ...) - } - if (! endomorphic) { - mpralm_fit$label <- getLabel(object) - mpralm_fit$logFC <- mpralm_fit$coefficients - } - return(mpralm_fit) +fit_elements <- function(object, normalize = TRUE, block = NULL, endomorphic = FALSE, normalizeSize = 1e9, ...) { + design <- data.frame(rep(1, ncol(object))) + if ("endomorphic" %in% names(formals(mpralm))) { + mpralm_fit <- mpralm( + object = object, design = design, aggregate = "none", + normalize = normalize, model_type = "corr_groups", + block = block, endomorphic = endomorphic, normalizeSize = normalizeSize, ... + ) + } else { + mpralm_fit <- mpralm( + object = object, design = design, aggregate = "none", + normalize = normalize, model_type = "corr_groups", + block = block, ... + ) + } + if (!endomorphic) { + mpralm_fit$label <- getLabel(object) + mpralm_fit$logFC <- mpralm_fit$coefficients + } + return(mpralm_fit) } compute_logratio <- function(object, aggregate = c("mean", "sum", "none")) { @@ -21,7 +25,7 @@ compute_logratio <- function(object, aggregate = c("mean", "sum", "none")) { aggregate <- match.arg(aggregate) - if (aggregate=="sum") { + if (aggregate == "sum") { dna <- getDNA(object, aggregate = TRUE) rna <- getRNA(object, aggregate = TRUE) logr <- log2(rna + 1) - log2(dna + 1) @@ -29,12 +33,12 @@ compute_logratio <- function(object, aggregate = c("mean", "sum", "none")) { dna <- getDNA(object, aggregate = FALSE) rna <- getRNA(object, aggregate = FALSE) logr <- log2(rna + 1) - log2(dna + 1) - } else if (aggregate=="mean") { + } else if (aggregate == "mean") { dna <- getDNA(object, aggregate = FALSE) rna <- getRNA(object, aggregate = FALSE) eid <- getEid(object) logr <- log2(rna + 1) - log2(dna + 1) - + by_out <- by(logr, eid, colMeans, na.rm = TRUE) logr <- do.call("rbind", by_out) rownames(logr) <- names(by_out) diff --git a/R/mpra_set.R b/R/mpra_set.R index 4371364..e4584ca 100644 --- a/R/mpra_set.R +++ b/R/mpra_set.R @@ -1,27 +1,27 @@ #' @importFrom mpra MPRASet getRNA getDNA getBarcode getEid getEseq #' @export MPRASet getRNA getDNA getBarcode getEid getEseq -MPRASet <- function(label=new("character"), ...) { - # Create a new MPRASet object - # label: A character vector with the labels of the sequences - object <- mpra::MPRASet(...) - if (length(label) != 0) { - eid <- getEid(object) - label <- label[eid] - rowData(object)$label <- label - } - object +MPRASet <- function(label = new("character"), ...) { + # Create a new MPRASet object + # label: A character vector with the labels of the sequences + object <- mpra::MPRASet(...) + if (length(label) != 0) { + eid <- getEid(object) + label <- label[eid] + rowData(object)$label <- label + } + object } getLabel <- function(object) { - .is_mpra_or_stop(object) - rowData(object)$label + .is_mpra_or_stop(object) + rowData(object)$label } setLabel <- function(object, label) { - .is_mpra_or_stop(object) - eid <- getEid(object) - label <- label[eid] - rowData(object)$label <- label - object -} \ No newline at end of file + .is_mpra_or_stop(object) + eid <- getEid(object) + label <- label[eid] + rowData(object)$label <- label + object +} diff --git a/R/preprocess.R b/R/preprocess.R index 1855e0d..41d0358 100644 --- a/R/preprocess.R +++ b/R/preprocess.R @@ -1,117 +1,128 @@ -downsample_barcodes <- function(df, id_column_name="name", percentile=0.95) { - if (!id_column_name %in% names(df)) { - warning(paste("Column", id_column_name, "does not exist in the DataFrame. +downsample_barcodes <- function(df, id_column_name = "name", percentile = 0.95) { + if (!id_column_name %in% names(df)) { + warning(paste("Column", id_column_name, "does not exist in the DataFrame. Provide an existing column name to the variable id_column_name. Returning the original DataFrame.")) - return(df) # Return the original DataFrame if the column does not exist - } - if (any(names(df) == "allele")) { - - # Calculate the 0.95th quantile of the number of barcodes across all groups - max_bc <- df %>% - group_by(!!sym(id_column_name), allele) %>% - summarise(n = n(), .groups = 'drop') %>% - summarise(max_bc = quantile(n, percentile)) %>% - pull(max_bc) - - # Downsample barcodes - df <- df %>% - group_by(!!sym(id_column_name), allele) %>% - mutate(row_num = sample(row_number())) %>% - filter(row_num <= max_bc) %>% - ungroup() - } else { - # Calculate the 0.95th quantile of the number of barcodes across all groups - max_bc <- df %>% - group_by(!!sym(id_column_name)) %>% - summarise(n = n(), .groups = 'drop') %>% - summarise(max_bc = quantile(n, percentile)) %>% - pull(max_bc) - - # Downsample barcodes - df <- df %>% - group_by(!!sym(id_column_name)) %>% - mutate(row_num = sample(row_number())) %>% - filter(row_num <= max_bc) %>% - ungroup() - } - - df$row_num <- NULL - - return(df) + return(df) # Return the original DataFrame if the column does not exist + } + if (any(names(df) == "allele")) { + # Calculate the 0.95th quantile of the number of barcodes across all groups + max_bc <- df %>% + group_by(!!sym(id_column_name), allele) %>% + summarise(n = n(), .groups = "drop") %>% + summarise(max_bc = quantile(n, percentile)) %>% + pull(max_bc) + + # Downsample barcodes + df <- df %>% + group_by(!!sym(id_column_name), allele) %>% + mutate(row_num = sample(row_number())) %>% + filter(row_num <= max_bc) %>% + ungroup() + } else { + # Calculate the 0.95th quantile of the number of barcodes across all groups + max_bc <- df %>% + group_by(!!sym(id_column_name)) %>% + summarise(n = n(), .groups = "drop") %>% + summarise(max_bc = quantile(n, percentile)) %>% + pull(max_bc) + + # Downsample barcodes + df <- df %>% + group_by(!!sym(id_column_name)) %>% + mutate(row_num = sample(row_number())) %>% + filter(row_num <= max_bc) %>% + ungroup() + } + + df$row_num <- NULL + + return(df) } -create_dna_df <- function(df, id_column_name="variant_id", allele_column_name=NULL) { - suppressWarnings({ - if (is.null(allele_column_name) && !is.null(df$allele)) { - allele_column_name <- "allele" - }}) - - df_dna <- .pivot_df(df, id_column_name, allele_column_name, "DNA") - return(df_dna) +create_dna_df <- function(df, id_column_name = "variant_id", allele_column_name = NULL) { + suppressWarnings({ + if (is.null(allele_column_name) && !is.null(df$allele)) { + allele_column_name <- "allele" + } + }) + + df_dna <- .pivot_df(df, id_column_name, allele_column_name, "DNA") + return(df_dna) } -create_rna_df <- function(df, id_column_name="variant_id", allele_column_name=NULL) { - suppressWarnings({ - if (is.null(allele_column_name) && !is.null(df$allele)) { - allele_column_name <- "allele" - }}) +create_rna_df <- function(df, id_column_name = "variant_id", allele_column_name = NULL) { + suppressWarnings({ + if (is.null(allele_column_name) && !is.null(df$allele)) { + allele_column_name <- "allele" + } + }) - df_rna <- .pivot_df(df, id_column_name, allele_column_name, "RNA") - return(df_rna) + df_rna <- .pivot_df(df, id_column_name, allele_column_name, "RNA") + return(df_rna) } create_var_df <- function(df, map_df) { - if (!all(c("ID", "REF", "ALT") %in% colnames(map_df))) { - stop("map_df must contain columns 'ID', 'REF', and 'ALT'") - } + if (!all(c("ID", "REF", "ALT") %in% colnames(map_df))) { + stop("map_df must contain columns 'ID', 'REF', and 'ALT'") + } + + if (!all(c("name") %in% colnames(df))) { + stop("df must contain column 'name'") + } - if (!all(c("name") %in% colnames(df))) { - stop("df must contain column 'name'") - } + if (!any(df$name %in% map_df$REF) && !any(df$name %in% map_df$ALT)) { + stop( + "No matches found between the 'name' column in 'df' and the ", + "'REF'/'ALT' columns in 'map_df'. Please ensure that these ", + "columns have matching values." + ) + } - if (!any(df$name %in% map_df$REF) && !any(df$name %in% map_df$ALT)) { - stop("No matches found between the 'name' column in 'df' and the 'REF'/'ALT' columns in 'map_df'. Please ensure that these columns have matching values.") - } + map_df <- map_df %>% select(ID, REF, ALT) - map_df <- map_df %>% select(ID, REF, ALT) - - # Merge on REF - df_ref <- merge(df, map_df, by.x = "name", by.y = "REF", all.x = FALSE) - df_ref$allele <- "ref" - df_ref$ALT <- NULL + # Merge on REF + df_ref <- merge(df, map_df, by.x = "name", by.y = "REF", all.x = FALSE) + df_ref$allele <- "ref" + df_ref$ALT <- NULL - # Merge on ALT - df_alt <- merge(df, map_df, by.x = "name", by.y = "ALT", all.x = FALSE) - df_alt$allele <- "alt" - df_alt$REF <- NULL + # Merge on ALT + df_alt <- merge(df, map_df, by.x = "name", by.y = "ALT", all.x = FALSE) + df_alt$allele <- "alt" + df_alt$REF <- NULL - # Combine the results - df_combined <- rbind(df_ref, df_alt) + # Combine the results + df_combined <- rbind(df_ref, df_alt) - # Select and rename columns as necessary - var_df <- df_combined %>% select(variant_id = ID, allele, Barcode, matches("count")) + # Select and rename columns as necessary + var_df <- df_combined %>% select(variant_id = ID, allele, Barcode, matches("count")) - return(var_df) + return(var_df) } -.pivot_df <- function(df, id_column_name="variant_id", allele_column_name, type) { - if (is.null(allele_column_name)) { - df <- df %>% group_by(!!sym(id_column_name)) %>% - mutate(new_idx = row_number()) %>% - ungroup() - } else { - df <- df %>% group_by(!!sym(id_column_name), !!sym(allele_column_name)) %>% - mutate(bc = row_number()) %>% - unite("new_idx", c("bc", !!sym(allele_column_name)), sep = "_", remove = FALSE) %>% - ungroup() - } - df_pivot <- df %>% - pivot_wider(names_from = new_idx, values_from = matches(type, ignore.case=TRUE), names_prefix = "bc", id_cols = id_column_name) %>% - rename_with(~ gsub(paste0("(?i)", type), "sample", .)) %>% - arrange(!!sym(id_column_name)) %>% - as.data.frame() - - row.names(df_pivot) <- df_pivot[,id_column_name] - df_pivot[,id_column_name] <- NULL - return(df_pivot) +.pivot_df <- function(df, id_column_name = "variant_id", allele_column_name, type) { + if (is.null(allele_column_name)) { + df <- df %>% + group_by(!!sym(id_column_name)) %>% + mutate(new_idx = row_number()) %>% + ungroup() + } else { + df <- df %>% + group_by(!!sym(id_column_name), !!sym(allele_column_name)) %>% + mutate(bc = row_number()) %>% + unite("new_idx", c("bc", !!sym(allele_column_name)), sep = "_", remove = FALSE) %>% + ungroup() + } + df_pivot <- df %>% + pivot_wider( + names_from = new_idx, + values_from = matches(type, ignore.case = TRUE), + names_prefix = "bc", id_cols = id_column_name + ) %>% + rename_with(~ gsub(paste0("(?i)", type), "sample", .)) %>% + arrange(!!sym(id_column_name)) %>% + as.data.frame() + + row.names(df_pivot) <- df_pivot[, id_column_name] + df_pivot[, id_column_name] <- NULL + return(df_pivot) } diff --git a/R/utils.R b/R/utils.R index 6c2e3fb..775353c 100755 --- a/R/utils.R +++ b/R/utils.R @@ -15,11 +15,12 @@ utils::globalVariables(c( )) .is_mpra_or_stop <- function(object) { - if (!is(object, "MPRASet")) + if (!is(object, "MPRASet")) { stop("object is of class '", class(object), "', but needs to be of class 'MPRASet'") + } } .onLoad <- function(libname, pkgname) { - # Override the compute_logratio function in the mpra namespace - assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") -} \ No newline at end of file + # Override the compute_logratio function in the mpra namespace + assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") +} diff --git a/inst/scripts/makeMpraSetExample.R b/inst/scripts/makeMpraSetExample.R index 92f5d6f..720c497 100755 --- a/inst/scripts/makeMpraSetExample.R +++ b/inst/scripts/makeMpraSetExample.R @@ -7,7 +7,8 @@ library(mpra) files <- list.files("GSE83894", pattern = "-[DR]NA", full.names = TRUE) samples <- sapply(files %>% str_split("_"), function(x) { str_sub(str_split(x[2], "-")[[1]][1], 3, 3) -}) %>% as.integer +}) %>% + as.integer() cond <- sapply(files %>% str_split("_"), function(x) { str_sub(str_split(x[2], "-")[[1]][1], 1, 2) }) @@ -19,7 +20,9 @@ new_colnames <- paste0(cond, "_", samples, "_", count_type) counts <- lapply(seq_along(files), function(i) { read_tsv(files[i], col_names = c("barcode", new_colnames[i], "eid")) }) -counts <- Reduce(function(data1, data2) { full_join(data1, data2) }, counts) +counts <- Reduce(function(data1, data2) { + full_join(data1, data2) +}, counts) counts <- counts %>% mutate(bcid = barcode) %>% mutate(eid = str_replace(eid, ":[:digit:]*$", "")) %>% @@ -33,13 +36,13 @@ dna_bc <- counts %>% select(eid, bcid, condition, sample, dna) %>% unite(col = cond_sample, condition, sample) %>% spread(key = cond_sample, value = dna) -dna_mat_bc <- as.matrix(dna_bc[,3:ncol(dna_bc)]) +dna_mat_bc <- as.matrix(dna_bc[, 3:ncol(dna_bc)]) rownames(dna_mat_bc) <- dna_bc$bcid rna_bc <- counts %>% select(eid, bcid, condition, sample, rna) %>% unite(col = cond_sample, condition, sample) %>% spread(key = cond_sample, value = rna) -rna_mat_bc <- as.matrix(rna_bc[,3:ncol(rna_bc)]) +rna_mat_bc <- as.matrix(rna_bc[, 3:ncol(rna_bc)]) rownames(rna_mat_bc) <- rna_bc$bcid ## Check that rows are identical in DNA and RNA @@ -47,18 +50,21 @@ identical(rownames(dna_mat_bc), rownames(rna_mat_bc)) ## Check that columns are identical in DNA and RNA identical(colnames(dna_mat_bc), colnames(rna_mat_bc)) -mpraSetExample <- MPRASet(DNA = dna_mat_bc, RNA = rna_mat_bc, - eid = dna_bc$eid, barcode = dna_bc$bcid, - eseq = NULL - ) +mpraSetExample <- MPRASet( + DNA = dna_mat_bc, RNA = rna_mat_bc, + eid = dna_bc$eid, barcode = dna_bc$bcid, + eseq = NULL +) save(mpraSetExample, file = "../../data/mpraSetExample.rda", compress = "xz") ## Aggregated counts counts_summ <- counts %>% group_by(eid, sample, condition) %>% - summarize(agg_rna = sum(rna, na.rm = TRUE), - agg_dna = sum(dna, na.rm = TRUE)) + summarize( + agg_rna = sum(rna, na.rm = TRUE), + agg_dna = sum(dna, na.rm = TRUE) + ) dna <- counts_summ %>% select(eid, sample, condition, agg_dna) %>% unite(col = cond_sample, condition, sample) %>% @@ -68,9 +74,9 @@ rna <- counts_summ %>% unite(col = cond_sample, condition, sample) %>% spread(key = cond_sample, value = agg_rna, sep = "_") -dna_mat <- as.matrix(dna[,2:ncol(dna)]) +dna_mat <- as.matrix(dna[, 2:ncol(dna)]) rownames(dna_mat) <- dna$eid -rna_mat <- as.matrix(rna[,2:ncol(rna)]) +rna_mat <- as.matrix(rna[, 2:ncol(rna)]) rownames(rna_mat) <- rna$eid ## Check that rows are identical in DNA and RNA @@ -79,18 +85,19 @@ identical(rownames(dna_mat), rownames(rna_mat)) identical(colnames(dna_mat), colnames(rna_mat)) -mpraSetAggExample <- MPRASet(DNA = dna_mat, RNA = rna_mat, - eid = rownames(dna_mat), barcode = NULL, eseq = NULL - ) +mpraSetAggExample <- MPRASet( + DNA = dna_mat, RNA = rna_mat, + eid = rownames(dna_mat), barcode = NULL, eseq = NULL +) save(mpraSetAggExample, file = "../../data/mpraSetAggExample.rda", compress = "xz") get_counts_GSE75661 <- function(file) { counts <- read_tsv(file) - counts <- counts %>% + counts <- counts %>% gather(key = type, value = count, -Oligo) %>% separate(type, into = c("type", "sample"), sep = "_") %>% - mutate(sample = str_replace(sample, "r", "") %>% as.numeric, bcid = 1) %>% + mutate(sample = str_replace(sample, "r", "") %>% as.numeric(), bcid = 1) %>% spread(key = type, value = count) %>% dplyr::rename(eid = Oligo, dna = Plasmid) @@ -119,12 +126,16 @@ counts <- get_counts_GSE75661(file) counts <- counts$na12878 counts_summ <- counts %>% - mutate(snp_id = str_replace(eid, "_[AB]$", ""), - allele = str_extract(eid, "[AB]$")) %>% + mutate( + snp_id = str_replace(eid, "_[AB]$", ""), + allele = str_extract(eid, "[AB]$") + ) %>% select(snp_id, allele, sample, bcid, dna, rna) %>% group_by(snp_id, allele, sample) %>% - summarize(agg_rna = sum(rna, na.rm = TRUE), - agg_dna = sum(dna, na.rm = TRUE)) %>% + summarize( + agg_rna = sum(rna, na.rm = TRUE), + agg_dna = sum(dna, na.rm = TRUE) + ) %>% filter(!is.na(allele)) dna <- counts_summ %>% select(snp_id, allele, sample, agg_dna) %>% @@ -138,13 +149,14 @@ rna <- counts_summ %>% cat("Row orders are identical in DNA and RNA:", identical(dna$snp_id, rna$snp_id), "\n") cat("Columns are identical in DNA and RNA:", identical(colnames(dna), colnames(rna)), "\n") -dna_mat <- as.matrix(dna[,2:ncol(dna)]) +dna_mat <- as.matrix(dna[, 2:ncol(dna)]) rownames(dna_mat) <- dna$snp_id -rna_mat <- as.matrix(rna[,2:ncol(rna)]) +rna_mat <- as.matrix(rna[, 2:ncol(rna)]) rownames(rna_mat) <- rna$snp_id -mpraSetAllelicExample <- MPRASet(DNA = dna_mat, RNA = rna_mat, - eid = rownames(dna_mat), barcode = NULL, eseq = NULL - ) +mpraSetAllelicExample <- MPRASet( + DNA = dna_mat, RNA = rna_mat, + eid = rownames(dna_mat), barcode = NULL, eseq = NULL +) save(mpraSetAllelicExample, file = "../../data/mpraSetAllelicExample.rda", compress = "xz") diff --git a/man/mpraSetExample.Rd b/man/mpraSetExample.Rd index 00ec784..b97bf15 100755 --- a/man/mpraSetExample.Rd +++ b/man/mpraSetExample.Rd @@ -7,13 +7,13 @@ Example data for the mpra package. } \description{ - Example data for the MPRA package. \code{mpraSetExample} and - \code{mpraSetAggExample} come from a study by Inoue et al - that compares episomal and lentiviral MPRA. The former contains - data at the barcode level and the latter contains data - aggregated over barcodes. \code{mpraSetAllelicExample} come from - a study by Tewhey et al that looks at regulatory activity of - allelic versions of thousands of SNPs to follow up on prior + Example data for the MPRA package. \code{mpraSetExample} and + \code{mpraSetAggExample} come from a study by Inoue et al + that compares episomal and lentiviral MPRA. The former contains + data at the barcode level and the latter contains data + aggregated over barcodes. \code{mpraSetAllelicExample} come from + a study by Tewhey et al that looks at regulatory activity of + allelic versions of thousands of SNPs to follow up on prior eQTL results. } \usage{ @@ -25,13 +25,13 @@ data("mpraSetAllelicExample") An \code{MPRASet}. } \details{ - \code{mpraSetExample} contains barcode level information for the + \code{mpraSetExample} contains barcode level information for the study by Inoue et al. - \code{mpraSetAggExample} contains count information from - \code{mpraSetExample} where the counts have been summed over + \code{mpraSetAggExample} contains count information from + \code{mpraSetExample} where the counts have been summed over barcodes for each element. - \code{mpraSetAllelicExample} contains count information for the - Tewhey et al study. The counts have been summed over barcodes + \code{mpraSetAllelicExample} contains count information for the + Tewhey et al study. The counts have been summed over barcodes for each element. } \source{ @@ -41,10 +41,10 @@ data("mpraSetAllelicExample") GSE83894 and GSE75661. } \references{ - Inoue, Fumitaka, Martin Kircher, Beth Martin, Gregory M. Cooper, - Daniela M. Witten, Michael T. McManus, Nadav Ahituv, and - Jay Shendure. \emph{A Systematic Comparison Reveals Substantial - Differences in Chromosomal versus Episomal Encoding of Enhancer + Inoue, Fumitaka, Martin Kircher, Beth Martin, Gregory M. Cooper, + Daniela M. Witten, Michael T. McManus, Nadav Ahituv, and + Jay Shendure. \emph{A Systematic Comparison Reveals Substantial + Differences in Chromosomal versus Episomal Encoding of Enhancer Activity}. Genome Research 2017, 27(1):38-52. \doi{10.1101/gr.212092.116}. diff --git a/man/normalize_counts.Rd b/man/normalize_counts.Rd index c03e854..3e7d575 100755 --- a/man/normalize_counts.Rd +++ b/man/normalize_counts.Rd @@ -11,7 +11,7 @@ normalize_counts(object, block = NULL) \item{object}{An object of class \code{MPRASet}.} \item{block}{A vector giving the sample designations of the columns of \code{object}. The default, \code{NULL}, indicates that all columns - are separate samples.} + are separate samples.} } \details{ \code{block} is a vector that is used when the columns of the @@ -21,7 +21,7 @@ allelic versions of an element. In this case, the first $s$ columns of samples. The second $s$ columns give the counts for the alternative allele measured in the same $s$ samples. With 3 samples, \code{block} would be \code{c(1,2,3,1,2,3)}. All columns are scaled to have 10 -million counts. +million counts. } \value{ An object of class \code{MPRASet} with the total count-normalized DNA diff --git a/tests/runTests.R b/tests/runTests.R index 2ccf2bc..d983cc9 100755 --- a/tests/runTests.R +++ b/tests/runTests.R @@ -3,4 +3,4 @@ library(usethis) library(devtools) library(here) -use_testthat() \ No newline at end of file +use_testthat() diff --git a/tests/testthat/test-analyze.R b/tests/testthat/test-analyze.R index 0e3a947..c7d9b32 100644 --- a/tests/testthat/test-analyze.R +++ b/tests/testthat/test-analyze.R @@ -1,4 +1,4 @@ -##Data preparation +## Data preparation # Controlls without effect and tests with half positive half negative effect dna <- as.data.frame(matrix(rnorm(20 * 10, mean = 10, sd = sqrt(0.5)), nrow = 20, ncol = 10)) rownames(dna) <- paste0("label_", sprintf("%06d", 1:20)) @@ -15,43 +15,46 @@ colnames(rna) <- colnames(dna) labels_vec <- c(rep("test_name", 10), rep("control_name", 10)) names(labels_vec) <- paste0("label_", sprintf("%06d", 1:20)) -mpra <- MPRASet(DNA = dna, RNA = rna, eid = rownames(dna), barcode = NULL, label=labels_vec) +mpra <- MPRASet(DNA = dna, RNA = rna, eid = rownames(dna), barcode = NULL, label = labels_vec) nr_reps <- 2 -bcs <- ncol(dna)/ nr_reps +bcs <- ncol(dna) / nr_reps block_vector <- rep(1:nr_reps, each = bcs) -mpralm_fit <- fit_elements(object = mpra, normalize=TRUE, block = block_vector) +mpralm_fit <- fit_elements(object = mpra, normalize = TRUE, block = block_vector) # forcing the output to be MPRASEt as well mpralm_fit_endo <- fit_elements(object = mpra, normalize = TRUE, block = block_vector, endomorphic = TRUE) # with different percentiles -result_95 <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label="control_name", test_label="test_name", side="both") -result_50 <- mpra_treat(mpralm_fit, percentile = 0.50, neg_label="control_name", test_label="test_name", side="both") +result_95 <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "both") +result_50 <- mpra_treat(mpralm_fit, percentile = 0.50, neg_label = "control_name", test_label = "test_name", side = "both") # with different side options -result_right <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label="control_name", test_label="test_name", side = "right") -result_left <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label="control_name", test_label="test_name", side = "left") +result_right <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "right") +result_left <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "left") -#simple result to check output structure -result <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label="control_name", test_label="test_name", side="both") -result_endo <- mpra_treat(mpralm_fit_endo, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "both") +# simple result to check output structure +result <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "both") +result_endo <- mpra_treat(mpralm_fit_endo, + percentile = 0.95, + neg_label = "control_name", test_label = "test_name", side = "both" +) ## testthat calls test_that("mpra_treat", { - expect_error(mpra_treat(mpralm_fit, percentile = 0.95, neg_label="neg_name", test_label="test_name", side="both")) - expect_error(mpra_treat(mpralm_fit, percentile = 0.95, neg_label="control_name", test_label="name", side="both")) + expect_error(mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "neg_name", test_label = "test_name", side = "both")) + expect_error(mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "name", side = "both")) - expect_true(nrow(result_95) > 0) - expect_true(nrow(result_50) > 0) + expect_true(nrow(result_95) > 0) + expect_true(nrow(result_50) > 0) - expect_true(all(result_right$logFC > 0)) - expect_true(all(result_left$logFC < 0)) + expect_true(all(result_right$logFC > 0)) + expect_true(all(result_left$logFC < 0)) - expect_true(nrow(result) > 0) - expect_true("logFC" %in% colnames(result)) - expect_true("AveExpr" %in% colnames(result)) + expect_true(nrow(result) > 0) + expect_true("logFC" %in% colnames(result)) + expect_true("AveExpr" %in% colnames(result)) - expect_equal(result, result_endo) - expect_error(mpra_treat(mpra)) -}) \ No newline at end of file + expect_equal(result, result_endo) + expect_error(mpra_treat(mpra)) +}) diff --git a/tests/testthat/test-fit.R b/tests/testthat/test-fit.R index 92f0251..782c5b8 100644 --- a/tests/testthat/test-fit.R +++ b/tests/testthat/test-fit.R @@ -1,4 +1,4 @@ -##Data preparation for tests +## Data preparation for tests # compute_logratio dna <- as.data.frame(matrix(10, nrow = 10, ncol = 10)) @@ -10,14 +10,14 @@ rownames(rna) <- paste0("name_", sprintf("%06d", 1:10)) colnames(rna) <- paste0("sample_count_", rep(1:2, each = 5), "_bc_", rep(1:5, 2)) # first set with no effect -labels_vec <- c(rep("test_label_1", 5), rep("test_label_2",5)) -names(labels_vec) <- rownames(dna) -mpra_log_1 <- MPRASet(DNA = dna, RNA = dna, eid = row.names(dna), barcode = NULL, label=labels_vec) +labels_vec <- c(rep("test_label_1", 5), rep("test_label_2", 5)) +names(labels_vec) <- rownames(dna) +mpra_log_1 <- MPRASet(DNA = dna, RNA = dna, eid = row.names(dna), barcode = NULL, label = labels_vec) # second set with missing value in first cell dna_log_2 <- dna dna_log_2["name_000001", "sample_count_1_bc_1"] <- NA -mpra_log_2 <- MPRASet(DNA = dna_log_2, RNA = dna, eid = row.names(dna), barcode = NULL, label=labels_vec) +mpra_log_2 <- MPRASet(DNA = dna_log_2, RNA = dna, eid = row.names(dna), barcode = NULL, label = labels_vec) # block vector for replicates nr_reps <- 2 @@ -25,10 +25,10 @@ bcs <- ncol(dna) / nr_reps block_vector <- rep(1:nr_reps, each = bcs) # to test outcome type endometric == TRUE -fit_MPRA_Set <- fit_elements(object = mpra_log_2, normalize=TRUE, block = block_vector, endomorphic = TRUE) -fit_MArrayLM <- fit_elements(object = mpra_log_2, normalize=TRUE, block = block_vector) +fit_MPRA_Set <- fit_elements(object = mpra_log_2, normalize = TRUE, block = block_vector, endomorphic = TRUE) +fit_MArrayLM <- fit_elements(object = mpra_log_2, normalize = TRUE, block = block_vector) -#expected results +# expected results res_log_1 <- as.data.frame(matrix(0, nrow = length(dna), ncol = length(dna))) rownames(res_log_1) <- paste0("name_", sprintf("%06d", 1:10)) colnames(res_log_1) <- paste0("sample_count_", rep(1:2, each = 5), "_bc_", rep(1:5, 2)) @@ -38,11 +38,11 @@ res_log_2[1, 1] <- NA ## testthat calls test_that("compute_logratio", { - expect_equal(compute_logratio(mpra_log_1, aggregate="none"), res_log_1) - expect_equal(compute_logratio(mpra_log_2, aggregate="none"), res_log_2) + expect_equal(compute_logratio(mpra_log_1, aggregate = "none"), res_log_1) + expect_equal(compute_logratio(mpra_log_2, aggregate = "none"), res_log_2) }) test_that("fit_elements", { - expect_equal(class(fit_MPRA_Set)[1], "MPRASet") - expect_equal(class(fit_MArrayLM)[1], "MArrayLM") -}) \ No newline at end of file + expect_equal(class(fit_MPRA_Set)[1], "MPRASet") + expect_equal(class(fit_MArrayLM)[1], "MArrayLM") +}) diff --git a/tests/testthat/test-preprocess.R b/tests/testthat/test-preprocess.R index c2d1d1f..7728f6e 100644 --- a/tests/testthat/test-preprocess.R +++ b/tests/testthat/test-preprocess.R @@ -4,123 +4,124 @@ library(usethis) library(devtools) library(tidyr) library(dplyr) -##Data preparation for tests +## Data preparation for tests -#Downsample_barcodes +# Downsample_barcodes empty_df <- data.frame( - name = character(), - allele = character(), - Barcode = character(), - count = numeric() + name = character(), + allele = character(), + Barcode = character(), + count = numeric() ) nan_df <- data.frame( - name = c("A", "B", NA, "D"), - allele = c("ref", NA, "alt", "ref"), - Barcode = c("BC1", "BC2", NA, "BC4"), - count = c(10, NA, 5, NA) + name = c("A", "B", NA, "D"), + allele = c("ref", NA, "alt", "ref"), + Barcode = c("BC1", "BC2", NA, "BC4"), + count = c(10, NA, 5, NA) ) single_column_df <- data.frame( - name = c("A", "B", "C", "D") + name = c("A", "B", "C", "D") ) -#create_var_df +# create_var_df df_var_1 <- data.frame( - name = c("A", "B", "C"), - Barcode = c("BC1", "BC2", "BC3"), - count = c(10, 20, 30) + name = c("A", "B", "C"), + Barcode = c("BC1", "BC2", "BC3"), + count = c(10, 20, 30) ) map_df_var_1 <- data.frame( - ID = c("var1", "var2", "var3", "var4"), - REF = c("A", "A", "B", "D"), - ALT = c("E", "F", "G", "C") + ID = c("var1", "var2", "var3", "var4"), + REF = c("A", "A", "B", "D"), + ALT = c("E", "F", "G", "C") ) res_var_1 <- data.frame( - variant_id = c("var1", "var2", "var3", "var4"), - allele = c("ref", "ref", "ref", "alt"), - Barcode = c("BC1", "BC1", "BC2", "BC3"), - count = c(10, 10, 20, 30) + variant_id = c("var1", "var2", "var3", "var4"), + allele = c("ref", "ref", "ref", "alt"), + Barcode = c("BC1", "BC1", "BC2", "BC3"), + count = c(10, 10, 20, 30) ) map_df_var_2 <- data.frame( - ID = c("var1", "var2", "var3", "var4"), - REF = c("U", "V", "W", "X"), - ALT = c("Y", "Z", "Q", "R") + ID = c("var1", "var2", "var3", "var4"), + REF = c("U", "V", "W", "X"), + ALT = c("Y", "Z", "Q", "R") ) res_var_2 <- data.frame( - variant_id = character(), - allele = character(), - Barcode = character(), - count = numeric() + variant_id = character(), + allele = character(), + Barcode = character(), + count = numeric() ) -#create_dna_df +# create_dna_df df_dna_1 <- data.frame( - variant_id = c("var1", "var2"), - allele = c("ref", "alt"), - DNA_A = c(100, 200), - DNA_B = c(300, 400)) + variant_id = c("var1", "var2"), + allele = c("ref", "alt"), + DNA_A = c(100, 200), + DNA_B = c(300, 400) +) res_dna_1 <- data.frame( - sample_A_bc1_ref = c(100, NA), - sample_A_bc1_alt = c(NA, 200), - sample_B_bc1_ref = c(300, NA), - sample_B_bc1_alt = c(NA, 400), - row.names = c("var1", "var2")) + sample_A_bc1_ref = c(100, NA), + sample_A_bc1_alt = c(NA, 200), + sample_B_bc1_ref = c(300, NA), + sample_B_bc1_alt = c(NA, 400), + row.names = c("var1", "var2") +) df_dna_2 <- data.frame( - variant_id = c("var1", "var2"), - custom_allele = c("ref", "alt"), - DNA_A = c(100, 200), - DNA_B = c(300, 400)) + variant_id = c("var1", "var2"), + custom_allele = c("ref", "alt"), + DNA_A = c(100, 200), + DNA_B = c(300, 400) +) res_dna_2 <- data.frame( - sample_A_bc1_ref = c(100, NA), - sample_A_bc1_alt = c(NA, 200), - sample_B_bc1_ref = c(300, NA), - sample_B_bc1_alt = c(NA, 400), - row.names = c("var1", "var2")) + sample_A_bc1_ref = c(100, NA), + sample_A_bc1_alt = c(NA, 200), + sample_B_bc1_ref = c(300, NA), + sample_B_bc1_alt = c(NA, 400), + row.names = c("var1", "var2") +) df_dna_3 <- data.frame( - DNA_A = c(100, 200), - DNA_B = c(300, 400)) + DNA_A = c(100, 200), + DNA_B = c(300, 400) +) df_dna_4 <- data.frame( - variant_id = character(), - DNA_A = numeric(), - DNA_B = numeric()) + variant_id = character(), + DNA_A = numeric(), + DNA_B = numeric() +) df_dna_5 <- data.frame( - name = c("var1", "var2"), - allele = c("ref", "alt"), - DNA_A = c(100, 200)) + name = c("var1", "var2"), + allele = c("ref", "alt"), + DNA_A = c(100, 200) +) -##testthat calls +## testthat calls test_that("downsample_barcodes", { - - expect_equal(as.data.frame(downsample_barcodes(empty_df)), empty_df) - expect_equal(as.data.frame(downsample_barcodes(nan_df)), nan_df) - expect_true(is.data.frame(downsample_barcodes(empty_df))) - + expect_equal(as.data.frame(downsample_barcodes(empty_df)), empty_df) + expect_equal(as.data.frame(downsample_barcodes(nan_df)), nan_df) + expect_true(is.data.frame(downsample_barcodes(empty_df))) }) test_that("create_var_df", { - - expect_equal(create_var_df(df_var_1,map_df_var_1), res_var_1) - expect_error(create_var_df(df_var_1,map_df_var_2)) - + expect_equal(create_var_df(df_var_1, map_df_var_1), res_var_1) + expect_error(create_var_df(df_var_1, map_df_var_2)) }) test_that("create_dna_df", { - - expect_equal(create_dna_df(df_dna_1), res_dna_1) - expect_equal(create_dna_df(df_dna_2, allele_column_name = "custom_allele"), res_dna_2) - expect_error(create_dna_df(df_dna_3)) - expect_equal(create_dna_df(df_dna_4), data.frame(row.names = character())) - expect_error(create_dna_df(df_dna_5, id_column_name = "variant_id")) - + expect_equal(create_dna_df(df_dna_1), res_dna_1) + expect_equal(create_dna_df(df_dna_2, allele_column_name = "custom_allele"), res_dna_2) + expect_error(create_dna_df(df_dna_3)) + expect_equal(create_dna_df(df_dna_4), data.frame(row.names = character())) + expect_error(create_dna_df(df_dna_5, id_column_name = "variant_id")) }) From 02ec22a36302e2b9c6f5e98cb6797fc361661436 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:19:26 +0100 Subject: [PATCH 05/37] fixing spellings --- DESCRIPTION | 4 ++-- R/preprocess.R | 7 ++++--- README.md | 2 +- man/MPRASet-class.Rd | 2 +- man/get_precision_weights.Rd | 4 ++-- man/mpralm.Rd | 2 +- vignettes/BCalm.Rmd | 6 +++--- 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 2930046..5123c99 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: BCalm Version: 0.99.0 -Title: Barcode Analysis using linear models -Description: Tools for data management, count preprocessing, and differential analysis in massively parallel report assays (MPRA). +Title: Barcode Analysis Using Linear Models +Description: Tools for data management, count preprocessing, and differential analysis in massively parallel reporter assays (MPRA). Authors@R: c( person("Pia", "Keukeleire", role = c("cre", "aut"), email = "pia.keukeleire@uksh.de"), person("Martin", "Kircher", role = "aut")) diff --git a/R/preprocess.R b/R/preprocess.R index 41d0358..7a3d9f4 100644 --- a/R/preprocess.R +++ b/R/preprocess.R @@ -1,8 +1,9 @@ downsample_barcodes <- function(df, id_column_name = "name", percentile = 0.95) { if (!id_column_name %in% names(df)) { - warning(paste("Column", id_column_name, "does not exist in the DataFrame. - Provide an existing column name to the variable id_column_name. Returning the original DataFrame.")) - return(df) # Return the original DataFrame if the column does not exist + warning(paste("Column", id_column_name, "does not exist in the data frame.", + "Provide an existing column name to the variable id_column_name.", + "Returning the original data frame.")) + return(df) # Return the original data frame if the column does not exist } if (any(names(df) == "allele")) { # Calculate the 0.95th quantile of the number of barcodes across all groups diff --git a/README.md b/README.md index 72d2675..a3b022f 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BCalm and analyze your MPRA data -BCalm is a package that provides a modification from [the mpralm package](https://github.com/hansenlab/mpra/tree/master), an R package that provides tools for differential analysis in MPRA studies. +BCalm is a package that provides a modification of [the mpralm package](https://github.com/hansenlab/mpra/tree/master), an R package that provides tools for differential analysis in MPRA studies. BCalm allows users to use individual barcodes as model input. See the [paper](https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-025-06065-9) for a detailed description, and the vignette for examples on how to run BCalm. diff --git a/man/MPRASet-class.Rd b/man/MPRASet-class.Rd index eeb727d..15bf6f9 100755 --- a/man/MPRASet-class.Rd +++ b/man/MPRASet-class.Rd @@ -66,7 +66,7 @@ getEseq(object) Class \code{"\linkS4class{SummarizedExperiment}"}, directly. } \value{ - The constrcutor function \code{MPRASet} returns an object of class + The constructor function \code{MPRASet} returns an object of class \code{"MPRASet"}. } \section{Accessors}{ diff --git a/man/get_precision_weights.Rd b/man/get_precision_weights.Rd index 1fb590a..8c97693 100755 --- a/man/get_precision_weights.Rd +++ b/man/get_precision_weights.Rd @@ -21,8 +21,8 @@ get_precision_weights(logr, design, log_dna, span = 0.4, plot = TRUE, ...) } \details{ Residual standard deviations are computed using the supplied outcomes -and design matrix. The square root of the the residual standard -deviations are modeled as a function of the average log2 aggregated DNA +and design matrix. The square root of the residual standard +deviations is modeled as a function of the average log2 aggregated DNA counts to estimate the copy number-variance relationship. } \value{ diff --git a/man/mpralm.Rd b/man/mpralm.Rd index e2c3163..ec3630a 100755 --- a/man/mpralm.Rd +++ b/man/mpralm.Rd @@ -33,7 +33,7 @@ mpralm(object, design, aggregate = c("mean", "sum", "none"), normalize = TRUE, mean-variance relationship.} } \details{ -Using \code{method_type = "corr_groups"} use the +Using \code{method_type = "corr_groups"} uses the \code{duplicateCorrelation} function from the \code{limma} package to estimate the intra-replicate correlation of log-ratio values. } diff --git a/vignettes/BCalm.Rmd b/vignettes/BCalm.Rmd index 2173eca..d9ea081 100644 --- a/vignettes/BCalm.Rmd +++ b/vignettes/BCalm.Rmd @@ -31,10 +31,10 @@ The `r Githubpkg('kircherlab/BCalm')` package provides a framework for analyzing ## Citing BCalm The BCalm package is still unpublished, citing details will be provided later. When using BCalm, please cite the `mpra` package [@mpralm] and the limma-voom framework [@voom]. -## Additional information for the installation +## Additional information for installation The package is currently available on GitHub and can be installed using remotes [@remotes] or devtools [@devtools]. The package requires R >= 3.5, <= 4.4.0. -If you have any trouble with the provided package feel free to let us know by creating an issue directly in the [BCalm GitHub repository](https://github.com/kircherlab/BCalm). +If you have any trouble with the provided package, feel free to let us know by creating an issue directly in the [BCalm GitHub repository](https://github.com/kircherlab/BCalm). To display the vignette correctly, the `kableExtra` and `ggplot2` packages are required. # Preprocessing data @@ -69,7 +69,7 @@ kable(head(var_df), "html") %>% kable_styling("striped") %>% scroll_box(width = ``` -Optionally, downsampling can be performed to our dataframe `var_df` now. The function `downsample_barcodes` allows users to reduce the number of barcodes while retaining a representative subset. This way, the number of barcodes of oligos with many barcodes are reduced, which simplifies the data handling and reduces the sparseness of the data table (i.e. increased speed and reduced memory requirements). The degree of downsampling can be controlled by adjusting the sampling rate, which is expressed as a percentile value `percentile`, with a default of 0.975. +Optionally, downsampling can be performed on our data frame `var_df` now. The function `downsample_barcodes` allows users to reduce the number of barcodes while retaining a representative subset. This way, the number of barcodes for oligos with many barcodes is reduced, which simplifies data handling and reduces the sparseness of the data table (i.e., increased speed and reduced memory requirements). The degree of downsampling can be controlled by adjusting the sampling rate, which is expressed as a percentile value `percentile`, with a default of 0.975. The `id_column_name` argument specifies the column in the input data frame that contains the unique identifiers for each variant (here `variant_id`). ```{r Variant Downsampling} From dc941646f17f855e927080c50efe516b7cf58589 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:26:33 +0100 Subject: [PATCH 06/37] github actions! --- .github/workflows/R-CMD-check.yml | 28 +++++++++++++++++++++ .github/workflows/labeler.yml | 13 ++++++++++ .github/workflows/pkgdown.yml | 34 ++++++++++++++++++++++++++ .github/workflows/spellcheck.yml | 24 ++++++++++++++++++ .github/workflows/test-coverage.yml | 38 +++++++++++++++++++++++++++++ .travis.yml | 8 ------ 6 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/R-CMD-check.yml create mode 100644 .github/workflows/labeler.yml create mode 100644 .github/workflows/pkgdown.yml create mode 100644 .github/workflows/spellcheck.yml create mode 100644 .github/workflows/test-coverage.yml delete mode 100755 .travis.yml diff --git a/.github/workflows/R-CMD-check.yml b/.github/workflows/R-CMD-check.yml new file mode 100644 index 0000000..06d507f --- /dev/null +++ b/.github/workflows/R-CMD-check.yml @@ -0,0 +1,28 @@ +--- +name: R-CMD-check +on: + push: + branches: [master, development] + pull_request: + branches: [master, development] + +jobs: + R-CMD-check: + runs-on: ${{ matrix.config.os }} + strategy: + fail-fast: false + matrix: + config: + - {os: ubuntu-latest, r: 'release'} + - {os: ubuntu-latest, r: 'devel'} + - {os: macos-latest, r: 'release'} + - {os: windows-latest, r: 'release'} + steps: + - uses: actions/checkout@v4 + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.config.r }} + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::rcmdcheck + - uses: r-lib/actions/check-r-package@v2 diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 0000000..d6bd070 --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,13 @@ +--- +name: "Pull Request Labeler" +on: + pull_request_target: + +jobs: + labeler: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v5 diff --git a/.github/workflows/pkgdown.yml b/.github/workflows/pkgdown.yml new file mode 100644 index 0000000..4ba69ac --- /dev/null +++ b/.github/workflows/pkgdown.yml @@ -0,0 +1,34 @@ +--- +name: pkgdown +on: + push: + branches: [master] + pull_request: + branches: [master] + release: + types: [published] + +jobs: + pkgdown: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: r-lib/actions/setup-pandoc@v2 + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::pkgdown, local::. + - name: Build site + run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) + shell: Rscript {0} + - name: Deploy to GitHub pages 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: docs diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml new file mode 100644 index 0000000..c6fdc61 --- /dev/null +++ b/.github/workflows/spellcheck.yml @@ -0,0 +1,24 @@ +--- +name: Spell Check +on: + push: + branches: [master, development] + pull_request: + branches: [master, development] + +jobs: + spellcheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: r-lib/actions/setup-r@v2 + - name: Install spelling package + run: Rscript -e 'install.packages("spelling")' + - name: Check spelling + run: Rscript -e 'spelling::spell_check_package()' + - name: Check for spelling errors + run: | + if [ -s spelling.txt ]; then + cat spelling.txt + exit 1 + fi diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml new file mode 100644 index 0000000..b9512de --- /dev/null +++ b/.github/workflows/test-coverage.yml @@ -0,0 +1,38 @@ +--- +name: test-coverage +on: + push: + branches: [master, development] + pull_request: + branches: [master, development] + +jobs: + test-coverage: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + - uses: r-lib/actions/setup-r@v2 + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::covr + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") + ) + shell: Rscript {0} + - name: Show testthat output + if: always() + run: | + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures + path: ${{ runner.temp }}/package diff --git a/.travis.yml b/.travis.yml deleted file mode 100755 index 959b02e..0000000 --- a/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: r -r: bioc-devel -cache: packages -warnings_are_errors: false -r_github_packages: - - jimhester/covr -after_success: - - Rscript -e 'covr::codecov()' From 46f9e23e7d47684405f6eeaa0cea8b0a000d69d3 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:29:13 +0100 Subject: [PATCH 07/37] check linter --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 338f868..3ad376d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,6 +21,8 @@ jobs: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ENABLE_GITHUB_ACTIONS_STEP_SUMMARY: true + ENABLE_GITHUB_PULL_REQUEST_SUMMARY_COMMENT: true VALIDATE_JSON: true VALIDATE_YAML: true YAML_CONFIG_FILE: .yamllint.yml From edb58985fc28cd3d8c733a7c68684fc7320cbe7f Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:38:19 +0100 Subject: [PATCH 08/37] Refactor GitHub Actions workflows and add YAML linting configuration --- .github/workflows/main.yml | 3 +-- .github/workflows/test-coverage.yml | 2 +- .yamllint.yml | 10 ++++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .yamllint.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3ad376d..92617e4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,8 +21,7 @@ jobs: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - ENABLE_GITHUB_ACTIONS_STEP_SUMMARY: true - ENABLE_GITHUB_PULL_REQUEST_SUMMARY_COMMENT: true + SAVE_SUPER_LINTER_SUMMARY: true VALIDATE_JSON: true VALIDATE_YAML: true YAML_CONFIG_FILE: .yamllint.yml diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index b9512de..4cd4b15 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -12,7 +12,7 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: r-lib/actions/setup-r@v2 - uses: r-lib/actions/setup-r-dependencies@v2 with: diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 0000000..4a2a0f9 --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,10 @@ +--- +extends: default + +rules: + # 80 chars should be enough, but don't fail if a line is longer + line-length: + max: 127 + level: warning + comments: + min-spaces-from-content: 1 From 20c752320eea69e9e5426cfe7ba47c9da86078f8 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:38:25 +0100 Subject: [PATCH 09/37] Update GitHub Actions workflows to use latest action versions and improve automation --- .github/workflows/R-CMD-check.yml | 6 +++--- .github/workflows/labeler.yml | 2 +- .github/workflows/pkgdown.yml | 2 +- .github/workflows/spellcheck.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/R-CMD-check.yml b/.github/workflows/R-CMD-check.yml index 06d507f..82ff939 100644 --- a/.github/workflows/R-CMD-check.yml +++ b/.github/workflows/R-CMD-check.yml @@ -15,10 +15,10 @@ jobs: config: - {os: ubuntu-latest, r: 'release'} - {os: ubuntu-latest, r: 'devel'} - - {os: macos-latest, r: 'release'} - - {os: windows-latest, r: 'release'} + # - {os: macos-latest, r: 'release'} + # - {os: windows-latest, r: 'release'} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: r-lib/actions/setup-r@v2 with: r-version: ${{ matrix.config.r }} diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index d6bd070..e1adb9c 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -10,4 +10,4 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@v5 + - uses: actions/labeler@v6 diff --git a/.github/workflows/pkgdown.yml b/.github/workflows/pkgdown.yml index 4ba69ac..6e1082d 100644 --- a/.github/workflows/pkgdown.yml +++ b/.github/workflows/pkgdown.yml @@ -16,7 +16,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: r-lib/actions/setup-pandoc@v2 - uses: r-lib/actions/setup-r@v2 with: diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index c6fdc61..a2994ba 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -10,7 +10,7 @@ jobs: spellcheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: r-lib/actions/setup-r@v2 - name: Install spelling package run: Rscript -e 'install.packages("spelling")' From 6c4f0fb255719bdeea345eb10816c38ac7d00e65 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:40:21 +0100 Subject: [PATCH 10/37] Add R-CMD-check workflow for automated R package checks --- .github/workflows/{R-CMD-check.yml => r-cmd-check.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{R-CMD-check.yml => r-cmd-check.yml} (100%) diff --git a/.github/workflows/R-CMD-check.yml b/.github/workflows/r-cmd-check.yml similarity index 100% rename from .github/workflows/R-CMD-check.yml rename to .github/workflows/r-cmd-check.yml From cd2bfd6c5e73b458c57155ac3f26e4f500f4da6e Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 13:46:20 +0100 Subject: [PATCH 11/37] Refactor workflow files to improve YAML linting configuration and remove unnecessary linters --- .github/workflows/labeler.yml | 2 +- .github/workflows/pkgdown.yml | 2 +- .github/workflows/r-cmd-check.yml | 2 +- .github/workflows/spellcheck.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .lintr | 3 +-- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index e1adb9c..5d74d31 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,6 +1,6 @@ --- name: "Pull Request Labeler" -on: +on: # yamllint disable-line rule:truthy pull_request_target: jobs: diff --git a/.github/workflows/pkgdown.yml b/.github/workflows/pkgdown.yml index 6e1082d..5ae34aa 100644 --- a/.github/workflows/pkgdown.yml +++ b/.github/workflows/pkgdown.yml @@ -1,6 +1,6 @@ --- name: pkgdown -on: +on: # yamllint disable-line rule:truthy push: branches: [master] pull_request: diff --git a/.github/workflows/r-cmd-check.yml b/.github/workflows/r-cmd-check.yml index 82ff939..57222b2 100644 --- a/.github/workflows/r-cmd-check.yml +++ b/.github/workflows/r-cmd-check.yml @@ -1,6 +1,6 @@ --- name: R-CMD-check -on: +on: # yamllint disable-line rule:truthy push: branches: [master, development] pull_request: diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index a2994ba..0009ee9 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -1,6 +1,6 @@ --- name: Spell Check -on: +on: # yamllint disable-line rule:truthy push: branches: [master, development] pull_request: diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 4cd4b15..1023339 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -1,6 +1,6 @@ --- name: test-coverage -on: +on: # yamllint disable-line rule:truthy push: branches: [master, development] pull_request: diff --git a/.lintr b/.lintr index 5166a1b..b694916 100644 --- a/.lintr +++ b/.lintr @@ -3,6 +3,5 @@ linters: linters_with_defaults( indentation_linter(indent = 4), commented_code_linter = NULL, object_usage_linter = NULL, - object_name_linter = NULL, - cyclocomp_linter(complexity_limit = 30) + object_name_linter = NULL ) From a7b5f2b2816cf636f9e0f2ec9ac4764fa15aa703 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 14:34:38 +0100 Subject: [PATCH 12/37] Refactor utils and test files to streamline code and improve readability --- R/utils.R | 2 +- tests/runTests.R | 5 +---- tests/testthat/test-preprocess.R | 2 -- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/R/utils.R b/R/utils.R index 775353c..43f85c2 100755 --- a/R/utils.R +++ b/R/utils.R @@ -22,5 +22,5 @@ utils::globalVariables(c( .onLoad <- function(libname, pkgname) { # Override the compute_logratio function in the mpra namespace - assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") + base::assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") } diff --git a/tests/runTests.R b/tests/runTests.R index d983cc9..702c01f 100755 --- a/tests/runTests.R +++ b/tests/runTests.R @@ -1,6 +1,3 @@ library(testthat) -library(usethis) -library(devtools) -library(here) -use_testthat() +test_dir("testthat") diff --git a/tests/testthat/test-preprocess.R b/tests/testthat/test-preprocess.R index 7728f6e..beed0b5 100644 --- a/tests/testthat/test-preprocess.R +++ b/tests/testthat/test-preprocess.R @@ -1,7 +1,5 @@ library(mpra) library(testthat) -library(usethis) -library(devtools) library(tidyr) library(dplyr) ## Data preparation for tests From 3b5e9b545279182366cb6d6fb5fe07806d5cc206 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 14:50:38 +0100 Subject: [PATCH 13/37] Fix namespace assignment in .onLoad function to use utils::assignInNamespace --- R/utils.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils.R b/R/utils.R index 43f85c2..be8d68b 100755 --- a/R/utils.R +++ b/R/utils.R @@ -22,5 +22,5 @@ utils::globalVariables(c( .onLoad <- function(libname, pkgname) { # Override the compute_logratio function in the mpra namespace - base::assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") + utils::assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") } From d6c8a7540ed1af074e76a809e444964eefbb4f5b Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 15:24:08 +0100 Subject: [PATCH 14/37] Refactor .onLoad function to properly unlock and lock the compute_logratio binding in the mpra namespace --- R/utils.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/utils.R b/R/utils.R index be8d68b..2c0fefa 100755 --- a/R/utils.R +++ b/R/utils.R @@ -22,5 +22,8 @@ utils::globalVariables(c( .onLoad <- function(libname, pkgname) { # Override the compute_logratio function in the mpra namespace - utils::assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") + ns <- base::getNamespace("mpra") + base::unlockBinding("compute_logratio", ns) + base::assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") + base::lockBinding("compute_logratio", ns) } From 1d74ba828592db2107a9a19d8058315ed7b72b1c Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 15:32:03 +0100 Subject: [PATCH 15/37] Use utils::assignInNamespace for compute_logratio in .onLoad function --- R/utils.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils.R b/R/utils.R index 2c0fefa..34958eb 100755 --- a/R/utils.R +++ b/R/utils.R @@ -24,6 +24,6 @@ utils::globalVariables(c( # Override the compute_logratio function in the mpra namespace ns <- base::getNamespace("mpra") base::unlockBinding("compute_logratio", ns) - base::assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") + utils::assignInNamespace("compute_logratio", compute_logratio, ns = "mpra") base::lockBinding("compute_logratio", ns) } From 52960c30df4cc3e790746dfc998f5f7edb56dd6b Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 16:37:10 +0100 Subject: [PATCH 16/37] Refactor project files: update .Rbuildignore, .gitignore, DESCRIPTION, and LICENSE for improved organization and clarity --- .Rbuildignore | 8 +++++++- .gitignore | 3 ++- DESCRIPTION | 14 +++++--------- LICENSE | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index 2f20fc7..14f1da3 100755 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,9 @@ -^\.travis\.yml$ +.editorconfig +.gitignore +.lintr +.yamllint.yml +..Rcheck +.git +.github README.md diff --git a/.gitignore b/.gitignore index 2f634dc..82e938a 100755 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ auto/ .DS_Store inst/doc *.pdf -*.html \ No newline at end of file +*.html +..Rcheck diff --git a/DESCRIPTION b/DESCRIPTION index 5123c99..37d1772 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -5,13 +5,14 @@ Description: Tools for data management, count preprocessing, and differential an Authors@R: c( person("Pia", "Keukeleire", role = c("cre", "aut"), email = "pia.keukeleire@uksh.de"), person("Martin", "Kircher", role = "aut")) +Author: Pia Keukeleire [cre, aut], Martin Kircher [aut] +Maintainer: Pia Keukeleire Depends: R (>= 3.5), methods, BiocGenerics, SummarizedExperiment, - limma, - curl + limma Suggests: BiocStyle, knitr, @@ -29,12 +30,7 @@ Imports: statmod, tidyr, dplyr, - rlang, - GenomeInfoDb, - IRanges, - GenomicRanges, - Biobase, - DelayedArray + rlang Collate: mpra_set.R utils.R @@ -42,7 +38,7 @@ Collate: preprocess.R analyze.R VignetteBuilder: knitr -License: MIT +License: MIT + file LICENSE URL: https://github.com/kircherlab/BCalm BugReports: https://github.com/kircherlab/BCalm/issues biocViews: Software, GeneRegulation, Sequencing, FunctionalGenomics diff --git a/LICENSE b/LICENSE index debe8ec..bf41129 100644 --- a/LICENSE +++ b/LICENSE @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. From 41bb1b9fafd4f73ce8cb0c8d1cc1db20c4bfe96b Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 26 Feb 2026 16:39:08 +0100 Subject: [PATCH 17/37] Refactor utils and test files: update global variables, streamline test cases, and remove redundant parameters for clarity --- R/utils.R | 3 ++- tests/runTests.R | 2 +- tests/testthat/test-analyze.R | 21 +++++---------------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/R/utils.R b/R/utils.R index 34958eb..7f9dfb3 100755 --- a/R/utils.R +++ b/R/utils.R @@ -11,7 +11,8 @@ utils::globalVariables(c( "labs", "xlim", "geom_vline", "scale_color_manual", "guide_legend", "after_stat", # NSE column names used in dplyr and ggplot2 operations - "allele", "row_num", "n", "ID", "REF", "ALT", "max_bc", "label", "logFC" + "allele", "row_num", "n", "ID", "REF", "ALT", "max_bc", "label", "logFC", + "Barcode", "new_idx" )) .is_mpra_or_stop <- function(object) { diff --git a/tests/runTests.R b/tests/runTests.R index 702c01f..7b0dbdb 100755 --- a/tests/runTests.R +++ b/tests/runTests.R @@ -1,3 +1,3 @@ library(testthat) -test_dir("testthat") +test_check("BCalm") diff --git a/tests/testthat/test-analyze.R b/tests/testthat/test-analyze.R index c7d9b32..6cbf026 100644 --- a/tests/testthat/test-analyze.R +++ b/tests/testthat/test-analyze.R @@ -26,31 +26,20 @@ mpralm_fit <- fit_elements(object = mpra, normalize = TRUE, block = block_vector mpralm_fit_endo <- fit_elements(object = mpra, normalize = TRUE, block = block_vector, endomorphic = TRUE) # with different percentiles -result_95 <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "both") -result_50 <- mpra_treat(mpralm_fit, percentile = 0.50, neg_label = "control_name", test_label = "test_name", side = "both") - -# with different side options -result_right <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "right") -result_left <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "left") +result_95 <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name") +result_50 <- mpra_treat(mpralm_fit, percentile = 0.50, neg_label = "control_name") # simple result to check output structure -result <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "test_name", side = "both") -result_endo <- mpra_treat(mpralm_fit_endo, - percentile = 0.95, - neg_label = "control_name", test_label = "test_name", side = "both" -) +result <- mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name") +result_endo <- mpra_treat(mpralm_fit_endo, percentile = 0.95, neg_label = "control_name") ## testthat calls test_that("mpra_treat", { - expect_error(mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "neg_name", test_label = "test_name", side = "both")) - expect_error(mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "control_name", test_label = "name", side = "both")) + expect_error(mpra_treat(mpralm_fit, percentile = 0.95, neg_label = "neg_name")) expect_true(nrow(result_95) > 0) expect_true(nrow(result_50) > 0) - expect_true(all(result_right$logFC > 0)) - expect_true(all(result_left$logFC < 0)) - expect_true(nrow(result) > 0) expect_true("logFC" %in% colnames(result)) expect_true("AveExpr" %in% colnames(result)) From cba8422298b46a76c6067bdb6fcae8586f226285 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:26:00 +0100 Subject: [PATCH 18/37] Add documentation for new functions and datasets: create_dna_df, create_rna_df, create_var_df, downsample_barcodes, fit_elements, getLabel, mpra_treat, plot_groups, and BcSetExample --- man/BcSetExample.Rd | 32 ++++++++++++++++++++++++++++++++ man/MPRASet-class.Rd | 12 ++++++------ man/create_dna_df.Rd | 26 ++++++++++++++++++++++++++ man/create_rna_df.Rd | 26 ++++++++++++++++++++++++++ man/create_var_df.Rd | 30 ++++++++++++++++++++++++++++++ man/downsample_barcodes.Rd | 27 +++++++++++++++++++++++++++ man/fit_elements.Rd | 29 +++++++++++++++++++++++++++++ man/getLabel.Rd | 24 ++++++++++++++++++++++++ man/mpra_treat.Rd | 30 ++++++++++++++++++++++++++++++ man/plot_groups.Rd | 27 +++++++++++++++++++++++++++ 10 files changed, 257 insertions(+), 6 deletions(-) create mode 100644 man/BcSetExample.Rd create mode 100644 man/create_dna_df.Rd create mode 100644 man/create_rna_df.Rd create mode 100644 man/create_var_df.Rd create mode 100644 man/downsample_barcodes.Rd create mode 100644 man/fit_elements.Rd create mode 100644 man/getLabel.Rd create mode 100644 man/mpra_treat.Rd create mode 100644 man/plot_groups.Rd diff --git a/man/BcSetExample.Rd b/man/BcSetExample.Rd new file mode 100644 index 0000000..0776085 --- /dev/null +++ b/man/BcSetExample.Rd @@ -0,0 +1,32 @@ +\name{BcSetExample} +\alias{BcSetExample} +\alias{LabelExample} +\alias{MapExample} +\alias{MapExampleOriginalIds} +\docType{data} +\title{Example Data for BCalm} +\description{ + Example datasets for the BCalm package demonstrating typical MPRA data + structures and preprocessing workflows. +} +\usage{ +data("BcSetExample") +data("LabelExample") +data("MapExample") +data("MapExampleOriginalIds") +} +\format{ + \describe{ + \item{\code{BcSetExample}}{An MPRASet object with barcode-level DNA and RNA counts.} + \item{\code{LabelExample}}{A data frame with labels for elements in BcSetExample.} + \item{\code{MapExample}}{A data frame mapping barcodes to variant IDs.} + \item{\code{MapExampleOriginalIds}}{A data frame mapping barcodes to original variant IDs.} + } +} +\details{ + These datasets are provided for demonstration and testing of the + barcode-counting linear model workflow. +} +\examples{ +data(BcSetExample) +} diff --git a/man/MPRASet-class.Rd b/man/MPRASet-class.Rd index 15bf6f9..b4a5dd5 100755 --- a/man/MPRASet-class.Rd +++ b/man/MPRASet-class.Rd @@ -33,21 +33,21 @@ getEseq(object) aggregated to the element level (by summing across barcodes).} \item{DNA}{A matrix of DNA counts where rows correspond to elements or individual barcodes and columns to samples of conditions being - compared.} + compared.} \item{RNA}{A matrix of RNA counts where rows correspond to elements or individual barcodes and columns to samples of conditions being - compared.} + compared.} \item{barcode}{If barcodes are supplied, a \code{character} vector of length equal to the number of rows in \code{DNA} and \code{RNA} containing the barcode sequences or identifiers. \code{NULL} - otherwise.} + otherwise.} \item{eid}{A \code{character} vector of length equal to the number of rows in \code{DNA} and \code{RNA} containing the enhancer - identifiers corresponding to each row.} + identifiers corresponding to each row.} \item{eseq}{If supplied, a \code{character} vector of length equal to the number of rows in \code{DNA} and \code{RNA} containing the enhancer sequences corresponding to the regulatory elements in each - row. \code{NULL} otherwise.} + row. \code{NULL} otherwise.} \item{...}{Further arguments to be passed to \code{SummarizedExperiment}.} } @@ -60,7 +60,7 @@ getEseq(object) \code{rowData} slot. We have chosen to store barcode and element as \code{character} to be flexible, although they are often DNA sequences (and could therefore be considered \code{DNAStringSet} (from package - Biostrings)). + Biostrings)). } \section{Extends}{ Class \code{"\linkS4class{SummarizedExperiment}"}, directly. diff --git a/man/create_dna_df.Rd b/man/create_dna_df.Rd new file mode 100644 index 0000000..79d7cca --- /dev/null +++ b/man/create_dna_df.Rd @@ -0,0 +1,26 @@ +\name{create_dna_df} +\alias{create_dna_df} +\title{Create DNA Count Matrix} +\description{ + Convert a long-format DNA count data frame into a wide-format matrix + suitable for MPRA analysis. +} +\usage{ +create_dna_df(df, id_column_name = "variant_id", allele_column_name = NULL) +} +\arguments{ + \item{df}{A data frame containing DNA counts in long format.} + \item{id_column_name}{Column name for variant identifiers.} + \item{allele_column_name}{Column name for allele values. If NULL, uses "allele" when present.} +} +\value{ + A wide-format data frame with DNA counts per allele. +} +\examples{ +df <- data.frame( + variant_id = c("var1", "var2", "var1", "var2"), + allele = c("ref", "ref", "alt", "alt"), + DNA_A = c(100, 200, 150, 250) +) +create_dna_df(df) +} diff --git a/man/create_rna_df.Rd b/man/create_rna_df.Rd new file mode 100644 index 0000000..f934fb9 --- /dev/null +++ b/man/create_rna_df.Rd @@ -0,0 +1,26 @@ +\name{create_rna_df} +\alias{create_rna_df} +\title{Create RNA Count Matrix} +\description{ + Convert a long-format RNA count data frame into a wide-format matrix + suitable for MPRA analysis. +} +\usage{ +create_rna_df(df, id_column_name = "variant_id", allele_column_name = NULL) +} +\arguments{ + \item{df}{A data frame containing RNA counts in long format.} + \item{id_column_name}{Column name for variant identifiers.} + \item{allele_column_name}{Column name for allele values. If NULL, uses "allele" when present.} +} +\value{ + A wide-format data frame with RNA counts per allele. +} +\examples{ +df <- data.frame( + variant_id = c("var1", "var2", "var1", "var2"), + allele = c("ref", "ref", "alt", "alt"), + RNA_A = c(500, 600, 450, 700) +) +create_rna_df(df) +} diff --git a/man/create_var_df.Rd b/man/create_var_df.Rd new file mode 100644 index 0000000..4b1b206 --- /dev/null +++ b/man/create_var_df.Rd @@ -0,0 +1,30 @@ +\name{create_var_df} +\alias{create_var_df} +\title{Create Variant Mapping Data} +\description{ + Map barcode-level data to variant IDs using a mapping data frame that + contains reference and alternate allele sequences. +} +\usage{ +create_var_df(df, map_df) +} +\arguments{ + \item{df}{A data frame containing barcode data with a "name" column.} + \item{map_df}{A data frame with columns "ID", "REF", and "ALT".} +} +\value{ + A data frame with variant IDs and allele assignments. +} +\examples{ +df <- data.frame( + name = c("A", "B", "C"), + Barcode = c("BC1", "BC2", "BC3"), + count = c(10, 20, 30) +) +map_df <- data.frame( + ID = c("var1", "var2", "var3"), + REF = c("A", "B", "D"), + ALT = c("E", "F", "C") +) +create_var_df(df, map_df) +} diff --git a/man/downsample_barcodes.Rd b/man/downsample_barcodes.Rd new file mode 100644 index 0000000..5fb51f9 --- /dev/null +++ b/man/downsample_barcodes.Rd @@ -0,0 +1,27 @@ +\name{downsample_barcodes} +\alias{downsample_barcodes} +\title{Downsample Barcodes} +\description{ + Downsample barcodes to a specified percentile of their distribution to + balance barcode counts across groups. +} +\usage{ +downsample_barcodes(df, id_column_name = "name", percentile = 0.95) +} +\arguments{ + \item{df}{A data frame containing barcode information.} + \item{id_column_name}{Column name for the element or sequence ID.} + \item{percentile}{Percentile threshold used to downsample barcodes.} +} +\value{ + A data frame with downsampled barcodes. +} +\examples{ +df <- data.frame( + name = c("A", "B", "C", "A", "B", "C"), + allele = c("ref", "ref", "alt", "ref", "alt", "alt"), + Barcode = c("BC1", "BC2", "BC3", "BC1", "BC2", "BC3"), + count = c(10, 50, 30, 20, 40, 35) +) +downsample_barcodes(df) +} diff --git a/man/fit_elements.Rd b/man/fit_elements.Rd new file mode 100644 index 0000000..a7acf3e --- /dev/null +++ b/man/fit_elements.Rd @@ -0,0 +1,29 @@ +\name{fit_elements} +\alias{fit_elements} +\title{Fit Elements with Linear Models} +\description{ + Fit linear models to MPRA data using \code{mpralm}, with optional + endomorphic output. +} +\usage{ +fit_elements(object, normalize = TRUE, block = NULL, endomorphic = FALSE, + normalizeSize = 1e9, ...) +} +\arguments{ + \item{object}{An MPRASet object containing DNA and RNA counts.} + \item{normalize}{Logical indicating whether to normalize counts.} + \item{block}{Optional vector or factor specifying replicate blocks.} + \item{endomorphic}{Logical indicating whether to return an MPRASet result.} + \item{normalizeSize}{Library size for normalization.} + \item{...}{Additional arguments passed to \code{mpralm}.} +} +\value{ + An \code{MArrayLM} object, or an \code{MPRASet} if \code{endomorphic} is TRUE. +} +\examples{ +\dontrun{ + data(BcSetExample) + block_vector <- rep(1:2, length.out = ncol(BcSetExample)) + fit <- fit_elements(BcSetExample, normalize = TRUE, block = block_vector) +} +} diff --git a/man/getLabel.Rd b/man/getLabel.Rd new file mode 100644 index 0000000..1756624 --- /dev/null +++ b/man/getLabel.Rd @@ -0,0 +1,24 @@ +\name{getLabel} +\alias{getLabel} +\title{Get Labels from an MPRASet} +\description{ + Retrieve the label vector stored in the row data of an MPRASet object. +} +\usage{ +getLabel(object) +} +\arguments{ + \item{object}{An MPRASet object.} +} +\value{ + A character vector of labels. +} +\seealso{ + \code{\link{MPRASet}} +} +\examples{ +\dontrun{ + data(BcSetExample) + getLabel(BcSetExample) +} +} diff --git a/man/mpra_treat.Rd b/man/mpra_treat.Rd new file mode 100644 index 0000000..b91050d --- /dev/null +++ b/man/mpra_treat.Rd @@ -0,0 +1,30 @@ +\name{mpra_treat} +\alias{mpra_treat} +\title{Apply logFC Threshold for MPRA Results} +\description{ + Apply a moderated t-statistic with a logFC threshold derived from + negative controls. +} +\usage{ +mpra_treat(fit, percentile = 0.975, neg_label, trend = FALSE, + robust = FALSE, winsor.tail.p = c(0.05, 0.1)) +} +\arguments{ + \item{fit}{An \code{MArrayLM} or \code{MPRASet} object.} + \item{percentile}{Percentile of negative controls used as threshold.} + \item{neg_label}{Label for negative control elements.} + \item{trend}{Logical indicating if a trend is fitted.} + \item{robust}{Logical indicating robust variance estimation.} + \item{winsor.tail.p}{Tail probabilities for winsorization.} +} +\value{ + A data frame containing moderated t-statistics and adjusted p-values. +} +\examples{ +\dontrun{ + data(BcSetExample) + block_vector <- rep(1:2, length.out = ncol(BcSetExample)) + fit <- fit_elements(BcSetExample, normalize = TRUE, block = block_vector) + mpra_treat(fit, percentile = 0.95, neg_label = "control_name") +} +} diff --git a/man/plot_groups.Rd b/man/plot_groups.Rd new file mode 100644 index 0000000..71345f0 --- /dev/null +++ b/man/plot_groups.Rd @@ -0,0 +1,27 @@ +\name{plot_groups} +\alias{plot_groups} +\title{Plot logFC Distributions by Group} +\description{ + Plot the distribution of logFC values for MPRA results, optionally + highlighting negative control percentiles. +} +\usage{ +plot_groups(object, percentile = NULL, neg_label = NULL, test_label = NULL) +} +\arguments{ + \item{object}{An MPRASet object or a data frame with \code{logFC} values.} + \item{percentile}{Percentile for negative control thresholds.} + \item{neg_label}{Label for negative control elements.} + \item{test_label}{Label for test elements to subset.} +} +\value{ + A \code{ggplot} object. +} +\examples{ +\dontrun{ + data(BcSetExample) + block_vector <- rep(1:2, length.out = ncol(BcSetExample)) + fit <- fit_elements(BcSetExample, normalize = TRUE, block = block_vector) + plot_groups(fit, percentile = 0.95, neg_label = "control_name") +} +} From 5533e48230e68eff11950fe5b754f4541239d063 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:37:20 +0100 Subject: [PATCH 19/37] Refactor documentation and examples: standardize data loading syntax and improve clarity in package documentation --- man/BCalm-package.Rd | 10 +++---- man/MPRASet-class.Rd | 26 +++-------------- man/compute_logratio.Rd | 2 +- man/get_precision_weights.Rd | 8 +++--- man/mpraSetExample.Rd | 56 ------------------------------------ man/mpralm.Rd | 24 ++++++++-------- man/normalize_counts.Rd | 2 +- 7 files changed, 27 insertions(+), 101 deletions(-) delete mode 100755 man/mpraSetExample.Rd diff --git a/man/BCalm-package.Rd b/man/BCalm-package.Rd index 238f0c7..bdb4055 100755 --- a/man/BCalm-package.Rd +++ b/man/BCalm-package.Rd @@ -26,21 +26,21 @@ Maintainer: \packageMaintainer{BCalm} Myint, Leslie, Dimitrios G. Avramopoulos, Loyal A. Goff, and Kasper D. Hansen. \emph{Linear models enable powerful differential activity analysis in - massively parallel reporter assays}. + massively parallel reporter assays}. BMC Genomics 2019, 209. \doi{10.1186/s12864-019-5556-x}. Law, Charity W., Yunshun Chen, Wei Shi, and Gordon K. Smyth. - \emph{Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-Seq Read Counts}. + \emph{Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-Seq Read Counts}. Genome Biology 2014, 15:R29. \doi{10.1186/gb-2014-15-2-r29}. - Smyth, Gordon K., Jo\"{e}lle Michaud, and Hamish S. Scott. + Smyth, Gordon K., Joelle Michaud, and Hamish S. Scott. \emph{Use of within-Array Replicate Spots for Assessing Differential - Expression in Microarray Experiments.} + Expression in Microarray Experiments.} Bioinformatics 2005, 21 (9): 2067-75. \doi{10.1093/bioinformatics/bti270}. } \keyword{ package } \examples{ -data(mpraSetAggExample) +data("mpraSetAggExample", package = "mpra") design <- data.frame(intcpt = 1, episomal = grepl("MT", colnames(mpraSetAggExample))) mpralm_fit <- mpralm(object = mpraSetAggExample, design = design, diff --git a/man/MPRASet-class.Rd b/man/MPRASet-class.Rd index b4a5dd5..dc5a1ad 100755 --- a/man/MPRASet-class.Rd +++ b/man/MPRASet-class.Rd @@ -16,9 +16,7 @@ } \usage{ ## Constructor -MPRASet(DNA = new("matrix"), RNA = new("matrix"), - barcode = new("character"), eid = new("character"), - eseq = new("character"), ...) +MPRASet(label = new("character"), ...) ## Accessors getRNA(object, aggregate = FALSE) @@ -31,25 +29,9 @@ getEseq(object) \item{object}{A \code{MPRASet} object.} \item{aggregate}{A \code{logical} indicating if data should be aggregated to the element level (by summing across barcodes).} - \item{DNA}{A matrix of DNA counts where rows correspond to elements or - individual barcodes and columns to samples of conditions being - compared.} - \item{RNA}{A matrix of RNA counts where rows correspond to elements or - individual barcodes and columns to samples of conditions being - compared.} - \item{barcode}{If barcodes are supplied, a \code{character} vector of - length equal to the number of rows in \code{DNA} and \code{RNA} - containing the barcode sequences or identifiers. \code{NULL} - otherwise.} - \item{eid}{A \code{character} vector of length equal to the number of - rows in \code{DNA} and \code{RNA} containing the enhancer - identifiers corresponding to each row.} - \item{eseq}{If supplied, a \code{character} vector of length equal to - the number of rows in \code{DNA} and \code{RNA} containing the - enhancer sequences corresponding to the regulatory elements in each - row. \code{NULL} otherwise.} - \item{...}{Further arguments to be passed to - \code{SummarizedExperiment}.} + \item{label}{A character vector of labels to store with the elements. + When provided, the labels are aligned to the element IDs.} + \item{...}{Further arguments passed to \code{mpra::MPRASet}.} } \section{Slots}{ Slots are as described in a \code{SummarizedExperiment}. Of diff --git a/man/compute_logratio.Rd b/man/compute_logratio.Rd index 0d9e182..96db0f2 100755 --- a/man/compute_logratio.Rd +++ b/man/compute_logratio.Rd @@ -24,6 +24,6 @@ and sample-specific log ratios. } \examples{ - data(mpraSetAggExample) + data("mpraSetAggExample", package = "mpra") logr <- compute_logratio(mpraSetAggExample, aggregate = "sum") } diff --git a/man/get_precision_weights.Rd b/man/get_precision_weights.Rd index 8c97693..5fe09d9 100755 --- a/man/get_precision_weights.Rd +++ b/man/get_precision_weights.Rd @@ -13,11 +13,11 @@ get_precision_weights(logr, design, log_dna, span = 0.4, plot = TRUE, ...) \item{design}{Design matrix specifying comparisons of interest.} \item{log_dna}{Matrix of log2 aggregated DNA counts of the same dimension as \code{logr}.} \item{span}{The smoothing span for \code{lowess} in estimating the - copy number-variance relationship. Default: 0.4.} + copy number-variance relationship. Default: 0.4.} \item{plot}{If \code{TRUE}, plot the copy number-variance relationship.} \item{\dots}{Further arguments to be passed to \code{lmFit} for obtaining residual standard deviations used in estimating the - copy number-variance relationship.} + copy number-variance relationship.} } \details{ Residual standard deviations are computed using the supplied outcomes @@ -30,11 +30,11 @@ A matrix of precision weights of the same dimension as \code{logr} and \code{log } \references{ Law, Charity W., Yunshun Chen, Wei Shi, and Gordon K. Smyth. - \emph{Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-Seq Read Counts}. + \emph{Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-Seq Read Counts}. Genome Biology 2014, 15:R29. \doi{10.1186/gb-2014-15-2-r29}. } \examples{ -data(mpraSetAggExample) +data("mpraSetAggExample", package = "mpra") design <- data.frame(intcpt = 1, episomal = grepl("MT", colnames(mpraSetAggExample))) logr <- compute_logratio(mpraSetAggExample, aggregate = "none") diff --git a/man/mpraSetExample.Rd b/man/mpraSetExample.Rd deleted file mode 100755 index b97bf15..0000000 --- a/man/mpraSetExample.Rd +++ /dev/null @@ -1,56 +0,0 @@ -\name{mpraSetExample} -\alias{mpraSetExample} -\alias{mpraSetAggExample} -\alias{mpraSetAllelicExample} -\docType{data} -\title{ - Example data for the mpra package. -} -\description{ - Example data for the MPRA package. \code{mpraSetExample} and - \code{mpraSetAggExample} come from a study by Inoue et al - that compares episomal and lentiviral MPRA. The former contains - data at the barcode level and the latter contains data - aggregated over barcodes. \code{mpraSetAllelicExample} come from - a study by Tewhey et al that looks at regulatory activity of - allelic versions of thousands of SNPs to follow up on prior - eQTL results. -} -\usage{ -data("mpraSetExample") -data("mpraSetAggExample") -data("mpraSetAllelicExample") -} -\format{ - An \code{MPRASet}. -} -\details{ - \code{mpraSetExample} contains barcode level information for the - study by Inoue et al. - \code{mpraSetAggExample} contains count information from - \code{mpraSetExample} where the counts have been summed over - barcodes for each element. - \code{mpraSetAllelicExample} contains count information for the - Tewhey et al study. The counts have been summed over barcodes - for each element. -} -\source{ - A script for creating the three datasets is supplied in the - \code{scripts} folder of the package. The data are taken from the GEO - submission associated with the paper (see references), specifically - GSE83894 and GSE75661. -} -\references{ - Inoue, Fumitaka, Martin Kircher, Beth Martin, Gregory M. Cooper, - Daniela M. Witten, Michael T. McManus, Nadav Ahituv, and - Jay Shendure. \emph{A Systematic Comparison Reveals Substantial - Differences in Chromosomal versus Episomal Encoding of Enhancer - Activity}. Genome Research 2017, 27(1):38-52. - \doi{10.1101/gr.212092.116}. - - Tewhey R, Kotliar D, Park DS, Liu B, Winnicki S, Reilly SK, Andersen KG, Mikkelsen TS, Lander ES, Schaffner SF, Sabeti PC. \emph{Direct Identification of Hundreds of Expression-Modulating Variants using a Multiplexed Reporter Assay}. Cell 2016, 165:1519-1529. \doi{10.1016/j.cell.2016.04.027}. -} -\examples{ -data(mpraSetAggExample) -} -\keyword{datasets} diff --git a/man/mpralm.Rd b/man/mpralm.Rd index ec3630a..311c99e 100755 --- a/man/mpralm.Rd +++ b/man/mpralm.Rd @@ -11,9 +11,9 @@ mpralm(object, design, aggregate = c("mean", "sum", "none"), normalize = TRUE, } \arguments{ \item{object}{An object of class \code{MPRASet}.} - \item{design}{Design matrix specifying comparisons of interest. The - number of rows of this matrix should equal the number of columns - in \code{object}. The number of columns in this design matrix has + \item{design}{Design matrix specifying comparisons of interest. The + number of rows of this matrix should equal the number of columns + in \code{object}. The number of columns in this design matrix has no constraints and should correspond to the experimental design.} \item{aggregate}{Aggregation method over barcodes: \code{"mean"} to use the average of barcode-specific log ratios, \code{"sum"} to use @@ -23,14 +23,14 @@ mpralm(object, design, aggregate = c("mean", "sum", "none"), normalize = TRUE, before model fitting.} \item{block}{A vector giving the sample designations of the columns of \code{object}. The default, \code{NULL}, indicates that all columns - are separate samples.} + are separate samples.} \item{model_type}{Indicates whether an unpaired model fit (\code{"indep_groups"}) or a paired mixed-model fit ((\code{"corr_groups"})) should be used.} \item{plot}{If \code{TRUE}, plot the mean-variance relationship.} \item{\dots}{Further arguments to be passed to \code{lmFit} for obtaining residual standard deviations used in estimating the - mean-variance relationship.} + mean-variance relationship.} } \details{ Using \code{method_type = "corr_groups"} uses the @@ -39,30 +39,30 @@ estimate the intra-replicate correlation of log-ratio values. } \value{ An object of class \code{MArrayLM} resulting from the \code{eBayes} -function. +function. } \references{ Myint, Leslie, Dimitrios G. Avramopoulos, Loyal A. Goff, and Kasper D. Hansen. \emph{Linear models enable powerful differential activity analysis in - massively parallel reporter assays}. + massively parallel reporter assays}. BMC Genomics 2019, 209. \doi{10.1186/s12864-019-5556-x}. Law, Charity W., Yunshun Chen, Wei Shi, and Gordon K. Smyth. - \emph{Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-Seq Read Counts}. + \emph{Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-Seq Read Counts}. Genome Biology 2014, 15:R29. \doi{10.1186/gb-2014-15-2-r29}. - Smyth, Gordon K., Jo\"{e}lle Michaud, and Hamish S. Scott. + Smyth, Gordon K., Joelle Michaud, and Hamish S. Scott. \emph{Use of within-Array Replicate Spots for Assessing Differential - Expression in Microarray Experiments.} + Expression in Microarray Experiments.} Bioinformatics 2005, 21 (9): 2067-75. \doi{10.1093/bioinformatics/bti270}. } \examples{ -data(mpraSetAggExample) +data("mpraSetAggExample", package = "mpra") design <- data.frame(intcpt = 1, episomal = grepl("MT", colnames(mpraSetAggExample))) mpralm_fit <- mpralm(object = mpraSetAggExample, design = design, - aggregate = "none", normalize = TRUE, + aggregate = "none", normalize = TRUE, model_type = "indep_groups", plot = FALSE) toptab <- topTable(mpralm_fit, coef = 2, number = Inf) head(toptab) diff --git a/man/normalize_counts.Rd b/man/normalize_counts.Rd index 3e7d575..12cd537 100755 --- a/man/normalize_counts.Rd +++ b/man/normalize_counts.Rd @@ -28,6 +28,6 @@ An object of class \code{MPRASet} with the total count-normalized DNA and RNA counts. } \examples{ -data(mpraSetAggExample) +data("mpraSetAggExample", package = "mpra") mpraSetAggExample <- normalize_counts(mpraSetAggExample) } From d8048d88cc1a57688558174b8e234bf92d167fce Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:38:03 +0100 Subject: [PATCH 20/37] Refactor test files: update library references from 'mpra' to 'BCalm' for consistency --- tests/runTests.R | 3 --- tests/testthat.R | 4 ++-- tests/testthat/test-analyze.R | 2 ++ tests/testthat/test-fit.R | 2 ++ tests/testthat/test-preprocess.R | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) delete mode 100755 tests/runTests.R diff --git a/tests/runTests.R b/tests/runTests.R deleted file mode 100755 index 7b0dbdb..0000000 --- a/tests/runTests.R +++ /dev/null @@ -1,3 +0,0 @@ -library(testthat) - -test_check("BCalm") diff --git a/tests/testthat.R b/tests/testthat.R index 69f02a7..af7a007 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -7,6 +7,6 @@ # * https://testthat.r-lib.org/articles/special-files.html library(testthat) -library(mpra) +library(BCalm) -test_check("mpra") +test_check("BCalm") diff --git a/tests/testthat/test-analyze.R b/tests/testthat/test-analyze.R index 6cbf026..a4f4d32 100644 --- a/tests/testthat/test-analyze.R +++ b/tests/testthat/test-analyze.R @@ -1,3 +1,5 @@ +library(BCalm) + ## Data preparation # Controlls without effect and tests with half positive half negative effect dna <- as.data.frame(matrix(rnorm(20 * 10, mean = 10, sd = sqrt(0.5)), nrow = 20, ncol = 10)) diff --git a/tests/testthat/test-fit.R b/tests/testthat/test-fit.R index 782c5b8..3d5a97b 100644 --- a/tests/testthat/test-fit.R +++ b/tests/testthat/test-fit.R @@ -1,3 +1,5 @@ +library(BCalm) + ## Data preparation for tests # compute_logratio diff --git a/tests/testthat/test-preprocess.R b/tests/testthat/test-preprocess.R index beed0b5..2a35bb7 100644 --- a/tests/testthat/test-preprocess.R +++ b/tests/testthat/test-preprocess.R @@ -1,4 +1,4 @@ -library(mpra) +library(BCalm) library(testthat) library(tidyr) library(dplyr) From a1d40c11b96263fb7049fccadb798c97789fdca3 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:38:08 +0100 Subject: [PATCH 21/37] Refactor NAMESPACE: streamline imports by consolidating stats and dplyr functions for improved clarity --- NAMESPACE | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index f090505..2a1f7ed 100755 --- a/NAMESPACE +++ b/NAMESPACE @@ -5,16 +5,14 @@ import(limma, except = "plotMA") import(S4Vectors) importFrom("scales", "alpha") importFrom("graphics", "lines") -importFrom("stats", "approxfun", "lowess") +importFrom("stats", "approxfun", "lowess", "pt", "quantile", "setNames") importFrom("statmod", "mixedModel2Fit") importFrom("tidyr", "pivot_wider") importFrom("tidyr", "unite") -importFrom("dplyr", "%>%", "group_by", "summarise", "mutate", "filter", "ungroup", "pull", "select", "n", "row_number") +importFrom("dplyr", "%>%", "group_by", "summarise", "mutate", "filter", "ungroup", "pull", "select", "n", "row_number", "arrange", "matches", "rename_with") importFrom("rlang", "sym") importFrom("mpra", MPRASet, getRNA, getDNA, getBarcode, getEid, getEseq, normalize_counts, mpralm, get_precision_weights) -exportClasses("MPRASet") -exportMethods("show") export(MPRASet, getRNA, getDNA, getBarcode, getEid, getEseq, getLabel) export(mpralm, get_precision_weights, compute_logratio, normalize_counts, fit_elements) export(downsample_barcodes, create_dna_df, create_rna_df, create_var_df) From d5f3963777875618538a0b5c45fc27b35475dd3b Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:47:48 +0100 Subject: [PATCH 22/37] citations --- inst/CITATION | 23 ++++++++++++++++++++--- inst/NEWS.Rd | 21 +++------------------ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/inst/CITATION b/inst/CITATION index ba05ef0..51de515 100755 --- a/inst/CITATION +++ b/inst/CITATION @@ -1,14 +1,31 @@ c(bibentry(bibtype = "Article", + key = "bcalm", + title = "Using individual barcodes to increase quantification power of massively parallel reporter assays", + author = c( + person("Pia", "Keukeleire"), + person(c("Jonathan", "D."), "Rosen"), + person("Angelina", "Göbel-Knapp"), + person("Kilian", "Salomon"), + person("Max", "Schubach"), + person("Martin", "Kircher")), + year = 2025, + journal = "BMC Bioinformatics", + volume = "26", + pages = "52", + doi = "10.1186/s12859-025-06065-9", + header = "To cite BCalm in publications use:"), + bibentry(bibtype = "Article", key = "mpralm", title = "Linear models enable powerful differential activity analysis in massively parallel reporter assays", author = c( person("Leslie", "Myint"), - person(c("Dimitrios", "G"), "Avramopoulos"), - person(c("Loyal", "A"), "Goff"), + person(c("Dimitrios", "G."), "Avramopoulos"), + person(c("Loyal", "A."), "Goff"), person(c("Kasper", "D."), "Hansen")), year = 2019, journal = "BMC Genomics", + volume = "20", pages = "209", doi = "10.1186/s12864-019-5556-x", - header = "The mpralm functionality is described in:") + header = "The underlying mpralm methodology is described in:") ) diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd index 30d0c2d..bd995b1 100755 --- a/inst/NEWS.Rd +++ b/inst/NEWS.Rd @@ -1,24 +1,9 @@ -\name{mpranews} -\title{mpra News} +\name{bcalmnews} +\title{BCalm News} \encoding{UTF-8} -\section{Version 1.12.1}{ - \itemize{ - \item Fix argument checking in MPRASet construction to allow users to not have to specify barcode or eseq. - \item Fix bug with ordering of eids in log ratio object with aggregate="none" option - } -} - -\section{Version 1.5.3}{ - \itemize{ - \item Update main paper citation. - \item Update vignette with better examples for allelic studies. - \item Add mpraSetAllelicExample to available data. - } -} - \section{Version 0.99}{ \itemize{ - \item Initial release to Bioconductor. + \item Initial release. } } From 7879652a14f843e727e3eeeb83d01cfbc60981f5 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:49:06 +0100 Subject: [PATCH 23/37] build ignore --- .Rbuildignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.Rbuildignore b/.Rbuildignore index 14f1da3..6223c7b 100755 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -2,7 +2,7 @@ .gitignore .lintr .yamllint.yml -..Rcheck +^\.\.Rcheck .git .github README.md From 0368a564218ff887b06809fbb2d1600b7fa4512a Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:49:45 +0100 Subject: [PATCH 24/37] format --- inst/CITATION | 69 ++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/inst/CITATION b/inst/CITATION index 51de515..150f50f 100755 --- a/inst/CITATION +++ b/inst/CITATION @@ -1,31 +1,38 @@ -c(bibentry(bibtype = "Article", - key = "bcalm", - title = "Using individual barcodes to increase quantification power of massively parallel reporter assays", - author = c( - person("Pia", "Keukeleire"), - person(c("Jonathan", "D."), "Rosen"), - person("Angelina", "Göbel-Knapp"), - person("Kilian", "Salomon"), - person("Max", "Schubach"), - person("Martin", "Kircher")), - year = 2025, - journal = "BMC Bioinformatics", - volume = "26", - pages = "52", - doi = "10.1186/s12859-025-06065-9", - header = "To cite BCalm in publications use:"), - bibentry(bibtype = "Article", - key = "mpralm", - title = "Linear models enable powerful differential activity analysis in massively parallel reporter assays", - author = c( - person("Leslie", "Myint"), - person(c("Dimitrios", "G."), "Avramopoulos"), - person(c("Loyal", "A."), "Goff"), - person(c("Kasper", "D."), "Hansen")), - year = 2019, - journal = "BMC Genomics", - volume = "20", - pages = "209", - doi = "10.1186/s12864-019-5556-x", - header = "The underlying mpralm methodology is described in:") - ) +c( + bibentry( + bibtype = "Article", + key = "bcalm", + title = "Using individual barcodes to increase quantification power of massively parallel reporter assays", + author = c( + person("Pia", "Keukeleire"), + person(c("Jonathan", "D."), "Rosen"), + person("Angelina", "Göbel-Knapp"), + person("Kilian", "Salomon"), + person("Max", "Schubach"), + person("Martin", "Kircher") + ), + year = 2025, + journal = "BMC Bioinformatics", + volume = "26", + pages = "52", + doi = "10.1186/s12859-025-06065-9", + header = "To cite BCalm in publications use:" + ), + bibentry( + bibtype = "Article", + key = "mpralm", + title = "Linear models enable powerful differential activity analysis in massively parallel reporter assays", + author = c( + person("Leslie", "Myint"), + person(c("Dimitrios", "G."), "Avramopoulos"), + person(c("Loyal", "A."), "Goff"), + person(c("Kasper", "D."), "Hansen") + ), + year = 2019, + journal = "BMC Genomics", + volume = "20", + pages = "209", + doi = "10.1186/s12864-019-5556-x", + header = "The underlying mpralm methodology is described in:" + ) +) From c05b7d1999cd3daba535c1a24428c6f194de3a6b Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 10:53:14 +0100 Subject: [PATCH 25/37] =?UTF-8?q?=C3=B6=20to=20o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inst/CITATION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/CITATION b/inst/CITATION index 150f50f..81e2447 100755 --- a/inst/CITATION +++ b/inst/CITATION @@ -6,7 +6,7 @@ c( author = c( person("Pia", "Keukeleire"), person(c("Jonathan", "D."), "Rosen"), - person("Angelina", "Göbel-Knapp"), + person("Angelina", "Gobel-Knapp"), person("Kilian", "Salomon"), person("Max", "Schubach"), person("Martin", "Kircher") From 067ffaddd344ed4a90ddbaeda0e4cfa04c95aadc Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 11:08:16 +0100 Subject: [PATCH 26/37] documentation --- README.md | 17 ++- vignettes/BCalm.Rmd | 359 ++++++++++++++++++++++---------------------- vignettes/bcalm.bib | 12 +- 3 files changed, 204 insertions(+), 184 deletions(-) diff --git a/README.md b/README.md index a3b022f..e4b5aaa 100755 --- a/README.md +++ b/README.md @@ -8,8 +8,14 @@ BCalm requires R >=3.5, <= 4.4.0 and can be installed using `devtools` or `remot ### Installation guide: -#### Using conda -We suggest using conda as a package management tool. Its installation guide can be found [here](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html). +#### Using conda (recommended) +We suggest using conda as a package management tool. Its installation guide can be found [here](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) + +```bash +conda create -n BCalm_env r-bcalm +``` + +#### Using `devtools` or `remotes` + conda `BCalm` is available from GitHub. Here we give installation instructions using either `devtools` or `remotes`. @@ -27,9 +33,6 @@ After activating the environment (`conda activate BCalm_env`) you can start the install_github("kircherlab/BCalm") ``` -After installation, you can start using `BCalm` (after loading it with `library(BCalm)`). -For a more extensive user guide, please see the vignette (installation described below). - > **Note:** > If you have problems installing BCalm dependencies (e.g. similar to [issue #10](https://github.com/kircherlab/BCalm/issues/10)) you can install them via conda. Due to one dependency (`bioconductor-genomeinfodbdata`) we have to use the gcc7 label for the bioconda channel. R base version might be different to `4.4.0` but BCALm should work on all R versions `bioconductor-mpra` is supported. @@ -37,6 +40,10 @@ For a more extensive user guide, please see the vignette (installation described > conda install -c bioconda/label/gcc7 -c conda-forge bioconductor-mpra r-devtools r-tidyr r-ggplot2 r-dplyr > ``` +### Loading BCalm + +After installation, you can start using `BCalm` (after loading it with `library(BCalm)`). +For a more extensive user guide, please see the vignette (installation described below). ### Vignette diff --git a/vignettes/BCalm.Rmd b/vignettes/BCalm.Rmd index d9ea081..87cb247 100644 --- a/vignettes/BCalm.Rmd +++ b/vignettes/BCalm.Rmd @@ -1,178 +1,181 @@ ---- -title: "BCalm and analyze your MPRA data" -author: "Pia Keukeleire" -date: "`r format(Sys.time(), '%B %d, %Y')`" -package: "`r Githubpkg('kircherlab/BCalm')` (v0.1.0)" -bibliography: bcalm.bib -abstract: > - A guide on how to use `BCalm` for analyzing massively parallel reporter assays (MPRA) data. -vignette: > - %\VignetteIndexEntry{BCalm: A User's Guide} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} -output: - BiocStyle::html_document ---- -```{r setup, include=FALSE} -knitr::opts_chunk$set(warning = FALSE, message = FALSE, crop=NULL) -``` - -```{r loading packages, echo=TRUE} -library(BCalm) -library(dplyr) -library(ggplot2) -library(kableExtra) # for visually appealing tables -``` - -# Introduction - -The `r Githubpkg('kircherlab/BCalm')` package provides a framework for analyzing data from Massively Parallel Reporter Assays (MPRA) and is built on top of the mpra package. BCalm adapts the existing mpralm method but enhances it by modeling individual barcode counts rather than aggregating counts per sequence. Furthermore, the package includes a set of pre-processing functions and plotting capabilities, facilitating the visualization and interpretation of results. BCalm is more robust to outlier MPRA counts. Variant and element analysis are both shown below together with a significance test of elements against a control group (e.g. negative controls). - -## Citing BCalm -The BCalm package is still unpublished, citing details will be provided later. When using BCalm, please cite the `mpra` package [@mpralm] and the limma-voom framework [@voom]. - -## Additional information for installation -The package is currently available on GitHub and can be installed using remotes [@remotes] or devtools [@devtools]. -The package requires R >= 3.5, <= 4.4.0. -If you have any trouble with the provided package, feel free to let us know by creating an issue directly in the [BCalm GitHub repository](https://github.com/kircherlab/BCalm). -To display the vignette correctly, the `kableExtra` and `ggplot2` packages are required. - -# Preprocessing data - -The first dataframe contains as small subset of a lentiMPRA dataset performed within HepG2 cells with three technical replicates (IGVF accession identifier: IGVFSM9009DVDG). Sequences tested in this experiment aim to capture variant effects across tens of thousands of candidate cis-regulatory element (cCRE) sequences of 200 base pair (bp) length. -The input files used here were obtained from `r Githubpkg('kircherlab/MPRAsnakeflow')`, a Snakemake workflow produced as part of the Impact of Genomic Variation on Function (IGVF) Consortium. MPRAsnakeflow is a comprehensive pipeline which performs both the assignment of barcodes to the designed oligos and the preparation of count tables of DNA and RNA counts based on the observed number of barcodes within the targeted DNA and RNA sequencing (modified from [@Gordon2020]). - -```{r First dataset} -data("BcSetExample") -nr_reps = 3 -# show the data -kable(head(BcSetExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") -``` - -In general, any sequence can be tested using an MPRA. Possible analyses can be differentiated by whether they compare the activity of different conditions of the same region, such as variant testing, or whether they compare the activities of different regions. -For element testing, the tested sequences in this vignette are compared to a group of negative control sequences (known to have low activity in HepG2) and the sequences to be tested. -We show the usage of BCalm on a variant dataset as well as an element dataset in this vignette. First, we show how to correctly preprocess the data. - -## Variant testing - -To prepare data for variant testing, we use the `create_var_df` function from BCalm. This function requires a mapping dataframe with information linking each reference allele to its corresponding alternative allele. Here, we use `MapExample`, a dataframe containing three essential columns: `ID`, `REF`, and `ALT`. This setup provides the necessary reference and alternative allele data to enable variant analysis. -```{r Variant Map} -# load the variant map -data("MapExample") -# show the data -kable(head(MapExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") - -# create the variant dataframe by adding the variant ID to the DNA and RNA counts -var_df <- create_var_df(BcSetExample, MapExample) -# show the data -kable(head(var_df), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") - -``` - -Optionally, downsampling can be performed on our data frame `var_df` now. The function `downsample_barcodes` allows users to reduce the number of barcodes while retaining a representative subset. This way, the number of barcodes for oligos with many barcodes is reduced, which simplifies data handling and reduces the sparseness of the data table (i.e., increased speed and reduced memory requirements). The degree of downsampling can be controlled by adjusting the sampling rate, which is expressed as a percentile value `percentile`, with a default of 0.975. -The `id_column_name` argument specifies the column in the input data frame that contains the unique identifiers for each variant (here `variant_id`). - -```{r Variant Downsampling} -var_df <- downsample_barcodes(var_df, id_column_name="variant_id") -``` - -After downsampling the barcode counts in our dataset, we can prepare the data for analysis using the `create_dna_df` and `create_rna_df` functions. -Only six rows are shown here (original size of the dataframe 996 × 474). -```{r Creating dna dataframe from var_df} -dna_var <- create_dna_df(var_df) -kable(head(dna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") -``` -```{r Creating rna dataframe from var_df} -rna_var <- create_rna_df(var_df) -kable(head(rna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") -``` -Now we create the MPRAset used as input to BCalm. - -```{r Variant MPRASet} -# create the variant specific MPRAset -BcVariantMPRASetExample <- MPRASet(DNA = dna_var, RNA = rna_var, eid = row.names(dna_var), barcode = NULL) -``` - -## Element testing - -The dataset is the same one we used above, but we have to add labels to the data to distinguish between control and test groups, thus allowing us to easily identify and compare these different groups in the analysis later. -```{r LabelsVec} -data(LabelExample) -table(LabelExample) -kable(head(LabelExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") -``` - -Once again, we perform downsampling on this dataset using the `downsample_barcodes` function. -```{r Downsampling} -elem_df <- downsample_barcodes(BcSetExample) -``` - -As before, we use `create_dna_df` and `create_rna_df` to format the data correctly for the `MPRASet` function. However, this time we specify `id_column_name = "name"` since the default, `id_column_name = "variant_id"`, does not match our data format. -```{r Creating dataframes} -dna_elem <- create_dna_df(elem_df, id_column_name="name") -rna_elem <- create_rna_df(elem_df, id_column_name="name") -``` - -To compare between test and control, we need to add the labels to the MPRASet. - -```{r Element MPRASet} -BcLabelMPRASetExample <- MPRASet(DNA = dna_elem, RNA = rna_elem, eid = row.names(dna_elem), barcode = NULL, label=LabelExample) -``` - -With the data prepared and preprocessed, we now have the foundation to conduct our analysis. - -# Analysis -In this section we get to see the usage of the `mpralm` and the `fit_elements` functions. We take the `MPRASet` created in the preprocessing chapter. BCalm allows us to analyze individual barcode counts as separate samples, capturing additional data variation and potentially increasing statistical power. - -## Variant Analysis -We will start with variant testing. In order to achieve this, we employ the `mpralm` function. Which column belongs to which replicate is described in a blocking vector, also used to normalize the counts per replicate. -The design matrix gives information which count comes from the reference and which from the alternative allele. - -```{r Fit Variants} -bcs <- ncol(dna_var) / nr_reps -design <- data.frame(intcpt = 1, alt = grepl("alt", colnames(BcVariantMPRASetExample))) -block_vector <- rep(1:nr_reps, each=bcs) -mpralm_fit_var <- mpralm(object = BcVariantMPRASetExample, design = design, aggregate = "none", normalize = TRUE, model_type = "corr_groups", plot = FALSE, block = block_vector) - -top_var <- topTable(mpralm_fit_var, coef = 2, number = Inf) -kable(head(rna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") -``` - -```{r Volcano Plot} -ggplot(top_var, aes(x = logFC, y = -log10(P.Value))) + - geom_point(alpha = 0.6) -``` - -## Element Analysis - -BCalm provides the function `fit_elements`. It takes the `MPRASet` object as input and applies the statistical modeling. Again the `block_vector` gives reference which barcode belongs to which replicate. -We again set `normalize = TRUE` to perform total count normalization on the RNA and DNA libraries. - -```{r Fit elements, fig.width=8, fig.height=4} -bcs <- ncol(dna_elem) / nr_reps -block_vector <- rep(1:nr_reps, each=bcs) -mpralm_fit_elem <- fit_elements(object = BcLabelMPRASetExample, normalize=TRUE, block = block_vector, plot = FALSE) -``` - -### Visualisation and results -In this section, we will examine the visualization of our analysis results using the `mpra_treat` and `plot_groups` functions. -To visualize our results, we utilize the `plot_groups` function, which allows us to compare logratios for each group. We use the results from `fit_elements` above. As negative controls we use `"control"` and as test `"tested"`. - -```{r Visualization, fig=TRUE, fig.width=8, fig.height=4, warning=FALSE} -plot_groups(mpralm_fit_elem, 0.975, neg_label="control", test_label="tested") -``` - -The `mpra_treat()` function reimplements the `treat()` function from the limma package. This function performs a t-test with a specified threshold, making it especially useful for identifying elements with significant differential activity in MPRA data. -```{r MPRA treat} -treat <- mpra_treat(mpralm_fit_elem, 0.975, neg_label="control") -result <- topTreat(treat, coef = 1, number = Inf) -head(result) -``` - -# Session Info - -```{r sessionInfo, results='asis', echo=FALSE} -sessionInfo() -``` - -# References +--- +title: "BCalm and analyze your MPRA data" +author: "Pia Keukeleire" +date: "`r format(Sys.time(), '%B %d, %Y')`" +package: "`r Githubpkg('kircherlab/BCalm')` (v0.99.0)" +bibliography: bcalm.bib +abstract: > + A guide on how to use `BCalm` for analyzing massively parallel reporter assays (MPRA) data. +vignette: > + %\VignetteIndexEntry{BCalm: A User's Guide} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +output: + BiocStyle::html_document +--- +```{r setup, include=FALSE} +knitr::opts_chunk$set(warning = FALSE, message = FALSE, crop=NULL) +``` + +```{r loading packages, echo=TRUE} +library(BCalm) +library(dplyr) +library(ggplot2) +library(kableExtra) # for visually appealing tables +``` + +# Introduction + +The `r Githubpkg('kircherlab/BCalm')` package provides a framework for analyzing data from Massively Parallel Reporter Assays (MPRA) and is built on top of the mpra package. BCalm adapts the existing mpralm method but enhances it by modeling individual barcode counts rather than aggregating counts per sequence. Furthermore, the package includes a set of pre-processing functions and plotting capabilities, facilitating the visualization and interpretation of results. BCalm is more robust to outlier MPRA counts. Variant and element analysis are both shown below together with a significance test of elements against a control group (e.g. negative controls). + +# Citing BCalm +To cite the BCalm package please use [@bcalm]. When using BCalm you can additionally cite the `mpra` package [@mpralm] and the limma-voom framework [@voom]. + +# Installation +The BCalm package is available via bioconda (called `r-bcalm`) and can be installed via `conda install -c bioconda r-bcalm`). + +## Additional information for installation +The package is also available on GitHub and can be installed using remotes [@remotes] or devtools [@devtools]. +The package requires R >= 3.5, <= 4.4.0. +If you have any trouble with the provided package, feel free to let us know by creating an issue directly in the [BCalm GitHub repository](https://github.com/kircherlab/BCalm). +To display the vignette correctly, the `kableExtra` and `ggplot2` packages are required. + +# Preprocessing data + +The first dataframe contains as small subset of a lentiMPRA dataset performed within HepG2 cells with three technical replicates (IGVF accession identifier: IGVFSM9009DVDG). Sequences tested in this experiment aim to capture variant effects across tens of thousands of candidate cis-regulatory element (cCRE) sequences of 200 base pair (bp) length. +The input files used here were obtained from `r Githubpkg('kircherlab/MPRAsnakeflow')`, a Snakemake workflow produced as part of the Impact of Genomic Variation on Function (IGVF) Consortium. MPRAsnakeflow is a comprehensive pipeline which performs both the assignment of barcodes to the designed oligos and the preparation of count tables of DNA and RNA counts based on the observed number of barcodes within the targeted DNA and RNA sequencing (modified from [@Gordon2020]). + +```{r First dataset} +data("BcSetExample") +nr_reps = 3 +# show the data +kable(head(BcSetExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") +``` + +In general, any sequence can be tested using an MPRA. Possible analyses can be differentiated by whether they compare the activity of different conditions of the same region, such as variant testing, or whether they compare the activities of different regions. +For element testing, the tested sequences in this vignette are compared to a group of negative control sequences (known to have low activity in HepG2) and the sequences to be tested. +We show the usage of BCalm on a variant dataset as well as an element dataset in this vignette. First, we show how to correctly preprocess the data. + +## Variant testing + +To prepare data for variant testing, we use the `create_var_df` function from BCalm. This function requires a mapping dataframe with information linking each reference allele to its corresponding alternative allele. Here, we use `MapExample`, a dataframe containing three essential columns: `ID`, `REF`, and `ALT`. This setup provides the necessary reference and alternative allele data to enable variant analysis. +```{r Variant Map} +# load the variant map +data("MapExample") +# show the data +kable(head(MapExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") + +# create the variant dataframe by adding the variant ID to the DNA and RNA counts +var_df <- create_var_df(BcSetExample, MapExample) +# show the data +kable(head(var_df), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") + +``` + +Optionally, downsampling can be performed on our data frame `var_df` now. The function `downsample_barcodes` allows users to reduce the number of barcodes while retaining a representative subset. This way, the number of barcodes for oligos with many barcodes is reduced, which simplifies data handling and reduces the sparseness of the data table (i.e., increased speed and reduced memory requirements). The degree of downsampling can be controlled by adjusting the sampling rate, which is expressed as a percentile value `percentile`, with a default of 0.95. +The `id_column_name` argument specifies the column in the input data frame that contains the unique identifiers for each variant (here `variant_id`). + +```{r Variant Downsampling} +var_df <- downsample_barcodes(var_df, id_column_name="variant_id") +``` + +After downsampling the barcode counts in our dataset, we can prepare the data for analysis using the `create_dna_df` and `create_rna_df` functions. +Only six rows are shown here (original size of the dataframe 996 × 474). +```{r Creating dna dataframe from var_df} +dna_var <- create_dna_df(var_df) +kable(head(dna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") +``` +```{r Creating rna dataframe from var_df} +rna_var <- create_rna_df(var_df) +kable(head(rna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") +``` +Now we create the MPRAset used as input to BCalm. + +```{r Variant MPRASet} +# create the variant specific MPRAset +BcVariantMPRASetExample <- mpra::MPRASet(DNA = dna_var, RNA = rna_var, eid = row.names(dna_var), barcode = NULL) +``` + +## Element testing + +The dataset is the same one we used above, but we have to add labels to the data to distinguish between control and test groups, thus allowing us to easily identify and compare these different groups in the analysis later. +```{r LabelsVec} +data(LabelExample) +table(LabelExample) +kable(head(LabelExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") +``` + +Once again, we perform downsampling on this dataset using the `downsample_barcodes` function. +```{r Downsampling} +elem_df <- downsample_barcodes(BcSetExample) +``` + +As before, we use `create_dna_df` and `create_rna_df` to format the data correctly for the `MPRASet` function. However, this time we specify `id_column_name = "name"` since the default, `id_column_name = "variant_id"`, does not match our data format. +```{r Creating dataframes} +dna_elem <- create_dna_df(elem_df, id_column_name="name") +rna_elem <- create_rna_df(elem_df, id_column_name="name") +``` + +To compare between test and control, we need to add the labels to the MPRASet. + +```{r Element MPRASet} +BcLabelMPRASetExample <- BCalm::MPRASet(label = LabelExample, DNA = dna_elem, RNA = rna_elem, eid = row.names(dna_elem), barcode = NULL) +``` + +With the data prepared and preprocessed, we now have the foundation to conduct our analysis. + +# Analysis +In this section we get to see the usage of the `mpralm` and the `fit_elements` functions. We take the `MPRASet` created in the preprocessing chapter. BCalm allows us to analyze individual barcode counts as separate samples, capturing additional data variation and potentially increasing statistical power. + +## Variant Analysis +We will start with variant testing. In order to achieve this, we employ the `mpralm` function. Which column belongs to which replicate is described in a blocking vector, also used to normalize the counts per replicate. +The design matrix gives information which count comes from the reference and which from the alternative allele. + +```{r Fit Variants} +bcs <- ncol(dna_var) / nr_reps +design <- data.frame(intcpt = 1, alt = grepl("alt", colnames(BcVariantMPRASetExample))) +block_vector <- rep(1:nr_reps, each=bcs) +mpralm_fit_var <- mpralm(object = BcVariantMPRASetExample, design = design, aggregate = "none", normalize = TRUE, model_type = "corr_groups", block = block_vector) + +top_var <- topTable(mpralm_fit_var, coef = 2, number = Inf) +kable(head(top_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%") +``` + +```{r Volcano Plot} +ggplot(top_var, aes(x = logFC, y = -log10(P.Value))) + + geom_point(alpha = 0.6) +``` + +## Element Analysis + +BCalm provides the function `fit_elements`. It takes the `MPRASet` object as input and applies the statistical modeling. Again the `block_vector` gives reference which barcode belongs to which replicate. +We again set `normalize = TRUE` to perform total count normalization on the RNA and DNA libraries. + +```{r Fit elements, fig.width=8, fig.height=4} +bcs <- ncol(dna_elem) / nr_reps +block_vector <- rep(1:nr_reps, each=bcs) +mpralm_fit_elem <- fit_elements(object = BcLabelMPRASetExample, normalize = TRUE, block = block_vector) +``` + +### Visualisation and results +In this section, we will examine the visualization of our analysis results using the `mpra_treat` and `plot_groups` functions. +To visualize our results, we utilize the `plot_groups` function, which allows us to compare logratios for each group. We use the results from `fit_elements` above. As negative controls we use `"control"` and as test `"tested"`. + +```{r Visualization, fig=TRUE, fig.width=8, fig.height=4, warning=FALSE} +plot_groups(mpralm_fit_elem, 0.975, neg_label="control", test_label="tested") +``` + +The `mpra_treat()` function reimplements the `treat()` function from the limma package. This function performs a t-test with a specified threshold, making it especially useful for identifying elements with significant differential activity in MPRA data. +```{r MPRA treat} +treat <- mpra_treat(mpralm_fit_elem, 0.975, neg_label="control") +result <- topTreat(treat, coef = 1, number = Inf) +head(result) +``` + +# Session Info + +```{r sessionInfo, results='asis', echo=FALSE} +sessionInfo() +``` + +# References diff --git a/vignettes/bcalm.bib b/vignettes/bcalm.bib index d769389..94e40f6 100644 --- a/vignettes/bcalm.bib +++ b/vignettes/bcalm.bib @@ -1,3 +1,13 @@ +@ARTICLE{bcalm, + title = "Using individual barcodes to increase quantification power of massively parallel reporter assays", + author = "Keukeleire, Pia and Rosen, Jonathan D and Gobel-Knapp, Angelina and Salomon, Kilian and Schubach, Max and Kircher, Martin", + journal = "BMC Bioinformatics", + volume = 26, + pages = "52", + year = 2025, + doi = "10.1186/s12859-025-06065-9" +} + @ARTICLE{mpralm, title = "Linear models enable powerful differential activity analysis in massively parallel reporter assays", @@ -57,4 +67,4 @@ @article{Gordon2020 year = {2020}, month = jul, pages = {2387–2412} -} \ No newline at end of file +} From 9f2e29d43767d53c84a72705d9aead1d48e000e2 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 11:14:19 +0100 Subject: [PATCH 27/37] update doc --- .Rbuildignore | 1 - README.md | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index 6223c7b..9d7cf33 100755 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -6,4 +6,3 @@ .git .github README.md - diff --git a/README.md b/README.md index e4b5aaa..68f8b6e 100755 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ devtools::install_github("kircherlab/BCalm", build_vignette=TRUE, dependencies=T After this you can open the built vignette by `vignette('BCalm')` (Alternatively, we provide a pre-built vignette in `vignettes/BCalm.html`) -You can either follow the prepared vignette directly in the editor of your choice (`vignettes/BCalm.Rmd`) or scroll through it by opening it in your browser (`vignettes/BCalm.html`). +You can either follow the prepared vignette directly in the editor of your choice (`vignettes/BCalm.Rmd`) or scroll through it by opening it in your browser (`inst/doc//BCalm.html`). ### How to cite: From 8131a43f4764f733e9c679b66b7d103bdceb49f8 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 11:26:03 +0100 Subject: [PATCH 28/37] newest bcalm vigniette --- vignettes/BCalm.html | 53795 +++++++++++++++++------------------------ 1 file changed, 21990 insertions(+), 31805 deletions(-) diff --git a/vignettes/BCalm.html b/vignettes/BCalm.html index 661b50e..a9e47d9 100644 --- a/vignettes/BCalm.html +++ b/vignettes/BCalm.html @@ -1,31805 +1,21990 @@ - - - - - - - - - - - - - - -BCalm and analyze your MPRA data - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -

Contents

- - -
library(BCalm)
-library(dplyr)
-library(ggplot2)
-library(kableExtra) # for visually appealing tables
-
-

1 Introduction

-

The bcalm package provides a framework for analyzing data from Massively Parallel Reporter Assays (MPRA) and is built on top of the mpra package. BCalm adapts the existing mpralm method but enhances it by modeling individual barcode counts rather than aggregating counts per sequence. Furthermore, the package includes a set of pre-processing functions and plotting capabilities, facilitating the visualization and interpretation of results. BCalm is more robust to outlier MPRA counts. Variant and element analysis are both shown below together with a significance test of elements against a control group (e.g. negative controls).

-
-

1.1 Citing BCalm

-

The BCalm package is still unpublished, citing details will be provided later. When using BCalm, please cite the mpra package (Myint et al. 2019) and the limma-voom framework (Law et al. 2014).

-
-
-

1.2 Additional information for the installation

-

The package is currently available on GitHub and can be installed using remotes (Csárdi et al. 2024) or devtools (Wickham et al. 2022). -The package requires R >= 3.5, <= 4.4.0. -If you have any trouble with the provided package feel free to let us know by creating an issue directly in the BCalm GitHub repository. -To display the vignette correctly, the kableExtra and ggplot2 packages are required.

-
-
-
-

2 Preprocessing data

-

The first dataframe contains as small subset of a lentiMPRA dataset performed within HepG2 cells with three technical replicates (IGVF accession identifier: IGVFSM9009DVDG). Sequences tested in this experiment aim to capture variant effects across tens of thousands of candidate cis-regulatory element (cCRE) sequences of 200 base pair (bp) length. -The input files used here were obtained from MPRAsnakeflow, a Snakemake workflow produced as part of the Impact of Genomic Variation on Function (IGVF) Consortium. MPRAsnakeflow is a comprehensive pipeline which performs both the assignment of barcodes to the designed oligos and the preparation of count tables of DNA and RNA counts based on the observed number of barcodes within the targeted DNA and RNA sequencing (modified from (Gordon et al. 2020)).

-
data("BcSetExample")
-nr_reps = 3
-# show the data
-kable(head(BcSetExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Barcode - -name - -dna_count_1 - -rna_count_1 - -dna_count_2 - -rna_count_2 - -dna_count_3 - -rna_count_3 -
-AAAAAAAAAAGCTGC - -oligo_006364 - -11 - -10 - -8 - -6 - -1 - -3 -
-AAAAAAAAATCACAG - -oligo_005641 - -8 - -7 - -1 - -2 - -1 - -29 -
-AAAAAAAAATTGAGC - -oligo_005719 - -2 - -25 - -2 - -88 - -1 - -30 -
-AAAAAAAAATTGTAT - -oligo_005725 - -4 - -12 - -4 - -2 - -2 - -6 -
-AAAAAAAACACATGA - -oligo_005412 - -21 - -15 - -5 - -12 - -11 - -51 -
-AAAAAAAACATAGTT - -oligo_006471 - -8 - -3 - -3 - -5 - -7 - -3 -
-
-

In general, any sequence can be tested using an MPRA. Possible analyses can be differentiated by whether they compare the activity of different conditions of the same region, such as variant testing, or whether they compare the activities of different regions. -For element testing, the tested sequences in this vignette are compared to a group of negative control sequences (known to have low activity in HepG2) and the sequences to be tested. -We show the usage of BCalm on a variant dataset as well as an element dataset in this vignette. First, we show how to correctly preprocess the data.

-
-

2.1 Variant testing

-

To prepare data for variant testing, we use the create_var_df function from BCalm. This function requires a mapping dataframe with information linking each reference allele to its corresponding alternative allele. Here, we use MapExample, a dataframe containing three essential columns: ID, REF, and ALT. This setup provides the necessary reference and alternative allele data to enable variant analysis.

-
# load the variant map
-data("MapExample")
-# show the data
-kable(head(MapExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-ID - -REF - -ALT -
-variant_1 - -oligo_005868 - -oligo_005870 -
-variant_2 - -oligo_005299 - -oligo_005300 -
-variant_3 - -oligo_006685 - -oligo_006687 -
-variant_4 - -oligo_006919 - -oligo_006920 -
-variant_5 - -oligo_006895 - -oligo_006897 -
-variant_6 - -oligo_006675 - -oligo_006677 -
-
-
# create the variant dataframe by adding the variant ID to the DNA and RNA counts
-var_df <- create_var_df(BcSetExample, MapExample)
-# show the data
-kable(head(var_df), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-variant_id - -allele - -Barcode - -dna_count_1 - -rna_count_1 - -dna_count_2 - -rna_count_2 - -dna_count_3 - -rna_count_3 -
-variant_820 - -ref - -TCTTAAGTAAGAAGG - -2 - -3 - -1 - -2 - -9 - -15 -
-variant_820 - -ref - -GTAAGAATGGTTGGG - -7 - -1 - -2 - -10 - -7 - -5 -
-variant_820 - -ref - -TTTAGAAGTACACTC - -4 - -3 - -4 - -11 - -1 - -1 -
-variant_820 - -ref - -TTCGTTTTGACTAGG - -4 - -4 - -9 - -11 - -6 - -14 -
-variant_820 - -ref - -TCCGTACATCGTGAA - -1 - -2 - -2 - -2 - -1 - -4 -
-variant_820 - -ref - -GGTTCAAGGAATACC - -1 - -7 - -2 - -4 - -3 - -1 -
-
-

Optionally, downsampling can be performed to our dataframe var_df now. The function downsample_barcodes allows users to reduce the number of barcodes while retaining a representative subset. This way, the number of barcodes of oligos with many barcodes are reduced, which simplifies the data handling and reduces the sparseness of the data table (i.e. increased speed and reduced memory requirements). The degree of downsampling can be controlled by adjusting the sampling rate, which is expressed as a percentile value percentile, with a default of 0.975. -The id_column_name argument specifies the column in the input data frame that contains the unique identifiers for each variant (here variant_id).

-
var_df <- downsample_barcodes(var_df, id_column_name="variant_id")
-

After downsampling the barcode counts in our dataset, we can prepare the data for analysis using the create_dna_df and create_rna_df functions. -Only six rows are shown here (original size of the dataframe 996 × 474).

-
dna_var <- create_dna_df(var_df)
-kable(head(dna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -sample_count_1_bc1_ref - -sample_count_1_bc2_ref - -sample_count_1_bc3_ref - -sample_count_1_bc4_ref - -sample_count_1_bc5_ref - -sample_count_1_bc6_ref - -sample_count_1_bc7_ref - -sample_count_1_bc8_ref - -sample_count_1_bc9_ref - -sample_count_1_bc10_ref - -sample_count_1_bc11_ref - -sample_count_1_bc12_ref - -sample_count_1_bc13_ref - -sample_count_1_bc14_ref - -sample_count_1_bc15_ref - -sample_count_1_bc16_ref - -sample_count_1_bc17_ref - -sample_count_1_bc18_ref - -sample_count_1_bc19_ref - -sample_count_1_bc20_ref - -sample_count_1_bc21_ref - -sample_count_1_bc22_ref - -sample_count_1_bc23_ref - -sample_count_1_bc24_ref - -sample_count_1_bc25_ref - -sample_count_1_bc26_ref - -sample_count_1_bc27_ref - -sample_count_1_bc28_ref - -sample_count_1_bc29_ref - -sample_count_1_bc30_ref - -sample_count_1_bc31_ref - -sample_count_1_bc32_ref - -sample_count_1_bc33_ref - -sample_count_1_bc34_ref - -sample_count_1_bc35_ref - -sample_count_1_bc36_ref - -sample_count_1_bc37_ref - -sample_count_1_bc38_ref - -sample_count_1_bc39_ref - -sample_count_1_bc40_ref - -sample_count_1_bc41_ref - -sample_count_1_bc42_ref - -sample_count_1_bc43_ref - -sample_count_1_bc44_ref - -sample_count_1_bc45_ref - -sample_count_1_bc46_ref - -sample_count_1_bc47_ref - -sample_count_1_bc48_ref - -sample_count_1_bc49_ref - -sample_count_1_bc50_ref - -sample_count_1_bc51_ref - -sample_count_1_bc52_ref - -sample_count_1_bc53_ref - -sample_count_1_bc54_ref - -sample_count_1_bc55_ref - -sample_count_1_bc56_ref - -sample_count_1_bc57_ref - -sample_count_1_bc58_ref - -sample_count_1_bc59_ref - -sample_count_1_bc60_ref - -sample_count_1_bc61_ref - -sample_count_1_bc62_ref - -sample_count_1_bc63_ref - -sample_count_1_bc64_ref - -sample_count_1_bc65_ref - -sample_count_1_bc66_ref - -sample_count_1_bc67_ref - -sample_count_1_bc68_ref - -sample_count_1_bc69_ref - -sample_count_1_bc70_ref - -sample_count_1_bc71_ref - -sample_count_1_bc72_ref - -sample_count_1_bc73_ref - -sample_count_1_bc74_ref - -sample_count_1_bc75_ref - -sample_count_1_bc76_ref - -sample_count_1_bc77_ref - -sample_count_1_bc78_ref - -sample_count_1_bc79_ref - -sample_count_1_bc1_alt - -sample_count_1_bc2_alt - -sample_count_1_bc3_alt - -sample_count_1_bc4_alt - -sample_count_1_bc5_alt - -sample_count_1_bc6_alt - -sample_count_1_bc7_alt - -sample_count_1_bc8_alt - -sample_count_1_bc9_alt - -sample_count_1_bc10_alt - -sample_count_1_bc11_alt - -sample_count_1_bc12_alt - -sample_count_1_bc13_alt - -sample_count_1_bc14_alt - -sample_count_1_bc15_alt - -sample_count_1_bc16_alt - -sample_count_1_bc17_alt - -sample_count_1_bc18_alt - -sample_count_1_bc19_alt - -sample_count_1_bc20_alt - -sample_count_1_bc21_alt - -sample_count_1_bc22_alt - -sample_count_1_bc23_alt - -sample_count_1_bc24_alt - -sample_count_1_bc25_alt - -sample_count_1_bc26_alt - -sample_count_1_bc27_alt - -sample_count_1_bc28_alt - -sample_count_1_bc29_alt - -sample_count_1_bc30_alt - -sample_count_1_bc31_alt - -sample_count_1_bc32_alt - -sample_count_1_bc33_alt - -sample_count_1_bc34_alt - -sample_count_1_bc35_alt - -sample_count_1_bc36_alt - -sample_count_1_bc37_alt - -sample_count_1_bc38_alt - -sample_count_1_bc39_alt - -sample_count_1_bc40_alt - -sample_count_1_bc41_alt - -sample_count_1_bc42_alt - -sample_count_1_bc43_alt - -sample_count_1_bc44_alt - -sample_count_1_bc45_alt - -sample_count_1_bc46_alt - -sample_count_1_bc47_alt - -sample_count_1_bc48_alt - -sample_count_1_bc49_alt - -sample_count_1_bc50_alt - -sample_count_1_bc51_alt - -sample_count_1_bc52_alt - -sample_count_1_bc53_alt - -sample_count_1_bc54_alt - -sample_count_1_bc55_alt - -sample_count_1_bc56_alt - -sample_count_1_bc57_alt - -sample_count_1_bc58_alt - -sample_count_1_bc59_alt - -sample_count_1_bc60_alt - -sample_count_1_bc61_alt - -sample_count_1_bc62_alt - -sample_count_1_bc63_alt - -sample_count_1_bc64_alt - -sample_count_1_bc65_alt - -sample_count_1_bc66_alt - -sample_count_1_bc67_alt - -sample_count_1_bc68_alt - -sample_count_1_bc69_alt - -sample_count_1_bc70_alt - -sample_count_1_bc71_alt - -sample_count_1_bc72_alt - -sample_count_1_bc73_alt - -sample_count_1_bc74_alt - -sample_count_1_bc75_alt - -sample_count_1_bc76_alt - -sample_count_1_bc77_alt - -sample_count_1_bc78_alt - -sample_count_1_bc79_alt - -sample_count_2_bc1_ref - -sample_count_2_bc2_ref - -sample_count_2_bc3_ref - -sample_count_2_bc4_ref - -sample_count_2_bc5_ref - -sample_count_2_bc6_ref - -sample_count_2_bc7_ref - -sample_count_2_bc8_ref - -sample_count_2_bc9_ref - -sample_count_2_bc10_ref - -sample_count_2_bc11_ref - -sample_count_2_bc12_ref - -sample_count_2_bc13_ref - -sample_count_2_bc14_ref - -sample_count_2_bc15_ref - -sample_count_2_bc16_ref - -sample_count_2_bc17_ref - -sample_count_2_bc18_ref - -sample_count_2_bc19_ref - -sample_count_2_bc20_ref - -sample_count_2_bc21_ref - -sample_count_2_bc22_ref - -sample_count_2_bc23_ref - -sample_count_2_bc24_ref - -sample_count_2_bc25_ref - -sample_count_2_bc26_ref - -sample_count_2_bc27_ref - -sample_count_2_bc28_ref - -sample_count_2_bc29_ref - -sample_count_2_bc30_ref - -sample_count_2_bc31_ref - -sample_count_2_bc32_ref - -sample_count_2_bc33_ref - -sample_count_2_bc34_ref - -sample_count_2_bc35_ref - -sample_count_2_bc36_ref - -sample_count_2_bc37_ref - -sample_count_2_bc38_ref - -sample_count_2_bc39_ref - -sample_count_2_bc40_ref - -sample_count_2_bc41_ref - -sample_count_2_bc42_ref - -sample_count_2_bc43_ref - -sample_count_2_bc44_ref - -sample_count_2_bc45_ref - -sample_count_2_bc46_ref - -sample_count_2_bc47_ref - -sample_count_2_bc48_ref - -sample_count_2_bc49_ref - -sample_count_2_bc50_ref - -sample_count_2_bc51_ref - -sample_count_2_bc52_ref - -sample_count_2_bc53_ref - -sample_count_2_bc54_ref - -sample_count_2_bc55_ref - -sample_count_2_bc56_ref - -sample_count_2_bc57_ref - -sample_count_2_bc58_ref - -sample_count_2_bc59_ref - -sample_count_2_bc60_ref - -sample_count_2_bc61_ref - -sample_count_2_bc62_ref - -sample_count_2_bc63_ref - -sample_count_2_bc64_ref - -sample_count_2_bc65_ref - -sample_count_2_bc66_ref - -sample_count_2_bc67_ref - -sample_count_2_bc68_ref - -sample_count_2_bc69_ref - -sample_count_2_bc70_ref - -sample_count_2_bc71_ref - -sample_count_2_bc72_ref - -sample_count_2_bc73_ref - -sample_count_2_bc74_ref - -sample_count_2_bc75_ref - -sample_count_2_bc76_ref - -sample_count_2_bc77_ref - -sample_count_2_bc78_ref - -sample_count_2_bc79_ref - -sample_count_2_bc1_alt - -sample_count_2_bc2_alt - -sample_count_2_bc3_alt - -sample_count_2_bc4_alt - -sample_count_2_bc5_alt - -sample_count_2_bc6_alt - -sample_count_2_bc7_alt - -sample_count_2_bc8_alt - -sample_count_2_bc9_alt - -sample_count_2_bc10_alt - -sample_count_2_bc11_alt - -sample_count_2_bc12_alt - -sample_count_2_bc13_alt - -sample_count_2_bc14_alt - -sample_count_2_bc15_alt - -sample_count_2_bc16_alt - -sample_count_2_bc17_alt - -sample_count_2_bc18_alt - -sample_count_2_bc19_alt - -sample_count_2_bc20_alt - -sample_count_2_bc21_alt - -sample_count_2_bc22_alt - -sample_count_2_bc23_alt - -sample_count_2_bc24_alt - -sample_count_2_bc25_alt - -sample_count_2_bc26_alt - -sample_count_2_bc27_alt - -sample_count_2_bc28_alt - -sample_count_2_bc29_alt - -sample_count_2_bc30_alt - -sample_count_2_bc31_alt - -sample_count_2_bc32_alt - -sample_count_2_bc33_alt - -sample_count_2_bc34_alt - -sample_count_2_bc35_alt - -sample_count_2_bc36_alt - -sample_count_2_bc37_alt - -sample_count_2_bc38_alt - -sample_count_2_bc39_alt - -sample_count_2_bc40_alt - -sample_count_2_bc41_alt - -sample_count_2_bc42_alt - -sample_count_2_bc43_alt - -sample_count_2_bc44_alt - -sample_count_2_bc45_alt - -sample_count_2_bc46_alt - -sample_count_2_bc47_alt - -sample_count_2_bc48_alt - -sample_count_2_bc49_alt - -sample_count_2_bc50_alt - -sample_count_2_bc51_alt - -sample_count_2_bc52_alt - -sample_count_2_bc53_alt - -sample_count_2_bc54_alt - -sample_count_2_bc55_alt - -sample_count_2_bc56_alt - -sample_count_2_bc57_alt - -sample_count_2_bc58_alt - -sample_count_2_bc59_alt - -sample_count_2_bc60_alt - -sample_count_2_bc61_alt - -sample_count_2_bc62_alt - -sample_count_2_bc63_alt - -sample_count_2_bc64_alt - -sample_count_2_bc65_alt - -sample_count_2_bc66_alt - -sample_count_2_bc67_alt - -sample_count_2_bc68_alt - -sample_count_2_bc69_alt - -sample_count_2_bc70_alt - -sample_count_2_bc71_alt - -sample_count_2_bc72_alt - -sample_count_2_bc73_alt - -sample_count_2_bc74_alt - -sample_count_2_bc75_alt - -sample_count_2_bc76_alt - -sample_count_2_bc77_alt - -sample_count_2_bc78_alt - -sample_count_2_bc79_alt - -sample_count_3_bc1_ref - -sample_count_3_bc2_ref - -sample_count_3_bc3_ref - -sample_count_3_bc4_ref - -sample_count_3_bc5_ref - -sample_count_3_bc6_ref - -sample_count_3_bc7_ref - -sample_count_3_bc8_ref - -sample_count_3_bc9_ref - -sample_count_3_bc10_ref - -sample_count_3_bc11_ref - -sample_count_3_bc12_ref - -sample_count_3_bc13_ref - -sample_count_3_bc14_ref - -sample_count_3_bc15_ref - -sample_count_3_bc16_ref - -sample_count_3_bc17_ref - -sample_count_3_bc18_ref - -sample_count_3_bc19_ref - -sample_count_3_bc20_ref - -sample_count_3_bc21_ref - -sample_count_3_bc22_ref - -sample_count_3_bc23_ref - -sample_count_3_bc24_ref - -sample_count_3_bc25_ref - -sample_count_3_bc26_ref - -sample_count_3_bc27_ref - -sample_count_3_bc28_ref - -sample_count_3_bc29_ref - -sample_count_3_bc30_ref - -sample_count_3_bc31_ref - -sample_count_3_bc32_ref - -sample_count_3_bc33_ref - -sample_count_3_bc34_ref - -sample_count_3_bc35_ref - -sample_count_3_bc36_ref - -sample_count_3_bc37_ref - -sample_count_3_bc38_ref - -sample_count_3_bc39_ref - -sample_count_3_bc40_ref - -sample_count_3_bc41_ref - -sample_count_3_bc42_ref - -sample_count_3_bc43_ref - -sample_count_3_bc44_ref - -sample_count_3_bc45_ref - -sample_count_3_bc46_ref - -sample_count_3_bc47_ref - -sample_count_3_bc48_ref - -sample_count_3_bc49_ref - -sample_count_3_bc50_ref - -sample_count_3_bc51_ref - -sample_count_3_bc52_ref - -sample_count_3_bc53_ref - -sample_count_3_bc54_ref - -sample_count_3_bc55_ref - -sample_count_3_bc56_ref - -sample_count_3_bc57_ref - -sample_count_3_bc58_ref - -sample_count_3_bc59_ref - -sample_count_3_bc60_ref - -sample_count_3_bc61_ref - -sample_count_3_bc62_ref - -sample_count_3_bc63_ref - -sample_count_3_bc64_ref - -sample_count_3_bc65_ref - -sample_count_3_bc66_ref - -sample_count_3_bc67_ref - -sample_count_3_bc68_ref - -sample_count_3_bc69_ref - -sample_count_3_bc70_ref - -sample_count_3_bc71_ref - -sample_count_3_bc72_ref - -sample_count_3_bc73_ref - -sample_count_3_bc74_ref - -sample_count_3_bc75_ref - -sample_count_3_bc76_ref - -sample_count_3_bc77_ref - -sample_count_3_bc78_ref - -sample_count_3_bc79_ref - -sample_count_3_bc1_alt - -sample_count_3_bc2_alt - -sample_count_3_bc3_alt - -sample_count_3_bc4_alt - -sample_count_3_bc5_alt - -sample_count_3_bc6_alt - -sample_count_3_bc7_alt - -sample_count_3_bc8_alt - -sample_count_3_bc9_alt - -sample_count_3_bc10_alt - -sample_count_3_bc11_alt - -sample_count_3_bc12_alt - -sample_count_3_bc13_alt - -sample_count_3_bc14_alt - -sample_count_3_bc15_alt - -sample_count_3_bc16_alt - -sample_count_3_bc17_alt - -sample_count_3_bc18_alt - -sample_count_3_bc19_alt - -sample_count_3_bc20_alt - -sample_count_3_bc21_alt - -sample_count_3_bc22_alt - -sample_count_3_bc23_alt - -sample_count_3_bc24_alt - -sample_count_3_bc25_alt - -sample_count_3_bc26_alt - -sample_count_3_bc27_alt - -sample_count_3_bc28_alt - -sample_count_3_bc29_alt - -sample_count_3_bc30_alt - -sample_count_3_bc31_alt - -sample_count_3_bc32_alt - -sample_count_3_bc33_alt - -sample_count_3_bc34_alt - -sample_count_3_bc35_alt - -sample_count_3_bc36_alt - -sample_count_3_bc37_alt - -sample_count_3_bc38_alt - -sample_count_3_bc39_alt - -sample_count_3_bc40_alt - -sample_count_3_bc41_alt - -sample_count_3_bc42_alt - -sample_count_3_bc43_alt - -sample_count_3_bc44_alt - -sample_count_3_bc45_alt - -sample_count_3_bc46_alt - -sample_count_3_bc47_alt - -sample_count_3_bc48_alt - -sample_count_3_bc49_alt - -sample_count_3_bc50_alt - -sample_count_3_bc51_alt - -sample_count_3_bc52_alt - -sample_count_3_bc53_alt - -sample_count_3_bc54_alt - -sample_count_3_bc55_alt - -sample_count_3_bc56_alt - -sample_count_3_bc57_alt - -sample_count_3_bc58_alt - -sample_count_3_bc59_alt - -sample_count_3_bc60_alt - -sample_count_3_bc61_alt - -sample_count_3_bc62_alt - -sample_count_3_bc63_alt - -sample_count_3_bc64_alt - -sample_count_3_bc65_alt - -sample_count_3_bc66_alt - -sample_count_3_bc67_alt - -sample_count_3_bc68_alt - -sample_count_3_bc69_alt - -sample_count_3_bc70_alt - -sample_count_3_bc71_alt - -sample_count_3_bc72_alt - -sample_count_3_bc73_alt - -sample_count_3_bc74_alt - -sample_count_3_bc75_alt - -sample_count_3_bc76_alt - -sample_count_3_bc77_alt - -sample_count_3_bc78_alt - -sample_count_3_bc79_alt -
-variant_10 - -8 - -4 - -2 - -5 - -3 - -8 - -9 - -6 - -2 - -7 - -4 - -3 - -6 - -2 - -5 - -2 - -4 - -4 - -5 - -4 - -1 - -8 - -1 - -1 - -5 - -5 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -4 - -4 - -7 - -8 - -2 - -1 - -1 - -3 - -1 - -2 - -2 - -4 - -1 - -1 - -2 - -3 - -2 - -1 - -3 - -3 - -1 - -1 - -3 - -5 - -2 - -1 - -3 - -1 - -3 - -7 - -3 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -4 - -3 - -1 - -2 - -1 - -1 - -4 - -3 - -4 - -6 - -1 - -1 - -2 - -1 - -7 - -2 - -2 - -4 - -1 - -2 - -3 - -2 - -4 - -2 - -2 - -5 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -7 - -3 - -1 - -3 - -3 - -6 - -3 - -4 - -4 - -3 - -3 - -2 - -1 - -1 - -1 - -1 - -1 - -1 - -6 - -2 - -5 - -2 - -1 - -3 - -1 - -1 - -4 - -8 - -1 - -6 - -2 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -11 - -7 - -3 - -1 - -4 - -4 - -2 - -9 - -2 - -14 - -1 - -7 - -1 - -4 - -2 - -2 - -6 - -3 - -3 - -1 - -1 - -5 - -2 - -3 - -4 - -6 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -1 - -3 - -7 - -8 - -7 - -1 - -2 - -4 - -5 - -5 - -6 - -6 - -4 - -4 - -2 - -12 - -1 - -6 - -6 - -4 - -1 - -3 - -2 - -1 - -3 - -5 - -4 - -13 - -3 - -6 - -2 - -13 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100 - -12 - -11 - -2 - -3 - -2 - -3 - -2 - -11 - -6 - -3 - -19 - -3 - -4 - -4 - -7 - -2 - -4 - -5 - -8 - -3 - -3 - -1 - -3 - -3 - -3 - -5 - -10 - -4 - -6 - -6 - -11 - -2 - -8 - -4 - -4 - -2 - -4 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -3 - -10 - -5 - -8 - -3 - -4 - -1 - -6 - -3 - -2 - -4 - -3 - -7 - -9 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -2 - -7 - -1 - -4 - -2 - -3 - -4 - -3 - -3 - -3 - -7 - -6 - -2 - -3 - -1 - -12 - -5 - -7 - -6 - -2 - -1 - -4 - -2 - -9 - -2 - -3 - -7 - -3 - -5 - -5 - -12 - -9 - -9 - -3 - -5 - -1 - -1 - -9 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -4 - -2 - -9 - -7 - -6 - -2 - -3 - -5 - -14 - -5 - -4 - -8 - -5 - -4 - -2 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -6 - -7 - -6 - -5 - -2 - -2 - -3 - -3 - -1 - -4 - -5 - -4 - -6 - -10 - -7 - -3 - -4 - -2 - -4 - -1 - -3 - -2 - -2 - -2 - -1 - -7 - -2 - -2 - -1 - -3 - -7 - -4 - -2 - -5 - -1 - -1 - -4 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -5 - -2 - -10 - -6 - -1 - -2 - -2 - -1 - -3 - -1 - -8 - -3 - -2 - -1 - -1 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100314 - -9 - -5 - -1 - -5 - -12 - -2 - -12 - -10 - -10 - -3 - -7 - -16 - -4 - -8 - -2 - -8 - -2 - -4 - -13 - -3 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -7 - -10 - -4 - -5 - -4 - -3 - -12 - -10 - -5 - -4 - -11 - -17 - -1 - -5 - -5 - -7 - -5 - -5 - -13 - -10 - -4 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -1 - -6 - -1 - -5 - -9 - -3 - -3 - -10 - -12 - -9 - -24 - -2 - -1 - -2 - -10 - -3 - -2 - -3 - -14 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100463 - -7 - -8 - -3 - -1 - -1 - -7 - -2 - -3 - -8 - -1 - -6 - -3 - -5 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -1 - -3 - -3 - -1 - -3 - -3 - -6 - -1 - -3 - -2 - -6 - -1 - -5 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -4 - -4 - -4 - -2 - -3 - -3 - -1 - -2 - -3 - -6 - -1 - -4 - -4 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_101 - -18 - -16 - -3 - -9 - -4 - -1 - -4 - -3 - -14 - -5 - -3 - -7 - -1 - -1 - -7 - -5 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -1 - -2 - -4 - -7 - -7 - -1 - -3 - -3 - -4 - -1 - -6 - -2 - -12 - -2 - -10 - -4 - -1 - -6 - -2 - -6 - -3 - -3 - -1 - -8 - -3 - -1 - -2 - -10 - -4 - -5 - -10 - -6 - -3 - -1 - -3 - -3 - -4 - -5 - -5 - -2 - -5 - -6 - -5 - -11 - -5 - -7 - -3 - -2 - -2 - -3 - -5 - -11 - -13 - -10 - -7 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -1 - -13 - -6 - -7 - -2 - -2 - -1 - -1 - -8 - -1 - -3 - -2 - -3 - -6 - -12 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -1 - -5 - -1 - -2 - -2 - -16 - -12 - -1 - -10 - -3 - -2 - -2 - -4 - -4 - -9 - -5 - -6 - -1 - -6 - -2 - -3 - -2 - -7 - -2 - -1 - -2 - -6 - -3 - -1 - -2 - -3 - -3 - -1 - -4 - -8 - -1 - -1 - -4 - -4 - -5 - -1 - -4 - -9 - -5 - -4 - -2 - -7 - -9 - -1 - -9 - -11 - -4 - -7 - -12 - -9 - -6 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -10 - -11 - -2 - -6 - -6 - -1 - -4 - -1 - -2 - -1 - -2 - -3 - -7 - -7 - -6 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -7 - -1 - -2 - -8 - -6 - -5 - -5 - -1 - -6 - -5 - -2 - -3 - -3 - -2 - -2 - -3 - -2 - -2 - -3 - -3 - -4 - -5 - -2 - -5 - -2 - -2 - -1 - -5 - -15 - -1 - -5 - -4 - -2 - -1 - -1 - -1 - -4 - -4 - -1 - -2 - -1 - -3 - -14 - -12 - -2 - -1 - -2 - -7 - -2 - -2 - -5 - -8 - -12 - -4 - -7 - -4 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_101165 - -2 - -8 - -9 - -7 - -7 - -5 - -5 - -2 - -2 - -21 - -2 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -2 - -4 - -3 - -4 - -5 - -3 - -4 - -2 - -10 - -7 - -10 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -1 - -6 - -2 - -4 - -3 - -2 - -1 - -1 - -7 - -10 - -1 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-
-
rna_var <- create_rna_df(var_df)
-kable(head(rna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -sample_count_1_bc1_ref - -sample_count_1_bc2_ref - -sample_count_1_bc3_ref - -sample_count_1_bc4_ref - -sample_count_1_bc5_ref - -sample_count_1_bc6_ref - -sample_count_1_bc7_ref - -sample_count_1_bc8_ref - -sample_count_1_bc9_ref - -sample_count_1_bc10_ref - -sample_count_1_bc11_ref - -sample_count_1_bc12_ref - -sample_count_1_bc13_ref - -sample_count_1_bc14_ref - -sample_count_1_bc15_ref - -sample_count_1_bc16_ref - -sample_count_1_bc17_ref - -sample_count_1_bc18_ref - -sample_count_1_bc19_ref - -sample_count_1_bc20_ref - -sample_count_1_bc21_ref - -sample_count_1_bc22_ref - -sample_count_1_bc23_ref - -sample_count_1_bc24_ref - -sample_count_1_bc25_ref - -sample_count_1_bc26_ref - -sample_count_1_bc27_ref - -sample_count_1_bc28_ref - -sample_count_1_bc29_ref - -sample_count_1_bc30_ref - -sample_count_1_bc31_ref - -sample_count_1_bc32_ref - -sample_count_1_bc33_ref - -sample_count_1_bc34_ref - -sample_count_1_bc35_ref - -sample_count_1_bc36_ref - -sample_count_1_bc37_ref - -sample_count_1_bc38_ref - -sample_count_1_bc39_ref - -sample_count_1_bc40_ref - -sample_count_1_bc41_ref - -sample_count_1_bc42_ref - -sample_count_1_bc43_ref - -sample_count_1_bc44_ref - -sample_count_1_bc45_ref - -sample_count_1_bc46_ref - -sample_count_1_bc47_ref - -sample_count_1_bc48_ref - -sample_count_1_bc49_ref - -sample_count_1_bc50_ref - -sample_count_1_bc51_ref - -sample_count_1_bc52_ref - -sample_count_1_bc53_ref - -sample_count_1_bc54_ref - -sample_count_1_bc55_ref - -sample_count_1_bc56_ref - -sample_count_1_bc57_ref - -sample_count_1_bc58_ref - -sample_count_1_bc59_ref - -sample_count_1_bc60_ref - -sample_count_1_bc61_ref - -sample_count_1_bc62_ref - -sample_count_1_bc63_ref - -sample_count_1_bc64_ref - -sample_count_1_bc65_ref - -sample_count_1_bc66_ref - -sample_count_1_bc67_ref - -sample_count_1_bc68_ref - -sample_count_1_bc69_ref - -sample_count_1_bc70_ref - -sample_count_1_bc71_ref - -sample_count_1_bc72_ref - -sample_count_1_bc73_ref - -sample_count_1_bc74_ref - -sample_count_1_bc75_ref - -sample_count_1_bc76_ref - -sample_count_1_bc77_ref - -sample_count_1_bc78_ref - -sample_count_1_bc79_ref - -sample_count_1_bc1_alt - -sample_count_1_bc2_alt - -sample_count_1_bc3_alt - -sample_count_1_bc4_alt - -sample_count_1_bc5_alt - -sample_count_1_bc6_alt - -sample_count_1_bc7_alt - -sample_count_1_bc8_alt - -sample_count_1_bc9_alt - -sample_count_1_bc10_alt - -sample_count_1_bc11_alt - -sample_count_1_bc12_alt - -sample_count_1_bc13_alt - -sample_count_1_bc14_alt - -sample_count_1_bc15_alt - -sample_count_1_bc16_alt - -sample_count_1_bc17_alt - -sample_count_1_bc18_alt - -sample_count_1_bc19_alt - -sample_count_1_bc20_alt - -sample_count_1_bc21_alt - -sample_count_1_bc22_alt - -sample_count_1_bc23_alt - -sample_count_1_bc24_alt - -sample_count_1_bc25_alt - -sample_count_1_bc26_alt - -sample_count_1_bc27_alt - -sample_count_1_bc28_alt - -sample_count_1_bc29_alt - -sample_count_1_bc30_alt - -sample_count_1_bc31_alt - -sample_count_1_bc32_alt - -sample_count_1_bc33_alt - -sample_count_1_bc34_alt - -sample_count_1_bc35_alt - -sample_count_1_bc36_alt - -sample_count_1_bc37_alt - -sample_count_1_bc38_alt - -sample_count_1_bc39_alt - -sample_count_1_bc40_alt - -sample_count_1_bc41_alt - -sample_count_1_bc42_alt - -sample_count_1_bc43_alt - -sample_count_1_bc44_alt - -sample_count_1_bc45_alt - -sample_count_1_bc46_alt - -sample_count_1_bc47_alt - -sample_count_1_bc48_alt - -sample_count_1_bc49_alt - -sample_count_1_bc50_alt - -sample_count_1_bc51_alt - -sample_count_1_bc52_alt - -sample_count_1_bc53_alt - -sample_count_1_bc54_alt - -sample_count_1_bc55_alt - -sample_count_1_bc56_alt - -sample_count_1_bc57_alt - -sample_count_1_bc58_alt - -sample_count_1_bc59_alt - -sample_count_1_bc60_alt - -sample_count_1_bc61_alt - -sample_count_1_bc62_alt - -sample_count_1_bc63_alt - -sample_count_1_bc64_alt - -sample_count_1_bc65_alt - -sample_count_1_bc66_alt - -sample_count_1_bc67_alt - -sample_count_1_bc68_alt - -sample_count_1_bc69_alt - -sample_count_1_bc70_alt - -sample_count_1_bc71_alt - -sample_count_1_bc72_alt - -sample_count_1_bc73_alt - -sample_count_1_bc74_alt - -sample_count_1_bc75_alt - -sample_count_1_bc76_alt - -sample_count_1_bc77_alt - -sample_count_1_bc78_alt - -sample_count_1_bc79_alt - -sample_count_2_bc1_ref - -sample_count_2_bc2_ref - -sample_count_2_bc3_ref - -sample_count_2_bc4_ref - -sample_count_2_bc5_ref - -sample_count_2_bc6_ref - -sample_count_2_bc7_ref - -sample_count_2_bc8_ref - -sample_count_2_bc9_ref - -sample_count_2_bc10_ref - -sample_count_2_bc11_ref - -sample_count_2_bc12_ref - -sample_count_2_bc13_ref - -sample_count_2_bc14_ref - -sample_count_2_bc15_ref - -sample_count_2_bc16_ref - -sample_count_2_bc17_ref - -sample_count_2_bc18_ref - -sample_count_2_bc19_ref - -sample_count_2_bc20_ref - -sample_count_2_bc21_ref - -sample_count_2_bc22_ref - -sample_count_2_bc23_ref - -sample_count_2_bc24_ref - -sample_count_2_bc25_ref - -sample_count_2_bc26_ref - -sample_count_2_bc27_ref - -sample_count_2_bc28_ref - -sample_count_2_bc29_ref - -sample_count_2_bc30_ref - -sample_count_2_bc31_ref - -sample_count_2_bc32_ref - -sample_count_2_bc33_ref - -sample_count_2_bc34_ref - -sample_count_2_bc35_ref - -sample_count_2_bc36_ref - -sample_count_2_bc37_ref - -sample_count_2_bc38_ref - -sample_count_2_bc39_ref - -sample_count_2_bc40_ref - -sample_count_2_bc41_ref - -sample_count_2_bc42_ref - -sample_count_2_bc43_ref - -sample_count_2_bc44_ref - -sample_count_2_bc45_ref - -sample_count_2_bc46_ref - -sample_count_2_bc47_ref - -sample_count_2_bc48_ref - -sample_count_2_bc49_ref - -sample_count_2_bc50_ref - -sample_count_2_bc51_ref - -sample_count_2_bc52_ref - -sample_count_2_bc53_ref - -sample_count_2_bc54_ref - -sample_count_2_bc55_ref - -sample_count_2_bc56_ref - -sample_count_2_bc57_ref - -sample_count_2_bc58_ref - -sample_count_2_bc59_ref - -sample_count_2_bc60_ref - -sample_count_2_bc61_ref - -sample_count_2_bc62_ref - -sample_count_2_bc63_ref - -sample_count_2_bc64_ref - -sample_count_2_bc65_ref - -sample_count_2_bc66_ref - -sample_count_2_bc67_ref - -sample_count_2_bc68_ref - -sample_count_2_bc69_ref - -sample_count_2_bc70_ref - -sample_count_2_bc71_ref - -sample_count_2_bc72_ref - -sample_count_2_bc73_ref - -sample_count_2_bc74_ref - -sample_count_2_bc75_ref - -sample_count_2_bc76_ref - -sample_count_2_bc77_ref - -sample_count_2_bc78_ref - -sample_count_2_bc79_ref - -sample_count_2_bc1_alt - -sample_count_2_bc2_alt - -sample_count_2_bc3_alt - -sample_count_2_bc4_alt - -sample_count_2_bc5_alt - -sample_count_2_bc6_alt - -sample_count_2_bc7_alt - -sample_count_2_bc8_alt - -sample_count_2_bc9_alt - -sample_count_2_bc10_alt - -sample_count_2_bc11_alt - -sample_count_2_bc12_alt - -sample_count_2_bc13_alt - -sample_count_2_bc14_alt - -sample_count_2_bc15_alt - -sample_count_2_bc16_alt - -sample_count_2_bc17_alt - -sample_count_2_bc18_alt - -sample_count_2_bc19_alt - -sample_count_2_bc20_alt - -sample_count_2_bc21_alt - -sample_count_2_bc22_alt - -sample_count_2_bc23_alt - -sample_count_2_bc24_alt - -sample_count_2_bc25_alt - -sample_count_2_bc26_alt - -sample_count_2_bc27_alt - -sample_count_2_bc28_alt - -sample_count_2_bc29_alt - -sample_count_2_bc30_alt - -sample_count_2_bc31_alt - -sample_count_2_bc32_alt - -sample_count_2_bc33_alt - -sample_count_2_bc34_alt - -sample_count_2_bc35_alt - -sample_count_2_bc36_alt - -sample_count_2_bc37_alt - -sample_count_2_bc38_alt - -sample_count_2_bc39_alt - -sample_count_2_bc40_alt - -sample_count_2_bc41_alt - -sample_count_2_bc42_alt - -sample_count_2_bc43_alt - -sample_count_2_bc44_alt - -sample_count_2_bc45_alt - -sample_count_2_bc46_alt - -sample_count_2_bc47_alt - -sample_count_2_bc48_alt - -sample_count_2_bc49_alt - -sample_count_2_bc50_alt - -sample_count_2_bc51_alt - -sample_count_2_bc52_alt - -sample_count_2_bc53_alt - -sample_count_2_bc54_alt - -sample_count_2_bc55_alt - -sample_count_2_bc56_alt - -sample_count_2_bc57_alt - -sample_count_2_bc58_alt - -sample_count_2_bc59_alt - -sample_count_2_bc60_alt - -sample_count_2_bc61_alt - -sample_count_2_bc62_alt - -sample_count_2_bc63_alt - -sample_count_2_bc64_alt - -sample_count_2_bc65_alt - -sample_count_2_bc66_alt - -sample_count_2_bc67_alt - -sample_count_2_bc68_alt - -sample_count_2_bc69_alt - -sample_count_2_bc70_alt - -sample_count_2_bc71_alt - -sample_count_2_bc72_alt - -sample_count_2_bc73_alt - -sample_count_2_bc74_alt - -sample_count_2_bc75_alt - -sample_count_2_bc76_alt - -sample_count_2_bc77_alt - -sample_count_2_bc78_alt - -sample_count_2_bc79_alt - -sample_count_3_bc1_ref - -sample_count_3_bc2_ref - -sample_count_3_bc3_ref - -sample_count_3_bc4_ref - -sample_count_3_bc5_ref - -sample_count_3_bc6_ref - -sample_count_3_bc7_ref - -sample_count_3_bc8_ref - -sample_count_3_bc9_ref - -sample_count_3_bc10_ref - -sample_count_3_bc11_ref - -sample_count_3_bc12_ref - -sample_count_3_bc13_ref - -sample_count_3_bc14_ref - -sample_count_3_bc15_ref - -sample_count_3_bc16_ref - -sample_count_3_bc17_ref - -sample_count_3_bc18_ref - -sample_count_3_bc19_ref - -sample_count_3_bc20_ref - -sample_count_3_bc21_ref - -sample_count_3_bc22_ref - -sample_count_3_bc23_ref - -sample_count_3_bc24_ref - -sample_count_3_bc25_ref - -sample_count_3_bc26_ref - -sample_count_3_bc27_ref - -sample_count_3_bc28_ref - -sample_count_3_bc29_ref - -sample_count_3_bc30_ref - -sample_count_3_bc31_ref - -sample_count_3_bc32_ref - -sample_count_3_bc33_ref - -sample_count_3_bc34_ref - -sample_count_3_bc35_ref - -sample_count_3_bc36_ref - -sample_count_3_bc37_ref - -sample_count_3_bc38_ref - -sample_count_3_bc39_ref - -sample_count_3_bc40_ref - -sample_count_3_bc41_ref - -sample_count_3_bc42_ref - -sample_count_3_bc43_ref - -sample_count_3_bc44_ref - -sample_count_3_bc45_ref - -sample_count_3_bc46_ref - -sample_count_3_bc47_ref - -sample_count_3_bc48_ref - -sample_count_3_bc49_ref - -sample_count_3_bc50_ref - -sample_count_3_bc51_ref - -sample_count_3_bc52_ref - -sample_count_3_bc53_ref - -sample_count_3_bc54_ref - -sample_count_3_bc55_ref - -sample_count_3_bc56_ref - -sample_count_3_bc57_ref - -sample_count_3_bc58_ref - -sample_count_3_bc59_ref - -sample_count_3_bc60_ref - -sample_count_3_bc61_ref - -sample_count_3_bc62_ref - -sample_count_3_bc63_ref - -sample_count_3_bc64_ref - -sample_count_3_bc65_ref - -sample_count_3_bc66_ref - -sample_count_3_bc67_ref - -sample_count_3_bc68_ref - -sample_count_3_bc69_ref - -sample_count_3_bc70_ref - -sample_count_3_bc71_ref - -sample_count_3_bc72_ref - -sample_count_3_bc73_ref - -sample_count_3_bc74_ref - -sample_count_3_bc75_ref - -sample_count_3_bc76_ref - -sample_count_3_bc77_ref - -sample_count_3_bc78_ref - -sample_count_3_bc79_ref - -sample_count_3_bc1_alt - -sample_count_3_bc2_alt - -sample_count_3_bc3_alt - -sample_count_3_bc4_alt - -sample_count_3_bc5_alt - -sample_count_3_bc6_alt - -sample_count_3_bc7_alt - -sample_count_3_bc8_alt - -sample_count_3_bc9_alt - -sample_count_3_bc10_alt - -sample_count_3_bc11_alt - -sample_count_3_bc12_alt - -sample_count_3_bc13_alt - -sample_count_3_bc14_alt - -sample_count_3_bc15_alt - -sample_count_3_bc16_alt - -sample_count_3_bc17_alt - -sample_count_3_bc18_alt - -sample_count_3_bc19_alt - -sample_count_3_bc20_alt - -sample_count_3_bc21_alt - -sample_count_3_bc22_alt - -sample_count_3_bc23_alt - -sample_count_3_bc24_alt - -sample_count_3_bc25_alt - -sample_count_3_bc26_alt - -sample_count_3_bc27_alt - -sample_count_3_bc28_alt - -sample_count_3_bc29_alt - -sample_count_3_bc30_alt - -sample_count_3_bc31_alt - -sample_count_3_bc32_alt - -sample_count_3_bc33_alt - -sample_count_3_bc34_alt - -sample_count_3_bc35_alt - -sample_count_3_bc36_alt - -sample_count_3_bc37_alt - -sample_count_3_bc38_alt - -sample_count_3_bc39_alt - -sample_count_3_bc40_alt - -sample_count_3_bc41_alt - -sample_count_3_bc42_alt - -sample_count_3_bc43_alt - -sample_count_3_bc44_alt - -sample_count_3_bc45_alt - -sample_count_3_bc46_alt - -sample_count_3_bc47_alt - -sample_count_3_bc48_alt - -sample_count_3_bc49_alt - -sample_count_3_bc50_alt - -sample_count_3_bc51_alt - -sample_count_3_bc52_alt - -sample_count_3_bc53_alt - -sample_count_3_bc54_alt - -sample_count_3_bc55_alt - -sample_count_3_bc56_alt - -sample_count_3_bc57_alt - -sample_count_3_bc58_alt - -sample_count_3_bc59_alt - -sample_count_3_bc60_alt - -sample_count_3_bc61_alt - -sample_count_3_bc62_alt - -sample_count_3_bc63_alt - -sample_count_3_bc64_alt - -sample_count_3_bc65_alt - -sample_count_3_bc66_alt - -sample_count_3_bc67_alt - -sample_count_3_bc68_alt - -sample_count_3_bc69_alt - -sample_count_3_bc70_alt - -sample_count_3_bc71_alt - -sample_count_3_bc72_alt - -sample_count_3_bc73_alt - -sample_count_3_bc74_alt - -sample_count_3_bc75_alt - -sample_count_3_bc76_alt - -sample_count_3_bc77_alt - -sample_count_3_bc78_alt - -sample_count_3_bc79_alt -
-variant_10 - -7 - -7 - -3 - -1 - -15 - -1 - -18 - -43 - -2 - -22 - -16 - -16 - -4 - -6 - -3 - -17 - -2 - -24 - -3 - -17 - -5 - -16 - -41 - -8 - -12 - -25 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -29 - -5 - -12 - -11 - -3 - -2 - -4 - -2 - -2 - -1 - -4 - -32 - -10 - -2 - -5 - -16 - -6 - -8 - -12 - -8 - -9 - -7 - -13 - -4 - -8 - -4 - -2 - -11 - -1 - -16 - -9 - -8 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -2 - -6 - -1 - -7 - -8 - -2 - -24 - -8 - -3 - -23 - -4 - -7 - -1 - -2 - -13 - -11 - -1 - -4 - -14 - -1 - -4 - -2 - -6 - -10 - -10 - -8 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -27 - -10 - -2 - -32 - -3 - -16 - -35 - -6 - -19 - -17 - -16 - -6 - -5 - -55 - -1 - -13 - -22 - -15 - -17 - -2 - -10 - -34 - -1 - -54 - -6 - -12 - -15 - -2 - -5 - -15 - -11 - -44 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -10 - -22 - -7 - -4 - -4 - -13 - -2 - -31 - -5 - -15 - -27 - -6 - -12 - -49 - -6 - -8 - -12 - -13 - -15 - -7 - -12 - -5 - -5 - -21 - -1 - -23 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -25 - -35 - -17 - -3 - -2 - -18 - -3 - -10 - -14 - -13 - -25 - -25 - -18 - -16 - -10 - -25 - -18 - -2 - -10 - -19 - -2 - -8 - -4 - -27 - -7 - -1 - -10 - -12 - -7 - -15 - -40 - -19 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100 - -39 - -9 - -21 - -16 - -2 - -5 - -22 - -46 - -23 - -55 - -38 - -23 - -39 - -13 - -21 - -2 - -8 - -31 - -27 - -32 - -5 - -7 - -9 - -19 - -20 - -7 - -14 - -16 - -45 - -1 - -36 - -14 - -7 - -14 - -8 - -3 - -26 - -11 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -4 - -6 - -11 - -1 - -19 - -2 - -7 - -3 - -31 - -6 - -3 - -4 - -2 - -1 - -13 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -8 - -18 - -12 - -39 - -12 - -15 - -5 - -22 - -17 - -24 - -39 - -20 - -5 - -17 - -30 - -5 - -8 - -23 - -20 - -58 - -18 - -1 - -10 - -2 - -12 - -7 - -8 - -11 - -6 - -13 - -17 - -22 - -64 - -23 - -20 - -11 - -6 - -10 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -11 - -8 - -19 - -11 - -13 - -6 - -5 - -2 - -9 - -20 - -11 - -7 - -1 - -4 - -3 - -21 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -13 - -25 - -19 - -43 - -3 - -41 - -10 - -51 - -3 - -26 - -49 - -8 - -27 - -3 - -5 - -21 - -36 - -5 - -42 - -5 - -10 - -2 - -2 - -26 - -7 - -29 - -2 - -33 - -5 - -5 - -15 - -36 - -115 - -5 - -37 - -4 - -7 - -27 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -9 - -32 - -27 - -8 - -18 - -4 - -6 - -11 - -3 - -9 - -5 - -4 - -1 - -3 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100314 - -1 - -17 - -3 - -6 - -8 - -4 - -4 - -6 - -15 - -12 - -4 - -17 - -7 - -10 - -9 - -11 - -15 - -9 - -16 - -2 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -5 - -5 - -20 - -11 - -9 - -4 - -2 - -6 - -24 - -5 - -11 - -12 - -3 - -10 - -11 - -2 - -4 - -6 - -29 - -34 - -4 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -2 - -18 - -11 - -21 - -6 - -1 - -7 - -33 - -10 - -3 - -38 - -2 - -6 - -6 - -2 - -5 - -2 - -2 - -28 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100463 - -1 - -2 - -3 - -11 - -2 - -2 - -24 - -3 - -9 - -1 - -2 - -4 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -4 - -1 - -4 - -1 - -4 - -9 - -2 - -7 - -8 - -2 - -14 - -10 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -22 - -1 - -9 - -2 - -2 - -2 - -6 - -8 - -3 - -9 - -4 - -6 - -4 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_101 - -7 - -19 - -4 - -28 - -1 - -5 - -1 - -1 - -9 - -1 - -6 - -7 - -5 - -12 - -59 - -13 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -32 - -2 - -12 - -1 - -22 - -19 - -11 - -6 - -45 - -8 - -13 - -2 - -24 - -8 - -51 - -12 - -16 - -4 - -51 - -11 - -25 - -35 - -7 - -6 - -79 - -34 - -19 - -9 - -26 - -4 - -43 - -10 - -11 - -6 - -4 - -18 - -7 - -22 - -1 - -37 - -6 - -58 - -2 - -12 - -41 - -25 - -2 - -16 - -17 - -29 - -19 - -20 - -63 - -16 - -82 - -15 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -12 - -40 - -3 - -16 - -23 - -5 - -3 - -2 - -2 - -6 - -4 - -12 - -5 - -24 - -26 - -8 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -48 - -23 - -39 - -29 - -5 - -84 - -37 - -51 - -27 - -18 - -24 - -20 - -20 - -15 - -13 - -13 - -18 - -6 - -32 - -9 - -23 - -30 - -8 - -38 - -22 - -12 - -49 - -23 - -40 - -6 - -13 - -9 - -32 - -20 - -38 - -5 - -4 - -25 - -31 - -4 - -39 - -5 - -58 - -36 - -16 - -23 - -5 - -61 - -1 - -22 - -4 - -5 - -272 - -8 - -37 - -23 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -21 - -5 - -5 - -3 - -4 - -2 - -4 - -3 - -1 - -2 - -2 - -2 - -16 - -12 - -3 - -6 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -32 - -1 - -37 - -22 - -33 - -45 - -14 - -1 - -23 - -36 - -22 - -5 - -11 - -5 - -53 - -17 - -14 - -10 - -2 - -2 - -22 - -11 - -14 - -62 - -12 - -25 - -6 - -17 - -62 - -7 - -91 - -10 - -25 - -9 - -6 - -1 - -11 - -15 - -58 - -23 - -12 - -24 - -2 - -12 - -106 - -19 - -35 - -51 - -16 - -13 - -26 - -27 - -88 - -28 - -80 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_101165 - -4 - -13 - -9 - -26 - -13 - -2 - -24 - -2 - -5 - -22 - -4 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -2 - -3 - -3 - -10 - -4 - -2 - -13 - -1 - -27 - -2 - -3 - -7 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -5 - -1 - -12 - -7 - -3 - -1 - -4 - -3 - -6 - -12 - -7 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-
-

Now we create the MPRAset used as input to BCalm.

-
# create the variant specific MPRAset
-BcVariantMPRASetExample <- MPRASet(DNA = dna_var, RNA = rna_var, eid = row.names(dna_var), barcode = NULL)
-
-
-

2.2 Element testing

-

The dataset is the same one we used above, but we have to add labels to the data to distinguish between control and test groups, thus allowing us to easily identify and compare these different groups in the analysis later.

-
data(LabelExample)
-table(LabelExample)
-
## LabelExample
-## control  tested 
-##     198    1475
-
kable(head(LabelExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -x -
-oligo_000702 - -tested -
-oligo_000703 - -tested -
-oligo_000706 - -tested -
-oligo_000707 - -tested -
-oligo_000711 - -tested -
-oligo_000713 - -tested -
-
-

Once again, we perform downsampling on this dataset using the downsample_barcodes function.

-
elem_df <- downsample_barcodes(BcSetExample)
-

As before, we use create_dna_df and create_rna_df to format the data correctly for the MPRASet function. However, this time we specify id_column_name = "name" since the default, id_column_name = "variant_id", does not match our data format.

-
dna_elem <- create_dna_df(elem_df, id_column_name="name")
-rna_elem <- create_rna_df(elem_df, id_column_name="name")
-

To compare between test and control, we need to add the labels to the MPRASet.

-
BcLabelMPRASetExample <- MPRASet(DNA = dna_elem, RNA = rna_elem, eid = row.names(dna_elem), barcode = NULL, label=LabelExample)
-

With the data prepared and preprocessed, we now have the foundation to conduct our analysis.

-
-
-
-

3 Analysis

-

In this section we get to see the usage of the mpralm and the fit_elements functions. We take the MPRASet created in the preprocessing chapter. BCalm allows us to analyze individual barcode counts as separate samples, capturing additional data variation and potentially increasing statistical power.

-
-

3.1 Variant Analysis

-

We will start with variant testing. In order to achieve this, we employ the mpralm function. Which column belongs to which replicate is described in a blocking vector, also used to normalize the counts per replicate. -The design matrix gives information which count comes from the reference and which from the alternative allele.

-
bcs <- ncol(dna_var) / nr_reps
-design <- data.frame(intcpt = 1, alt = grepl("alt", colnames(BcVariantMPRASetExample)))
-block_vector <- rep(1:nr_reps, each=bcs)
-mpralm_fit_var <- mpralm(object = BcVariantMPRASetExample, design = design, aggregate = "none", normalize = TRUE, model_type = "corr_groups", plot = FALSE, block = block_vector)
-
-top_var <- topTable(mpralm_fit_var, coef = 2, number = Inf)
-kable(head(rna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -sample_count_1_bc1_ref - -sample_count_1_bc2_ref - -sample_count_1_bc3_ref - -sample_count_1_bc4_ref - -sample_count_1_bc5_ref - -sample_count_1_bc6_ref - -sample_count_1_bc7_ref - -sample_count_1_bc8_ref - -sample_count_1_bc9_ref - -sample_count_1_bc10_ref - -sample_count_1_bc11_ref - -sample_count_1_bc12_ref - -sample_count_1_bc13_ref - -sample_count_1_bc14_ref - -sample_count_1_bc15_ref - -sample_count_1_bc16_ref - -sample_count_1_bc17_ref - -sample_count_1_bc18_ref - -sample_count_1_bc19_ref - -sample_count_1_bc20_ref - -sample_count_1_bc21_ref - -sample_count_1_bc22_ref - -sample_count_1_bc23_ref - -sample_count_1_bc24_ref - -sample_count_1_bc25_ref - -sample_count_1_bc26_ref - -sample_count_1_bc27_ref - -sample_count_1_bc28_ref - -sample_count_1_bc29_ref - -sample_count_1_bc30_ref - -sample_count_1_bc31_ref - -sample_count_1_bc32_ref - -sample_count_1_bc33_ref - -sample_count_1_bc34_ref - -sample_count_1_bc35_ref - -sample_count_1_bc36_ref - -sample_count_1_bc37_ref - -sample_count_1_bc38_ref - -sample_count_1_bc39_ref - -sample_count_1_bc40_ref - -sample_count_1_bc41_ref - -sample_count_1_bc42_ref - -sample_count_1_bc43_ref - -sample_count_1_bc44_ref - -sample_count_1_bc45_ref - -sample_count_1_bc46_ref - -sample_count_1_bc47_ref - -sample_count_1_bc48_ref - -sample_count_1_bc49_ref - -sample_count_1_bc50_ref - -sample_count_1_bc51_ref - -sample_count_1_bc52_ref - -sample_count_1_bc53_ref - -sample_count_1_bc54_ref - -sample_count_1_bc55_ref - -sample_count_1_bc56_ref - -sample_count_1_bc57_ref - -sample_count_1_bc58_ref - -sample_count_1_bc59_ref - -sample_count_1_bc60_ref - -sample_count_1_bc61_ref - -sample_count_1_bc62_ref - -sample_count_1_bc63_ref - -sample_count_1_bc64_ref - -sample_count_1_bc65_ref - -sample_count_1_bc66_ref - -sample_count_1_bc67_ref - -sample_count_1_bc68_ref - -sample_count_1_bc69_ref - -sample_count_1_bc70_ref - -sample_count_1_bc71_ref - -sample_count_1_bc72_ref - -sample_count_1_bc73_ref - -sample_count_1_bc74_ref - -sample_count_1_bc75_ref - -sample_count_1_bc76_ref - -sample_count_1_bc77_ref - -sample_count_1_bc78_ref - -sample_count_1_bc79_ref - -sample_count_1_bc1_alt - -sample_count_1_bc2_alt - -sample_count_1_bc3_alt - -sample_count_1_bc4_alt - -sample_count_1_bc5_alt - -sample_count_1_bc6_alt - -sample_count_1_bc7_alt - -sample_count_1_bc8_alt - -sample_count_1_bc9_alt - -sample_count_1_bc10_alt - -sample_count_1_bc11_alt - -sample_count_1_bc12_alt - -sample_count_1_bc13_alt - -sample_count_1_bc14_alt - -sample_count_1_bc15_alt - -sample_count_1_bc16_alt - -sample_count_1_bc17_alt - -sample_count_1_bc18_alt - -sample_count_1_bc19_alt - -sample_count_1_bc20_alt - -sample_count_1_bc21_alt - -sample_count_1_bc22_alt - -sample_count_1_bc23_alt - -sample_count_1_bc24_alt - -sample_count_1_bc25_alt - -sample_count_1_bc26_alt - -sample_count_1_bc27_alt - -sample_count_1_bc28_alt - -sample_count_1_bc29_alt - -sample_count_1_bc30_alt - -sample_count_1_bc31_alt - -sample_count_1_bc32_alt - -sample_count_1_bc33_alt - -sample_count_1_bc34_alt - -sample_count_1_bc35_alt - -sample_count_1_bc36_alt - -sample_count_1_bc37_alt - -sample_count_1_bc38_alt - -sample_count_1_bc39_alt - -sample_count_1_bc40_alt - -sample_count_1_bc41_alt - -sample_count_1_bc42_alt - -sample_count_1_bc43_alt - -sample_count_1_bc44_alt - -sample_count_1_bc45_alt - -sample_count_1_bc46_alt - -sample_count_1_bc47_alt - -sample_count_1_bc48_alt - -sample_count_1_bc49_alt - -sample_count_1_bc50_alt - -sample_count_1_bc51_alt - -sample_count_1_bc52_alt - -sample_count_1_bc53_alt - -sample_count_1_bc54_alt - -sample_count_1_bc55_alt - -sample_count_1_bc56_alt - -sample_count_1_bc57_alt - -sample_count_1_bc58_alt - -sample_count_1_bc59_alt - -sample_count_1_bc60_alt - -sample_count_1_bc61_alt - -sample_count_1_bc62_alt - -sample_count_1_bc63_alt - -sample_count_1_bc64_alt - -sample_count_1_bc65_alt - -sample_count_1_bc66_alt - -sample_count_1_bc67_alt - -sample_count_1_bc68_alt - -sample_count_1_bc69_alt - -sample_count_1_bc70_alt - -sample_count_1_bc71_alt - -sample_count_1_bc72_alt - -sample_count_1_bc73_alt - -sample_count_1_bc74_alt - -sample_count_1_bc75_alt - -sample_count_1_bc76_alt - -sample_count_1_bc77_alt - -sample_count_1_bc78_alt - -sample_count_1_bc79_alt - -sample_count_2_bc1_ref - -sample_count_2_bc2_ref - -sample_count_2_bc3_ref - -sample_count_2_bc4_ref - -sample_count_2_bc5_ref - -sample_count_2_bc6_ref - -sample_count_2_bc7_ref - -sample_count_2_bc8_ref - -sample_count_2_bc9_ref - -sample_count_2_bc10_ref - -sample_count_2_bc11_ref - -sample_count_2_bc12_ref - -sample_count_2_bc13_ref - -sample_count_2_bc14_ref - -sample_count_2_bc15_ref - -sample_count_2_bc16_ref - -sample_count_2_bc17_ref - -sample_count_2_bc18_ref - -sample_count_2_bc19_ref - -sample_count_2_bc20_ref - -sample_count_2_bc21_ref - -sample_count_2_bc22_ref - -sample_count_2_bc23_ref - -sample_count_2_bc24_ref - -sample_count_2_bc25_ref - -sample_count_2_bc26_ref - -sample_count_2_bc27_ref - -sample_count_2_bc28_ref - -sample_count_2_bc29_ref - -sample_count_2_bc30_ref - -sample_count_2_bc31_ref - -sample_count_2_bc32_ref - -sample_count_2_bc33_ref - -sample_count_2_bc34_ref - -sample_count_2_bc35_ref - -sample_count_2_bc36_ref - -sample_count_2_bc37_ref - -sample_count_2_bc38_ref - -sample_count_2_bc39_ref - -sample_count_2_bc40_ref - -sample_count_2_bc41_ref - -sample_count_2_bc42_ref - -sample_count_2_bc43_ref - -sample_count_2_bc44_ref - -sample_count_2_bc45_ref - -sample_count_2_bc46_ref - -sample_count_2_bc47_ref - -sample_count_2_bc48_ref - -sample_count_2_bc49_ref - -sample_count_2_bc50_ref - -sample_count_2_bc51_ref - -sample_count_2_bc52_ref - -sample_count_2_bc53_ref - -sample_count_2_bc54_ref - -sample_count_2_bc55_ref - -sample_count_2_bc56_ref - -sample_count_2_bc57_ref - -sample_count_2_bc58_ref - -sample_count_2_bc59_ref - -sample_count_2_bc60_ref - -sample_count_2_bc61_ref - -sample_count_2_bc62_ref - -sample_count_2_bc63_ref - -sample_count_2_bc64_ref - -sample_count_2_bc65_ref - -sample_count_2_bc66_ref - -sample_count_2_bc67_ref - -sample_count_2_bc68_ref - -sample_count_2_bc69_ref - -sample_count_2_bc70_ref - -sample_count_2_bc71_ref - -sample_count_2_bc72_ref - -sample_count_2_bc73_ref - -sample_count_2_bc74_ref - -sample_count_2_bc75_ref - -sample_count_2_bc76_ref - -sample_count_2_bc77_ref - -sample_count_2_bc78_ref - -sample_count_2_bc79_ref - -sample_count_2_bc1_alt - -sample_count_2_bc2_alt - -sample_count_2_bc3_alt - -sample_count_2_bc4_alt - -sample_count_2_bc5_alt - -sample_count_2_bc6_alt - -sample_count_2_bc7_alt - -sample_count_2_bc8_alt - -sample_count_2_bc9_alt - -sample_count_2_bc10_alt - -sample_count_2_bc11_alt - -sample_count_2_bc12_alt - -sample_count_2_bc13_alt - -sample_count_2_bc14_alt - -sample_count_2_bc15_alt - -sample_count_2_bc16_alt - -sample_count_2_bc17_alt - -sample_count_2_bc18_alt - -sample_count_2_bc19_alt - -sample_count_2_bc20_alt - -sample_count_2_bc21_alt - -sample_count_2_bc22_alt - -sample_count_2_bc23_alt - -sample_count_2_bc24_alt - -sample_count_2_bc25_alt - -sample_count_2_bc26_alt - -sample_count_2_bc27_alt - -sample_count_2_bc28_alt - -sample_count_2_bc29_alt - -sample_count_2_bc30_alt - -sample_count_2_bc31_alt - -sample_count_2_bc32_alt - -sample_count_2_bc33_alt - -sample_count_2_bc34_alt - -sample_count_2_bc35_alt - -sample_count_2_bc36_alt - -sample_count_2_bc37_alt - -sample_count_2_bc38_alt - -sample_count_2_bc39_alt - -sample_count_2_bc40_alt - -sample_count_2_bc41_alt - -sample_count_2_bc42_alt - -sample_count_2_bc43_alt - -sample_count_2_bc44_alt - -sample_count_2_bc45_alt - -sample_count_2_bc46_alt - -sample_count_2_bc47_alt - -sample_count_2_bc48_alt - -sample_count_2_bc49_alt - -sample_count_2_bc50_alt - -sample_count_2_bc51_alt - -sample_count_2_bc52_alt - -sample_count_2_bc53_alt - -sample_count_2_bc54_alt - -sample_count_2_bc55_alt - -sample_count_2_bc56_alt - -sample_count_2_bc57_alt - -sample_count_2_bc58_alt - -sample_count_2_bc59_alt - -sample_count_2_bc60_alt - -sample_count_2_bc61_alt - -sample_count_2_bc62_alt - -sample_count_2_bc63_alt - -sample_count_2_bc64_alt - -sample_count_2_bc65_alt - -sample_count_2_bc66_alt - -sample_count_2_bc67_alt - -sample_count_2_bc68_alt - -sample_count_2_bc69_alt - -sample_count_2_bc70_alt - -sample_count_2_bc71_alt - -sample_count_2_bc72_alt - -sample_count_2_bc73_alt - -sample_count_2_bc74_alt - -sample_count_2_bc75_alt - -sample_count_2_bc76_alt - -sample_count_2_bc77_alt - -sample_count_2_bc78_alt - -sample_count_2_bc79_alt - -sample_count_3_bc1_ref - -sample_count_3_bc2_ref - -sample_count_3_bc3_ref - -sample_count_3_bc4_ref - -sample_count_3_bc5_ref - -sample_count_3_bc6_ref - -sample_count_3_bc7_ref - -sample_count_3_bc8_ref - -sample_count_3_bc9_ref - -sample_count_3_bc10_ref - -sample_count_3_bc11_ref - -sample_count_3_bc12_ref - -sample_count_3_bc13_ref - -sample_count_3_bc14_ref - -sample_count_3_bc15_ref - -sample_count_3_bc16_ref - -sample_count_3_bc17_ref - -sample_count_3_bc18_ref - -sample_count_3_bc19_ref - -sample_count_3_bc20_ref - -sample_count_3_bc21_ref - -sample_count_3_bc22_ref - -sample_count_3_bc23_ref - -sample_count_3_bc24_ref - -sample_count_3_bc25_ref - -sample_count_3_bc26_ref - -sample_count_3_bc27_ref - -sample_count_3_bc28_ref - -sample_count_3_bc29_ref - -sample_count_3_bc30_ref - -sample_count_3_bc31_ref - -sample_count_3_bc32_ref - -sample_count_3_bc33_ref - -sample_count_3_bc34_ref - -sample_count_3_bc35_ref - -sample_count_3_bc36_ref - -sample_count_3_bc37_ref - -sample_count_3_bc38_ref - -sample_count_3_bc39_ref - -sample_count_3_bc40_ref - -sample_count_3_bc41_ref - -sample_count_3_bc42_ref - -sample_count_3_bc43_ref - -sample_count_3_bc44_ref - -sample_count_3_bc45_ref - -sample_count_3_bc46_ref - -sample_count_3_bc47_ref - -sample_count_3_bc48_ref - -sample_count_3_bc49_ref - -sample_count_3_bc50_ref - -sample_count_3_bc51_ref - -sample_count_3_bc52_ref - -sample_count_3_bc53_ref - -sample_count_3_bc54_ref - -sample_count_3_bc55_ref - -sample_count_3_bc56_ref - -sample_count_3_bc57_ref - -sample_count_3_bc58_ref - -sample_count_3_bc59_ref - -sample_count_3_bc60_ref - -sample_count_3_bc61_ref - -sample_count_3_bc62_ref - -sample_count_3_bc63_ref - -sample_count_3_bc64_ref - -sample_count_3_bc65_ref - -sample_count_3_bc66_ref - -sample_count_3_bc67_ref - -sample_count_3_bc68_ref - -sample_count_3_bc69_ref - -sample_count_3_bc70_ref - -sample_count_3_bc71_ref - -sample_count_3_bc72_ref - -sample_count_3_bc73_ref - -sample_count_3_bc74_ref - -sample_count_3_bc75_ref - -sample_count_3_bc76_ref - -sample_count_3_bc77_ref - -sample_count_3_bc78_ref - -sample_count_3_bc79_ref - -sample_count_3_bc1_alt - -sample_count_3_bc2_alt - -sample_count_3_bc3_alt - -sample_count_3_bc4_alt - -sample_count_3_bc5_alt - -sample_count_3_bc6_alt - -sample_count_3_bc7_alt - -sample_count_3_bc8_alt - -sample_count_3_bc9_alt - -sample_count_3_bc10_alt - -sample_count_3_bc11_alt - -sample_count_3_bc12_alt - -sample_count_3_bc13_alt - -sample_count_3_bc14_alt - -sample_count_3_bc15_alt - -sample_count_3_bc16_alt - -sample_count_3_bc17_alt - -sample_count_3_bc18_alt - -sample_count_3_bc19_alt - -sample_count_3_bc20_alt - -sample_count_3_bc21_alt - -sample_count_3_bc22_alt - -sample_count_3_bc23_alt - -sample_count_3_bc24_alt - -sample_count_3_bc25_alt - -sample_count_3_bc26_alt - -sample_count_3_bc27_alt - -sample_count_3_bc28_alt - -sample_count_3_bc29_alt - -sample_count_3_bc30_alt - -sample_count_3_bc31_alt - -sample_count_3_bc32_alt - -sample_count_3_bc33_alt - -sample_count_3_bc34_alt - -sample_count_3_bc35_alt - -sample_count_3_bc36_alt - -sample_count_3_bc37_alt - -sample_count_3_bc38_alt - -sample_count_3_bc39_alt - -sample_count_3_bc40_alt - -sample_count_3_bc41_alt - -sample_count_3_bc42_alt - -sample_count_3_bc43_alt - -sample_count_3_bc44_alt - -sample_count_3_bc45_alt - -sample_count_3_bc46_alt - -sample_count_3_bc47_alt - -sample_count_3_bc48_alt - -sample_count_3_bc49_alt - -sample_count_3_bc50_alt - -sample_count_3_bc51_alt - -sample_count_3_bc52_alt - -sample_count_3_bc53_alt - -sample_count_3_bc54_alt - -sample_count_3_bc55_alt - -sample_count_3_bc56_alt - -sample_count_3_bc57_alt - -sample_count_3_bc58_alt - -sample_count_3_bc59_alt - -sample_count_3_bc60_alt - -sample_count_3_bc61_alt - -sample_count_3_bc62_alt - -sample_count_3_bc63_alt - -sample_count_3_bc64_alt - -sample_count_3_bc65_alt - -sample_count_3_bc66_alt - -sample_count_3_bc67_alt - -sample_count_3_bc68_alt - -sample_count_3_bc69_alt - -sample_count_3_bc70_alt - -sample_count_3_bc71_alt - -sample_count_3_bc72_alt - -sample_count_3_bc73_alt - -sample_count_3_bc74_alt - -sample_count_3_bc75_alt - -sample_count_3_bc76_alt - -sample_count_3_bc77_alt - -sample_count_3_bc78_alt - -sample_count_3_bc79_alt -
-variant_10 - -7 - -7 - -3 - -1 - -15 - -1 - -18 - -43 - -2 - -22 - -16 - -16 - -4 - -6 - -3 - -17 - -2 - -24 - -3 - -17 - -5 - -16 - -41 - -8 - -12 - -25 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -29 - -5 - -12 - -11 - -3 - -2 - -4 - -2 - -2 - -1 - -4 - -32 - -10 - -2 - -5 - -16 - -6 - -8 - -12 - -8 - -9 - -7 - -13 - -4 - -8 - -4 - -2 - -11 - -1 - -16 - -9 - -8 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -2 - -6 - -1 - -7 - -8 - -2 - -24 - -8 - -3 - -23 - -4 - -7 - -1 - -2 - -13 - -11 - -1 - -4 - -14 - -1 - -4 - -2 - -6 - -10 - -10 - -8 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -27 - -10 - -2 - -32 - -3 - -16 - -35 - -6 - -19 - -17 - -16 - -6 - -5 - -55 - -1 - -13 - -22 - -15 - -17 - -2 - -10 - -34 - -1 - -54 - -6 - -12 - -15 - -2 - -5 - -15 - -11 - -44 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -10 - -22 - -7 - -4 - -4 - -13 - -2 - -31 - -5 - -15 - -27 - -6 - -12 - -49 - -6 - -8 - -12 - -13 - -15 - -7 - -12 - -5 - -5 - -21 - -1 - -23 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -25 - -35 - -17 - -3 - -2 - -18 - -3 - -10 - -14 - -13 - -25 - -25 - -18 - -16 - -10 - -25 - -18 - -2 - -10 - -19 - -2 - -8 - -4 - -27 - -7 - -1 - -10 - -12 - -7 - -15 - -40 - -19 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100 - -39 - -9 - -21 - -16 - -2 - -5 - -22 - -46 - -23 - -55 - -38 - -23 - -39 - -13 - -21 - -2 - -8 - -31 - -27 - -32 - -5 - -7 - -9 - -19 - -20 - -7 - -14 - -16 - -45 - -1 - -36 - -14 - -7 - -14 - -8 - -3 - -26 - -11 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -4 - -6 - -11 - -1 - -19 - -2 - -7 - -3 - -31 - -6 - -3 - -4 - -2 - -1 - -13 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -8 - -18 - -12 - -39 - -12 - -15 - -5 - -22 - -17 - -24 - -39 - -20 - -5 - -17 - -30 - -5 - -8 - -23 - -20 - -58 - -18 - -1 - -10 - -2 - -12 - -7 - -8 - -11 - -6 - -13 - -17 - -22 - -64 - -23 - -20 - -11 - -6 - -10 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -11 - -8 - -19 - -11 - -13 - -6 - -5 - -2 - -9 - -20 - -11 - -7 - -1 - -4 - -3 - -21 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -13 - -25 - -19 - -43 - -3 - -41 - -10 - -51 - -3 - -26 - -49 - -8 - -27 - -3 - -5 - -21 - -36 - -5 - -42 - -5 - -10 - -2 - -2 - -26 - -7 - -29 - -2 - -33 - -5 - -5 - -15 - -36 - -115 - -5 - -37 - -4 - -7 - -27 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -9 - -32 - -27 - -8 - -18 - -4 - -6 - -11 - -3 - -9 - -5 - -4 - -1 - -3 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100314 - -1 - -17 - -3 - -6 - -8 - -4 - -4 - -6 - -15 - -12 - -4 - -17 - -7 - -10 - -9 - -11 - -15 - -9 - -16 - -2 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -5 - -5 - -20 - -11 - -9 - -4 - -2 - -6 - -24 - -5 - -11 - -12 - -3 - -10 - -11 - -2 - -4 - -6 - -29 - -34 - -4 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -2 - -18 - -11 - -21 - -6 - -1 - -7 - -33 - -10 - -3 - -38 - -2 - -6 - -6 - -2 - -5 - -2 - -2 - -28 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_100463 - -1 - -2 - -3 - -11 - -2 - -2 - -24 - -3 - -9 - -1 - -2 - -4 - -1 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -3 - -4 - -1 - -4 - -1 - -4 - -9 - -2 - -7 - -8 - -2 - -14 - -10 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -22 - -1 - -9 - -2 - -2 - -2 - -6 - -8 - -3 - -9 - -4 - -6 - -4 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_101 - -7 - -19 - -4 - -28 - -1 - -5 - -1 - -1 - -9 - -1 - -6 - -7 - -5 - -12 - -59 - -13 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -32 - -2 - -12 - -1 - -22 - -19 - -11 - -6 - -45 - -8 - -13 - -2 - -24 - -8 - -51 - -12 - -16 - -4 - -51 - -11 - -25 - -35 - -7 - -6 - -79 - -34 - -19 - -9 - -26 - -4 - -43 - -10 - -11 - -6 - -4 - -18 - -7 - -22 - -1 - -37 - -6 - -58 - -2 - -12 - -41 - -25 - -2 - -16 - -17 - -29 - -19 - -20 - -63 - -16 - -82 - -15 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -12 - -40 - -3 - -16 - -23 - -5 - -3 - -2 - -2 - -6 - -4 - -12 - -5 - -24 - -26 - -8 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -48 - -23 - -39 - -29 - -5 - -84 - -37 - -51 - -27 - -18 - -24 - -20 - -20 - -15 - -13 - -13 - -18 - -6 - -32 - -9 - -23 - -30 - -8 - -38 - -22 - -12 - -49 - -23 - -40 - -6 - -13 - -9 - -32 - -20 - -38 - -5 - -4 - -25 - -31 - -4 - -39 - -5 - -58 - -36 - -16 - -23 - -5 - -61 - -1 - -22 - -4 - -5 - -272 - -8 - -37 - -23 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -21 - -5 - -5 - -3 - -4 - -2 - -4 - -3 - -1 - -2 - -2 - -2 - -16 - -12 - -3 - -6 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -32 - -1 - -37 - -22 - -33 - -45 - -14 - -1 - -23 - -36 - -22 - -5 - -11 - -5 - -53 - -17 - -14 - -10 - -2 - -2 - -22 - -11 - -14 - -62 - -12 - -25 - -6 - -17 - -62 - -7 - -91 - -10 - -25 - -9 - -6 - -1 - -11 - -15 - -58 - -23 - -12 - -24 - -2 - -12 - -106 - -19 - -35 - -51 - -16 - -13 - -26 - -27 - -88 - -28 - -80 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-variant_101165 - -4 - -13 - -9 - -26 - -13 - -2 - -24 - -2 - -5 - -22 - -4 - -2 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -2 - -3 - -3 - -10 - -4 - -2 - -13 - -1 - -27 - -2 - -3 - -7 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -5 - -1 - -12 - -7 - -3 - -1 - -4 - -3 - -6 - -12 - -7 - -3 - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA - -NA -
-
-
ggplot(top_var, aes(x = logFC, y = -log10(P.Value))) +
-  geom_point(alpha = 0.6)
-

-
-
-

3.2 Element Analysis

-

BCalm provides the function fit_elements. It takes the MPRASet object as input and applies the statistical modeling. Again the block_vector gives reference which barcode belongs to which replicate. -We again set normalize = TRUE to perform total count normalization on the RNA and DNA libraries.

-
bcs <- ncol(dna_elem) / nr_reps
-block_vector <- rep(1:nr_reps, each=bcs)
-mpralm_fit_elem <- fit_elements(object = BcLabelMPRASetExample, normalize=TRUE, block = block_vector, plot = FALSE)
-
-

3.2.1 Visualisation and results

-

In this section, we will examine the visualization of our analysis results using the mpra_treat and plot_groups functions. -To visualize our results, we utilize the plot_groups function, which allows us to compare logratios for each group. We use the results from fit_elements above. As negative controls we use "control" and as test "tested".

-
plot_groups(mpralm_fit_elem, 0.975, neg_label="control", test_label="tested")
-

-

The mpra_treat() function reimplements the treat() function from the limma package. This function performs a t-test with a specified threshold, making it especially useful for identifying elements with significant differential activity in MPRA data.

-
treat <- mpra_treat(mpralm_fit_elem, 0.975, neg_label="control")
-result <- topTreat(treat, coef = 1, number = Inf)
-head(result)
-
##                 logFC  AveExpr        t       P.Value     adj.P.Val
-## oligo_006626 3.747002 3.749226 34.09445 7.884865e-136 1.319138e-132
-## oligo_006624 3.521868 3.524330 28.52746 1.991338e-106 1.665755e-103
-## oligo_006203 2.899792 2.901751 16.62038  3.420742e-48  1.907634e-45
-## oligo_006468 2.212209 2.215034 15.99422  4.034956e-47  1.687620e-44
-## oligo_005287 1.912143 1.914193 14.78730  5.936039e-42  1.986199e-39
-## oligo_006201 1.997943 2.000452 14.48532  1.397503e-40  3.896706e-38
-
-
-
-
-

4 Session Info

-

R version 4.3.1 (2023-06-16 ucrt) -Platform: x86_64-w64-mingw32/x64 (64-bit) -Running under: Windows 11 x64 (build 22631)

-

Matrix products: default

-

locale: -[1] LC_COLLATE=German_Germany.utf8 LC_CTYPE=German_Germany.utf8
-[3] LC_MONETARY=German_Germany.utf8 LC_NUMERIC=C
-[5] LC_TIME=German_Germany.utf8

-

time zone: Europe/Berlin -tzcode source: internal

-

attached base packages: -[1] stats4 stats graphics grDevices utils datasets methods
-[8] base

-

other attached packages: -[1] kableExtra_1.4.0 ggplot2_3.5.1
-[3] dplyr_1.1.4 BCalm_0.1.0
-[5] curl_6.0.1 limma_3.58.1
-[7] SummarizedExperiment_1.32.0 Biobase_2.62.0
-[9] GenomicRanges_1.54.1 GenomeInfoDb_1.38.8
-[11] IRanges_2.36.0 S4Vectors_0.40.2
-[13] MatrixGenerics_1.14.0 matrixStats_1.4.1
-[15] BiocGenerics_0.48.1 BiocStyle_2.30.0

-

loaded via a namespace (and not attached): -[1] gtable_0.3.6 xfun_0.49 bslib_0.8.0
-[4] mpra_1.24.0 lattice_0.22-6 vctrs_0.6.5
-[7] tools_4.3.1 bitops_1.0-9 generics_0.1.3
-[10] tibble_3.2.1 fansi_1.0.6 pkgconfig_2.0.3
-[13] Matrix_1.5-4.1 lifecycle_1.0.4 GenomeInfoDbData_1.2.11 -[16] farver_2.1.2 stringr_1.5.1 compiler_4.3.1
-[19] statmod_1.5.0 munsell_0.5.1 htmltools_0.5.8.1
-[22] sass_0.4.9 RCurl_1.98-1.16 yaml_2.3.7
-[25] pillar_1.9.0 crayon_1.5.3 jquerylib_0.1.4
-[28] tidyr_1.3.1 DelayedArray_0.28.0 cachem_1.1.0
-[31] abind_1.4-8 tidyselect_1.2.1 digest_0.6.33
-[34] stringi_1.8.4 purrr_1.0.2 bookdown_0.41
-[37] labeling_0.4.3 fastmap_1.2.0 grid_4.3.1
-[40] colorspace_2.1-1 cli_3.6.1 SparseArray_1.2.4
-[43] magrittr_2.0.3 S4Arrays_1.2.1 utf8_1.2.4
-[46] withr_3.0.2 scales_1.3.0 rmarkdown_2.29
-[49] XVector_0.42.0 evaluate_1.0.1 knitr_1.49
-[52] viridisLite_0.4.2 rlang_1.1.1 glue_1.8.0
-[55] xml2_1.3.6 BiocManager_1.30.25 svglite_2.1.3
-[58] rstudioapi_0.17.1 jsonlite_1.8.9 R6_2.5.1
-[61] systemfonts_1.1.0 zlibbioc_1.48.2

-
-
-

References

-
-
-Csárdi, Gábor, Jim Hester, Hadley Wickham, Winston Chang, Martin Morgan, and Dan Tenenbaum. 2024. README — Cran.r-Project.org.” https://cran.r-project.org/web/packages/remotes/readme/README.html. -
-
-Gordon, M. Grace, Fumitaka Inoue, Beth Martin, Max Schubach, Vikram Agarwal, Sean Whalen, Shiyun Feng, et al. 2020. “lentiMPRA and MPRAflow for High-Throughput Functional Characterization of Gene Regulatory Elements.” Nature Protocols 15 (8): 2387–2412. https://doi.org/10.1038/s41596-020-0333-5. -
-
-Law, Charity W, Yunshun Chen, Wei Shi, and Gordon K Smyth. 2014. “Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-seq Read Counts.” Genome Biology 15: R29. https://doi.org/10.1186/gb-2014-15-2-r29. -
-
-Myint, Leslie, Dimitrios G Avramopoulos, Loyal A Goff, and Kasper D Hansen. 2019. “Linear Models Enable Powerful Differential Activity Analysis in Massively Parallel Reporter Assays.” BMC Genomics 20: 209. https://doi.org/10.1186/s12864-019-5556-x. -
-
-Wickham, Hadley, Jim Hester, Winston Chang, and Jennifer Bryan. 2022. Devtools: Tools to Make Developing r Packages Easier. -
-
-
- - - - -
- - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +BCalm and analyze your MPRA data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Contents

+ + +
library(BCalm)
+library(dplyr)
+library(ggplot2)
+library(kableExtra) # for visually appealing tables
+
+

1 Introduction

+

The BCalm package provides a framework for analyzing data from Massively Parallel Reporter Assays (MPRA) and is built on top of the mpra package. BCalm adapts the existing mpralm method but enhances it by modeling individual barcode counts rather than aggregating counts per sequence. Furthermore, the package includes a set of pre-processing functions and plotting capabilities, facilitating the visualization and interpretation of results. BCalm is more robust to outlier MPRA counts. Variant and element analysis are both shown below together with a significance test of elements against a control group (e.g. negative controls).

+
+
+

2 Citing BCalm

+

To cite the BCalm package please use (Keukeleire et al. 2025). When using BCalm you can additionally cite the mpra package (Myint et al. 2019) and the limma-voom framework (Law et al. 2014).

+
+
+

3 Installation

+

The BCalm package is available via bioconda (called r-bcalm) and can be installed via conda install -c bioconda r-bcalm).

+
+

3.1 Additional information for installation

+

The package is also available on GitHub and can be installed using remotes (Csárdi et al. 2024) or devtools (Wickham et al. 2022). +The package requires R >= 3.5, <= 4.4.0. +If you have any trouble with the provided package, feel free to let us know by creating an issue directly in the BCalm GitHub repository. +To display the vignette correctly, the kableExtra and ggplot2 packages are required.

+
+
+
+

4 Preprocessing data

+

The first dataframe contains as small subset of a lentiMPRA dataset performed within HepG2 cells with three technical replicates (IGVF accession identifier: IGVFSM9009DVDG). Sequences tested in this experiment aim to capture variant effects across tens of thousands of candidate cis-regulatory element (cCRE) sequences of 200 base pair (bp) length. +The input files used here were obtained from MPRAsnakeflow, a Snakemake workflow produced as part of the Impact of Genomic Variation on Function (IGVF) Consortium. MPRAsnakeflow is a comprehensive pipeline which performs both the assignment of barcodes to the designed oligos and the preparation of count tables of DNA and RNA counts based on the observed number of barcodes within the targeted DNA and RNA sequencing (modified from (Gordon et al. 2020)).

+
data("BcSetExample")
+nr_reps = 3
+# show the data
+kable(head(BcSetExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Barcode + +name + +dna_count_1 + +rna_count_1 + +dna_count_2 + +rna_count_2 + +dna_count_3 + +rna_count_3 +
+AAAAAAAAAAGCTGC + +oligo_006364 + +11 + +10 + +8 + +6 + +1 + +3 +
+AAAAAAAAATCACAG + +oligo_005641 + +8 + +7 + +1 + +2 + +1 + +29 +
+AAAAAAAAATTGAGC + +oligo_005719 + +2 + +25 + +2 + +88 + +1 + +30 +
+AAAAAAAAATTGTAT + +oligo_005725 + +4 + +12 + +4 + +2 + +2 + +6 +
+AAAAAAAACACATGA + +oligo_005412 + +21 + +15 + +5 + +12 + +11 + +51 +
+AAAAAAAACATAGTT + +oligo_006471 + +8 + +3 + +3 + +5 + +7 + +3 +
+
+

In general, any sequence can be tested using an MPRA. Possible analyses can be differentiated by whether they compare the activity of different conditions of the same region, such as variant testing, or whether they compare the activities of different regions. +For element testing, the tested sequences in this vignette are compared to a group of negative control sequences (known to have low activity in HepG2) and the sequences to be tested. +We show the usage of BCalm on a variant dataset as well as an element dataset in this vignette. First, we show how to correctly preprocess the data.

+
+

4.1 Variant testing

+

To prepare data for variant testing, we use the create_var_df function from BCalm. This function requires a mapping dataframe with information linking each reference allele to its corresponding alternative allele. Here, we use MapExample, a dataframe containing three essential columns: ID, REF, and ALT. This setup provides the necessary reference and alternative allele data to enable variant analysis.

+
# load the variant map
+data("MapExample")
+# show the data
+kable(head(MapExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ID + +REF + +ALT +
+variant_1 + +oligo_005868 + +oligo_005870 +
+variant_2 + +oligo_005299 + +oligo_005300 +
+variant_3 + +oligo_006685 + +oligo_006687 +
+variant_4 + +oligo_006919 + +oligo_006920 +
+variant_5 + +oligo_006895 + +oligo_006897 +
+variant_6 + +oligo_006675 + +oligo_006677 +
+
+
# create the variant dataframe by adding the variant ID to the DNA and RNA counts
+var_df <- create_var_df(BcSetExample, MapExample)
+# show the data
+kable(head(var_df), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+variant_id + +allele + +Barcode + +dna_count_1 + +rna_count_1 + +dna_count_2 + +rna_count_2 + +dna_count_3 + +rna_count_3 +
+variant_820 + +ref + +TCTTAAGTAAGAAGG + +2 + +3 + +1 + +2 + +9 + +15 +
+variant_820 + +ref + +GTAAGAATGGTTGGG + +7 + +1 + +2 + +10 + +7 + +5 +
+variant_820 + +ref + +TTTAGAAGTACACTC + +4 + +3 + +4 + +11 + +1 + +1 +
+variant_820 + +ref + +TTCGTTTTGACTAGG + +4 + +4 + +9 + +11 + +6 + +14 +
+variant_820 + +ref + +TCCGTACATCGTGAA + +1 + +2 + +2 + +2 + +1 + +4 +
+variant_820 + +ref + +GGTTCAAGGAATACC + +1 + +7 + +2 + +4 + +3 + +1 +
+
+

Optionally, downsampling can be performed on our data frame var_df now. The function downsample_barcodes allows users to reduce the number of barcodes while retaining a representative subset. This way, the number of barcodes for oligos with many barcodes is reduced, which simplifies data handling and reduces the sparseness of the data table (i.e., increased speed and reduced memory requirements). The degree of downsampling can be controlled by adjusting the sampling rate, which is expressed as a percentile value percentile, with a default of 0.95. +The id_column_name argument specifies the column in the input data frame that contains the unique identifiers for each variant (here variant_id).

+
var_df <- downsample_barcodes(var_df, id_column_name="variant_id")
+

After downsampling the barcode counts in our dataset, we can prepare the data for analysis using the create_dna_df and create_rna_df functions. +Only six rows are shown here (original size of the dataframe 996 × 474).

+
dna_var <- create_dna_df(var_df)
+kable(head(dna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +sample_count_1_bc1_ref + +sample_count_1_bc2_ref + +sample_count_1_bc3_ref + +sample_count_1_bc4_ref + +sample_count_1_bc5_ref + +sample_count_1_bc6_ref + +sample_count_1_bc7_ref + +sample_count_1_bc8_ref + +sample_count_1_bc9_ref + +sample_count_1_bc10_ref + +sample_count_1_bc11_ref + +sample_count_1_bc12_ref + +sample_count_1_bc13_ref + +sample_count_1_bc14_ref + +sample_count_1_bc15_ref + +sample_count_1_bc16_ref + +sample_count_1_bc17_ref + +sample_count_1_bc18_ref + +sample_count_1_bc19_ref + +sample_count_1_bc20_ref + +sample_count_1_bc21_ref + +sample_count_1_bc22_ref + +sample_count_1_bc23_ref + +sample_count_1_bc24_ref + +sample_count_1_bc25_ref + +sample_count_1_bc26_ref + +sample_count_1_bc27_ref + +sample_count_1_bc28_ref + +sample_count_1_bc29_ref + +sample_count_1_bc30_ref + +sample_count_1_bc31_ref + +sample_count_1_bc32_ref + +sample_count_1_bc33_ref + +sample_count_1_bc34_ref + +sample_count_1_bc35_ref + +sample_count_1_bc36_ref + +sample_count_1_bc37_ref + +sample_count_1_bc38_ref + +sample_count_1_bc39_ref + +sample_count_1_bc40_ref + +sample_count_1_bc41_ref + +sample_count_1_bc42_ref + +sample_count_1_bc43_ref + +sample_count_1_bc44_ref + +sample_count_1_bc45_ref + +sample_count_1_bc46_ref + +sample_count_1_bc47_ref + +sample_count_1_bc48_ref + +sample_count_1_bc49_ref + +sample_count_1_bc50_ref + +sample_count_1_bc51_ref + +sample_count_1_bc52_ref + +sample_count_1_bc53_ref + +sample_count_1_bc54_ref + +sample_count_1_bc55_ref + +sample_count_1_bc56_ref + +sample_count_1_bc57_ref + +sample_count_1_bc58_ref + +sample_count_1_bc59_ref + +sample_count_1_bc60_ref + +sample_count_1_bc61_ref + +sample_count_1_bc62_ref + +sample_count_1_bc63_ref + +sample_count_1_bc64_ref + +sample_count_1_bc65_ref + +sample_count_1_bc66_ref + +sample_count_1_bc67_ref + +sample_count_1_bc68_ref + +sample_count_1_bc69_ref + +sample_count_1_bc70_ref + +sample_count_1_bc71_ref + +sample_count_1_bc72_ref + +sample_count_1_bc73_ref + +sample_count_1_bc74_ref + +sample_count_1_bc75_ref + +sample_count_1_bc76_ref + +sample_count_1_bc77_ref + +sample_count_1_bc78_ref + +sample_count_1_bc79_ref + +sample_count_1_bc1_alt + +sample_count_1_bc2_alt + +sample_count_1_bc3_alt + +sample_count_1_bc4_alt + +sample_count_1_bc5_alt + +sample_count_1_bc6_alt + +sample_count_1_bc7_alt + +sample_count_1_bc8_alt + +sample_count_1_bc9_alt + +sample_count_1_bc10_alt + +sample_count_1_bc11_alt + +sample_count_1_bc12_alt + +sample_count_1_bc13_alt + +sample_count_1_bc14_alt + +sample_count_1_bc15_alt + +sample_count_1_bc16_alt + +sample_count_1_bc17_alt + +sample_count_1_bc18_alt + +sample_count_1_bc19_alt + +sample_count_1_bc20_alt + +sample_count_1_bc21_alt + +sample_count_1_bc22_alt + +sample_count_1_bc23_alt + +sample_count_1_bc24_alt + +sample_count_1_bc25_alt + +sample_count_1_bc26_alt + +sample_count_1_bc27_alt + +sample_count_1_bc28_alt + +sample_count_1_bc29_alt + +sample_count_1_bc30_alt + +sample_count_1_bc31_alt + +sample_count_1_bc32_alt + +sample_count_1_bc33_alt + +sample_count_1_bc34_alt + +sample_count_1_bc35_alt + +sample_count_1_bc36_alt + +sample_count_1_bc37_alt + +sample_count_1_bc38_alt + +sample_count_1_bc39_alt + +sample_count_1_bc40_alt + +sample_count_1_bc41_alt + +sample_count_1_bc42_alt + +sample_count_1_bc43_alt + +sample_count_1_bc44_alt + +sample_count_1_bc45_alt + +sample_count_1_bc46_alt + +sample_count_1_bc47_alt + +sample_count_1_bc48_alt + +sample_count_1_bc49_alt + +sample_count_1_bc50_alt + +sample_count_1_bc51_alt + +sample_count_1_bc52_alt + +sample_count_1_bc53_alt + +sample_count_1_bc54_alt + +sample_count_1_bc55_alt + +sample_count_1_bc56_alt + +sample_count_1_bc57_alt + +sample_count_1_bc58_alt + +sample_count_1_bc59_alt + +sample_count_1_bc60_alt + +sample_count_1_bc61_alt + +sample_count_1_bc62_alt + +sample_count_1_bc63_alt + +sample_count_1_bc64_alt + +sample_count_1_bc65_alt + +sample_count_1_bc66_alt + +sample_count_1_bc67_alt + +sample_count_1_bc68_alt + +sample_count_1_bc69_alt + +sample_count_1_bc70_alt + +sample_count_1_bc71_alt + +sample_count_1_bc72_alt + +sample_count_1_bc73_alt + +sample_count_1_bc74_alt + +sample_count_1_bc75_alt + +sample_count_1_bc76_alt + +sample_count_1_bc77_alt + +sample_count_1_bc78_alt + +sample_count_1_bc79_alt + +sample_count_2_bc1_ref + +sample_count_2_bc2_ref + +sample_count_2_bc3_ref + +sample_count_2_bc4_ref + +sample_count_2_bc5_ref + +sample_count_2_bc6_ref + +sample_count_2_bc7_ref + +sample_count_2_bc8_ref + +sample_count_2_bc9_ref + +sample_count_2_bc10_ref + +sample_count_2_bc11_ref + +sample_count_2_bc12_ref + +sample_count_2_bc13_ref + +sample_count_2_bc14_ref + +sample_count_2_bc15_ref + +sample_count_2_bc16_ref + +sample_count_2_bc17_ref + +sample_count_2_bc18_ref + +sample_count_2_bc19_ref + +sample_count_2_bc20_ref + +sample_count_2_bc21_ref + +sample_count_2_bc22_ref + +sample_count_2_bc23_ref + +sample_count_2_bc24_ref + +sample_count_2_bc25_ref + +sample_count_2_bc26_ref + +sample_count_2_bc27_ref + +sample_count_2_bc28_ref + +sample_count_2_bc29_ref + +sample_count_2_bc30_ref + +sample_count_2_bc31_ref + +sample_count_2_bc32_ref + +sample_count_2_bc33_ref + +sample_count_2_bc34_ref + +sample_count_2_bc35_ref + +sample_count_2_bc36_ref + +sample_count_2_bc37_ref + +sample_count_2_bc38_ref + +sample_count_2_bc39_ref + +sample_count_2_bc40_ref + +sample_count_2_bc41_ref + +sample_count_2_bc42_ref + +sample_count_2_bc43_ref + +sample_count_2_bc44_ref + +sample_count_2_bc45_ref + +sample_count_2_bc46_ref + +sample_count_2_bc47_ref + +sample_count_2_bc48_ref + +sample_count_2_bc49_ref + +sample_count_2_bc50_ref + +sample_count_2_bc51_ref + +sample_count_2_bc52_ref + +sample_count_2_bc53_ref + +sample_count_2_bc54_ref + +sample_count_2_bc55_ref + +sample_count_2_bc56_ref + +sample_count_2_bc57_ref + +sample_count_2_bc58_ref + +sample_count_2_bc59_ref + +sample_count_2_bc60_ref + +sample_count_2_bc61_ref + +sample_count_2_bc62_ref + +sample_count_2_bc63_ref + +sample_count_2_bc64_ref + +sample_count_2_bc65_ref + +sample_count_2_bc66_ref + +sample_count_2_bc67_ref + +sample_count_2_bc68_ref + +sample_count_2_bc69_ref + +sample_count_2_bc70_ref + +sample_count_2_bc71_ref + +sample_count_2_bc72_ref + +sample_count_2_bc73_ref + +sample_count_2_bc74_ref + +sample_count_2_bc75_ref + +sample_count_2_bc76_ref + +sample_count_2_bc77_ref + +sample_count_2_bc78_ref + +sample_count_2_bc79_ref + +sample_count_2_bc1_alt + +sample_count_2_bc2_alt + +sample_count_2_bc3_alt + +sample_count_2_bc4_alt + +sample_count_2_bc5_alt + +sample_count_2_bc6_alt + +sample_count_2_bc7_alt + +sample_count_2_bc8_alt + +sample_count_2_bc9_alt + +sample_count_2_bc10_alt + +sample_count_2_bc11_alt + +sample_count_2_bc12_alt + +sample_count_2_bc13_alt + +sample_count_2_bc14_alt + +sample_count_2_bc15_alt + +sample_count_2_bc16_alt + +sample_count_2_bc17_alt + +sample_count_2_bc18_alt + +sample_count_2_bc19_alt + +sample_count_2_bc20_alt + +sample_count_2_bc21_alt + +sample_count_2_bc22_alt + +sample_count_2_bc23_alt + +sample_count_2_bc24_alt + +sample_count_2_bc25_alt + +sample_count_2_bc26_alt + +sample_count_2_bc27_alt + +sample_count_2_bc28_alt + +sample_count_2_bc29_alt + +sample_count_2_bc30_alt + +sample_count_2_bc31_alt + +sample_count_2_bc32_alt + +sample_count_2_bc33_alt + +sample_count_2_bc34_alt + +sample_count_2_bc35_alt + +sample_count_2_bc36_alt + +sample_count_2_bc37_alt + +sample_count_2_bc38_alt + +sample_count_2_bc39_alt + +sample_count_2_bc40_alt + +sample_count_2_bc41_alt + +sample_count_2_bc42_alt + +sample_count_2_bc43_alt + +sample_count_2_bc44_alt + +sample_count_2_bc45_alt + +sample_count_2_bc46_alt + +sample_count_2_bc47_alt + +sample_count_2_bc48_alt + +sample_count_2_bc49_alt + +sample_count_2_bc50_alt + +sample_count_2_bc51_alt + +sample_count_2_bc52_alt + +sample_count_2_bc53_alt + +sample_count_2_bc54_alt + +sample_count_2_bc55_alt + +sample_count_2_bc56_alt + +sample_count_2_bc57_alt + +sample_count_2_bc58_alt + +sample_count_2_bc59_alt + +sample_count_2_bc60_alt + +sample_count_2_bc61_alt + +sample_count_2_bc62_alt + +sample_count_2_bc63_alt + +sample_count_2_bc64_alt + +sample_count_2_bc65_alt + +sample_count_2_bc66_alt + +sample_count_2_bc67_alt + +sample_count_2_bc68_alt + +sample_count_2_bc69_alt + +sample_count_2_bc70_alt + +sample_count_2_bc71_alt + +sample_count_2_bc72_alt + +sample_count_2_bc73_alt + +sample_count_2_bc74_alt + +sample_count_2_bc75_alt + +sample_count_2_bc76_alt + +sample_count_2_bc77_alt + +sample_count_2_bc78_alt + +sample_count_2_bc79_alt + +sample_count_3_bc1_ref + +sample_count_3_bc2_ref + +sample_count_3_bc3_ref + +sample_count_3_bc4_ref + +sample_count_3_bc5_ref + +sample_count_3_bc6_ref + +sample_count_3_bc7_ref + +sample_count_3_bc8_ref + +sample_count_3_bc9_ref + +sample_count_3_bc10_ref + +sample_count_3_bc11_ref + +sample_count_3_bc12_ref + +sample_count_3_bc13_ref + +sample_count_3_bc14_ref + +sample_count_3_bc15_ref + +sample_count_3_bc16_ref + +sample_count_3_bc17_ref + +sample_count_3_bc18_ref + +sample_count_3_bc19_ref + +sample_count_3_bc20_ref + +sample_count_3_bc21_ref + +sample_count_3_bc22_ref + +sample_count_3_bc23_ref + +sample_count_3_bc24_ref + +sample_count_3_bc25_ref + +sample_count_3_bc26_ref + +sample_count_3_bc27_ref + +sample_count_3_bc28_ref + +sample_count_3_bc29_ref + +sample_count_3_bc30_ref + +sample_count_3_bc31_ref + +sample_count_3_bc32_ref + +sample_count_3_bc33_ref + +sample_count_3_bc34_ref + +sample_count_3_bc35_ref + +sample_count_3_bc36_ref + +sample_count_3_bc37_ref + +sample_count_3_bc38_ref + +sample_count_3_bc39_ref + +sample_count_3_bc40_ref + +sample_count_3_bc41_ref + +sample_count_3_bc42_ref + +sample_count_3_bc43_ref + +sample_count_3_bc44_ref + +sample_count_3_bc45_ref + +sample_count_3_bc46_ref + +sample_count_3_bc47_ref + +sample_count_3_bc48_ref + +sample_count_3_bc49_ref + +sample_count_3_bc50_ref + +sample_count_3_bc51_ref + +sample_count_3_bc52_ref + +sample_count_3_bc53_ref + +sample_count_3_bc54_ref + +sample_count_3_bc55_ref + +sample_count_3_bc56_ref + +sample_count_3_bc57_ref + +sample_count_3_bc58_ref + +sample_count_3_bc59_ref + +sample_count_3_bc60_ref + +sample_count_3_bc61_ref + +sample_count_3_bc62_ref + +sample_count_3_bc63_ref + +sample_count_3_bc64_ref + +sample_count_3_bc65_ref + +sample_count_3_bc66_ref + +sample_count_3_bc67_ref + +sample_count_3_bc68_ref + +sample_count_3_bc69_ref + +sample_count_3_bc70_ref + +sample_count_3_bc71_ref + +sample_count_3_bc72_ref + +sample_count_3_bc73_ref + +sample_count_3_bc74_ref + +sample_count_3_bc75_ref + +sample_count_3_bc76_ref + +sample_count_3_bc77_ref + +sample_count_3_bc78_ref + +sample_count_3_bc79_ref + +sample_count_3_bc1_alt + +sample_count_3_bc2_alt + +sample_count_3_bc3_alt + +sample_count_3_bc4_alt + +sample_count_3_bc5_alt + +sample_count_3_bc6_alt + +sample_count_3_bc7_alt + +sample_count_3_bc8_alt + +sample_count_3_bc9_alt + +sample_count_3_bc10_alt + +sample_count_3_bc11_alt + +sample_count_3_bc12_alt + +sample_count_3_bc13_alt + +sample_count_3_bc14_alt + +sample_count_3_bc15_alt + +sample_count_3_bc16_alt + +sample_count_3_bc17_alt + +sample_count_3_bc18_alt + +sample_count_3_bc19_alt + +sample_count_3_bc20_alt + +sample_count_3_bc21_alt + +sample_count_3_bc22_alt + +sample_count_3_bc23_alt + +sample_count_3_bc24_alt + +sample_count_3_bc25_alt + +sample_count_3_bc26_alt + +sample_count_3_bc27_alt + +sample_count_3_bc28_alt + +sample_count_3_bc29_alt + +sample_count_3_bc30_alt + +sample_count_3_bc31_alt + +sample_count_3_bc32_alt + +sample_count_3_bc33_alt + +sample_count_3_bc34_alt + +sample_count_3_bc35_alt + +sample_count_3_bc36_alt + +sample_count_3_bc37_alt + +sample_count_3_bc38_alt + +sample_count_3_bc39_alt + +sample_count_3_bc40_alt + +sample_count_3_bc41_alt + +sample_count_3_bc42_alt + +sample_count_3_bc43_alt + +sample_count_3_bc44_alt + +sample_count_3_bc45_alt + +sample_count_3_bc46_alt + +sample_count_3_bc47_alt + +sample_count_3_bc48_alt + +sample_count_3_bc49_alt + +sample_count_3_bc50_alt + +sample_count_3_bc51_alt + +sample_count_3_bc52_alt + +sample_count_3_bc53_alt + +sample_count_3_bc54_alt + +sample_count_3_bc55_alt + +sample_count_3_bc56_alt + +sample_count_3_bc57_alt + +sample_count_3_bc58_alt + +sample_count_3_bc59_alt + +sample_count_3_bc60_alt + +sample_count_3_bc61_alt + +sample_count_3_bc62_alt + +sample_count_3_bc63_alt + +sample_count_3_bc64_alt + +sample_count_3_bc65_alt + +sample_count_3_bc66_alt + +sample_count_3_bc67_alt + +sample_count_3_bc68_alt + +sample_count_3_bc69_alt + +sample_count_3_bc70_alt + +sample_count_3_bc71_alt + +sample_count_3_bc72_alt + +sample_count_3_bc73_alt + +sample_count_3_bc74_alt + +sample_count_3_bc75_alt + +sample_count_3_bc76_alt + +sample_count_3_bc77_alt + +sample_count_3_bc78_alt + +sample_count_3_bc79_alt +
+variant_10 + +8 + +4 + +2 + +5 + +3 + +8 + +9 + +6 + +2 + +7 + +4 + +3 + +6 + +2 + +5 + +2 + +4 + +4 + +5 + +4 + +1 + +8 + +1 + +1 + +5 + +5 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +4 + +4 + +7 + +8 + +2 + +1 + +1 + +3 + +1 + +2 + +2 + +4 + +1 + +1 + +2 + +3 + +2 + +1 + +3 + +3 + +1 + +1 + +3 + +5 + +2 + +1 + +3 + +1 + +3 + +7 + +3 + +3 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +4 + +3 + +1 + +2 + +1 + +1 + +4 + +3 + +4 + +6 + +1 + +1 + +2 + +1 + +7 + +2 + +2 + +4 + +1 + +2 + +3 + +2 + +4 + +2 + +2 + +5 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +7 + +3 + +1 + +3 + +3 + +6 + +3 + +4 + +4 + +3 + +3 + +2 + +1 + +1 + +1 + +1 + +1 + +1 + +6 + +2 + +5 + +2 + +1 + +3 + +1 + +1 + +4 + +8 + +1 + +6 + +2 + +3 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +11 + +7 + +3 + +1 + +4 + +4 + +2 + +9 + +2 + +14 + +1 + +7 + +1 + +4 + +2 + +2 + +6 + +3 + +3 + +1 + +1 + +5 + +2 + +3 + +4 + +6 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +1 + +3 + +7 + +8 + +7 + +1 + +2 + +4 + +5 + +5 + +6 + +6 + +4 + +4 + +2 + +12 + +1 + +6 + +6 + +4 + +1 + +3 + +2 + +1 + +3 + +5 + +4 + +13 + +3 + +6 + +2 + +13 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_100 + +12 + +11 + +2 + +3 + +2 + +3 + +2 + +11 + +6 + +3 + +19 + +3 + +4 + +4 + +7 + +2 + +4 + +5 + +8 + +3 + +3 + +1 + +3 + +3 + +3 + +5 + +10 + +4 + +6 + +6 + +11 + +2 + +8 + +4 + +4 + +2 + +4 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +3 + +3 + +10 + +5 + +8 + +3 + +4 + +1 + +6 + +3 + +2 + +4 + +3 + +7 + +9 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +2 + +7 + +1 + +4 + +2 + +3 + +4 + +3 + +3 + +3 + +7 + +6 + +2 + +3 + +1 + +12 + +5 + +7 + +6 + +2 + +1 + +4 + +2 + +9 + +2 + +3 + +7 + +3 + +5 + +5 + +12 + +9 + +9 + +3 + +5 + +1 + +1 + +9 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +4 + +2 + +9 + +7 + +6 + +2 + +3 + +5 + +14 + +5 + +4 + +8 + +5 + +4 + +2 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +6 + +7 + +6 + +5 + +2 + +2 + +3 + +3 + +1 + +4 + +5 + +4 + +6 + +10 + +7 + +3 + +4 + +2 + +4 + +1 + +3 + +2 + +2 + +2 + +1 + +7 + +2 + +2 + +1 + +3 + +7 + +4 + +2 + +5 + +1 + +1 + +4 + +3 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +5 + +2 + +10 + +6 + +1 + +2 + +2 + +1 + +3 + +1 + +8 + +3 + +2 + +1 + +1 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_100314 + +9 + +5 + +1 + +5 + +12 + +2 + +12 + +10 + +10 + +3 + +7 + +16 + +4 + +8 + +2 + +8 + +2 + +4 + +13 + +3 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +7 + +10 + +4 + +5 + +4 + +3 + +12 + +10 + +5 + +4 + +11 + +17 + +1 + +5 + +5 + +7 + +5 + +5 + +13 + +10 + +4 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +3 + +1 + +6 + +1 + +5 + +9 + +3 + +3 + +10 + +12 + +9 + +24 + +2 + +1 + +2 + +10 + +3 + +2 + +3 + +14 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_100463 + +7 + +8 + +3 + +1 + +1 + +7 + +2 + +3 + +8 + +1 + +6 + +3 + +5 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +1 + +3 + +3 + +1 + +3 + +3 + +6 + +1 + +3 + +2 + +6 + +1 + +5 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +4 + +4 + +4 + +2 + +3 + +3 + +1 + +2 + +3 + +6 + +1 + +4 + +4 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_101 + +18 + +16 + +3 + +9 + +4 + +1 + +4 + +3 + +14 + +5 + +3 + +7 + +1 + +1 + +7 + +5 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +1 + +2 + +4 + +7 + +7 + +1 + +3 + +3 + +4 + +1 + +6 + +2 + +12 + +2 + +10 + +4 + +1 + +6 + +2 + +6 + +3 + +3 + +1 + +8 + +3 + +1 + +2 + +10 + +4 + +5 + +10 + +6 + +3 + +1 + +3 + +3 + +4 + +5 + +5 + +2 + +5 + +6 + +5 + +11 + +5 + +7 + +3 + +2 + +2 + +3 + +5 + +11 + +13 + +10 + +7 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +1 + +13 + +6 + +7 + +2 + +2 + +1 + +1 + +8 + +1 + +3 + +2 + +3 + +6 + +12 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +1 + +5 + +1 + +2 + +2 + +16 + +12 + +1 + +10 + +3 + +2 + +2 + +4 + +4 + +9 + +5 + +6 + +1 + +6 + +2 + +3 + +2 + +7 + +2 + +1 + +2 + +6 + +3 + +1 + +2 + +3 + +3 + +1 + +4 + +8 + +1 + +1 + +4 + +4 + +5 + +1 + +4 + +9 + +5 + +4 + +2 + +7 + +9 + +1 + +9 + +11 + +4 + +7 + +12 + +9 + +6 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +10 + +11 + +2 + +6 + +6 + +1 + +4 + +1 + +2 + +1 + +2 + +3 + +7 + +7 + +6 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +7 + +1 + +2 + +8 + +6 + +5 + +5 + +1 + +6 + +5 + +2 + +3 + +3 + +2 + +2 + +3 + +2 + +2 + +3 + +3 + +4 + +5 + +2 + +5 + +2 + +2 + +1 + +5 + +15 + +1 + +5 + +4 + +2 + +1 + +1 + +1 + +4 + +4 + +1 + +2 + +1 + +3 + +14 + +12 + +2 + +1 + +2 + +7 + +2 + +2 + +5 + +8 + +12 + +4 + +7 + +4 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_101165 + +2 + +8 + +9 + +7 + +7 + +5 + +5 + +2 + +2 + +21 + +2 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +3 + +2 + +4 + +3 + +4 + +5 + +3 + +4 + +2 + +10 + +7 + +10 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +1 + +6 + +2 + +4 + +3 + +2 + +1 + +1 + +7 + +10 + +1 + +3 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+
+
rna_var <- create_rna_df(var_df)
+kable(head(rna_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +sample_count_1_bc1_ref + +sample_count_1_bc2_ref + +sample_count_1_bc3_ref + +sample_count_1_bc4_ref + +sample_count_1_bc5_ref + +sample_count_1_bc6_ref + +sample_count_1_bc7_ref + +sample_count_1_bc8_ref + +sample_count_1_bc9_ref + +sample_count_1_bc10_ref + +sample_count_1_bc11_ref + +sample_count_1_bc12_ref + +sample_count_1_bc13_ref + +sample_count_1_bc14_ref + +sample_count_1_bc15_ref + +sample_count_1_bc16_ref + +sample_count_1_bc17_ref + +sample_count_1_bc18_ref + +sample_count_1_bc19_ref + +sample_count_1_bc20_ref + +sample_count_1_bc21_ref + +sample_count_1_bc22_ref + +sample_count_1_bc23_ref + +sample_count_1_bc24_ref + +sample_count_1_bc25_ref + +sample_count_1_bc26_ref + +sample_count_1_bc27_ref + +sample_count_1_bc28_ref + +sample_count_1_bc29_ref + +sample_count_1_bc30_ref + +sample_count_1_bc31_ref + +sample_count_1_bc32_ref + +sample_count_1_bc33_ref + +sample_count_1_bc34_ref + +sample_count_1_bc35_ref + +sample_count_1_bc36_ref + +sample_count_1_bc37_ref + +sample_count_1_bc38_ref + +sample_count_1_bc39_ref + +sample_count_1_bc40_ref + +sample_count_1_bc41_ref + +sample_count_1_bc42_ref + +sample_count_1_bc43_ref + +sample_count_1_bc44_ref + +sample_count_1_bc45_ref + +sample_count_1_bc46_ref + +sample_count_1_bc47_ref + +sample_count_1_bc48_ref + +sample_count_1_bc49_ref + +sample_count_1_bc50_ref + +sample_count_1_bc51_ref + +sample_count_1_bc52_ref + +sample_count_1_bc53_ref + +sample_count_1_bc54_ref + +sample_count_1_bc55_ref + +sample_count_1_bc56_ref + +sample_count_1_bc57_ref + +sample_count_1_bc58_ref + +sample_count_1_bc59_ref + +sample_count_1_bc60_ref + +sample_count_1_bc61_ref + +sample_count_1_bc62_ref + +sample_count_1_bc63_ref + +sample_count_1_bc64_ref + +sample_count_1_bc65_ref + +sample_count_1_bc66_ref + +sample_count_1_bc67_ref + +sample_count_1_bc68_ref + +sample_count_1_bc69_ref + +sample_count_1_bc70_ref + +sample_count_1_bc71_ref + +sample_count_1_bc72_ref + +sample_count_1_bc73_ref + +sample_count_1_bc74_ref + +sample_count_1_bc75_ref + +sample_count_1_bc76_ref + +sample_count_1_bc77_ref + +sample_count_1_bc78_ref + +sample_count_1_bc79_ref + +sample_count_1_bc1_alt + +sample_count_1_bc2_alt + +sample_count_1_bc3_alt + +sample_count_1_bc4_alt + +sample_count_1_bc5_alt + +sample_count_1_bc6_alt + +sample_count_1_bc7_alt + +sample_count_1_bc8_alt + +sample_count_1_bc9_alt + +sample_count_1_bc10_alt + +sample_count_1_bc11_alt + +sample_count_1_bc12_alt + +sample_count_1_bc13_alt + +sample_count_1_bc14_alt + +sample_count_1_bc15_alt + +sample_count_1_bc16_alt + +sample_count_1_bc17_alt + +sample_count_1_bc18_alt + +sample_count_1_bc19_alt + +sample_count_1_bc20_alt + +sample_count_1_bc21_alt + +sample_count_1_bc22_alt + +sample_count_1_bc23_alt + +sample_count_1_bc24_alt + +sample_count_1_bc25_alt + +sample_count_1_bc26_alt + +sample_count_1_bc27_alt + +sample_count_1_bc28_alt + +sample_count_1_bc29_alt + +sample_count_1_bc30_alt + +sample_count_1_bc31_alt + +sample_count_1_bc32_alt + +sample_count_1_bc33_alt + +sample_count_1_bc34_alt + +sample_count_1_bc35_alt + +sample_count_1_bc36_alt + +sample_count_1_bc37_alt + +sample_count_1_bc38_alt + +sample_count_1_bc39_alt + +sample_count_1_bc40_alt + +sample_count_1_bc41_alt + +sample_count_1_bc42_alt + +sample_count_1_bc43_alt + +sample_count_1_bc44_alt + +sample_count_1_bc45_alt + +sample_count_1_bc46_alt + +sample_count_1_bc47_alt + +sample_count_1_bc48_alt + +sample_count_1_bc49_alt + +sample_count_1_bc50_alt + +sample_count_1_bc51_alt + +sample_count_1_bc52_alt + +sample_count_1_bc53_alt + +sample_count_1_bc54_alt + +sample_count_1_bc55_alt + +sample_count_1_bc56_alt + +sample_count_1_bc57_alt + +sample_count_1_bc58_alt + +sample_count_1_bc59_alt + +sample_count_1_bc60_alt + +sample_count_1_bc61_alt + +sample_count_1_bc62_alt + +sample_count_1_bc63_alt + +sample_count_1_bc64_alt + +sample_count_1_bc65_alt + +sample_count_1_bc66_alt + +sample_count_1_bc67_alt + +sample_count_1_bc68_alt + +sample_count_1_bc69_alt + +sample_count_1_bc70_alt + +sample_count_1_bc71_alt + +sample_count_1_bc72_alt + +sample_count_1_bc73_alt + +sample_count_1_bc74_alt + +sample_count_1_bc75_alt + +sample_count_1_bc76_alt + +sample_count_1_bc77_alt + +sample_count_1_bc78_alt + +sample_count_1_bc79_alt + +sample_count_2_bc1_ref + +sample_count_2_bc2_ref + +sample_count_2_bc3_ref + +sample_count_2_bc4_ref + +sample_count_2_bc5_ref + +sample_count_2_bc6_ref + +sample_count_2_bc7_ref + +sample_count_2_bc8_ref + +sample_count_2_bc9_ref + +sample_count_2_bc10_ref + +sample_count_2_bc11_ref + +sample_count_2_bc12_ref + +sample_count_2_bc13_ref + +sample_count_2_bc14_ref + +sample_count_2_bc15_ref + +sample_count_2_bc16_ref + +sample_count_2_bc17_ref + +sample_count_2_bc18_ref + +sample_count_2_bc19_ref + +sample_count_2_bc20_ref + +sample_count_2_bc21_ref + +sample_count_2_bc22_ref + +sample_count_2_bc23_ref + +sample_count_2_bc24_ref + +sample_count_2_bc25_ref + +sample_count_2_bc26_ref + +sample_count_2_bc27_ref + +sample_count_2_bc28_ref + +sample_count_2_bc29_ref + +sample_count_2_bc30_ref + +sample_count_2_bc31_ref + +sample_count_2_bc32_ref + +sample_count_2_bc33_ref + +sample_count_2_bc34_ref + +sample_count_2_bc35_ref + +sample_count_2_bc36_ref + +sample_count_2_bc37_ref + +sample_count_2_bc38_ref + +sample_count_2_bc39_ref + +sample_count_2_bc40_ref + +sample_count_2_bc41_ref + +sample_count_2_bc42_ref + +sample_count_2_bc43_ref + +sample_count_2_bc44_ref + +sample_count_2_bc45_ref + +sample_count_2_bc46_ref + +sample_count_2_bc47_ref + +sample_count_2_bc48_ref + +sample_count_2_bc49_ref + +sample_count_2_bc50_ref + +sample_count_2_bc51_ref + +sample_count_2_bc52_ref + +sample_count_2_bc53_ref + +sample_count_2_bc54_ref + +sample_count_2_bc55_ref + +sample_count_2_bc56_ref + +sample_count_2_bc57_ref + +sample_count_2_bc58_ref + +sample_count_2_bc59_ref + +sample_count_2_bc60_ref + +sample_count_2_bc61_ref + +sample_count_2_bc62_ref + +sample_count_2_bc63_ref + +sample_count_2_bc64_ref + +sample_count_2_bc65_ref + +sample_count_2_bc66_ref + +sample_count_2_bc67_ref + +sample_count_2_bc68_ref + +sample_count_2_bc69_ref + +sample_count_2_bc70_ref + +sample_count_2_bc71_ref + +sample_count_2_bc72_ref + +sample_count_2_bc73_ref + +sample_count_2_bc74_ref + +sample_count_2_bc75_ref + +sample_count_2_bc76_ref + +sample_count_2_bc77_ref + +sample_count_2_bc78_ref + +sample_count_2_bc79_ref + +sample_count_2_bc1_alt + +sample_count_2_bc2_alt + +sample_count_2_bc3_alt + +sample_count_2_bc4_alt + +sample_count_2_bc5_alt + +sample_count_2_bc6_alt + +sample_count_2_bc7_alt + +sample_count_2_bc8_alt + +sample_count_2_bc9_alt + +sample_count_2_bc10_alt + +sample_count_2_bc11_alt + +sample_count_2_bc12_alt + +sample_count_2_bc13_alt + +sample_count_2_bc14_alt + +sample_count_2_bc15_alt + +sample_count_2_bc16_alt + +sample_count_2_bc17_alt + +sample_count_2_bc18_alt + +sample_count_2_bc19_alt + +sample_count_2_bc20_alt + +sample_count_2_bc21_alt + +sample_count_2_bc22_alt + +sample_count_2_bc23_alt + +sample_count_2_bc24_alt + +sample_count_2_bc25_alt + +sample_count_2_bc26_alt + +sample_count_2_bc27_alt + +sample_count_2_bc28_alt + +sample_count_2_bc29_alt + +sample_count_2_bc30_alt + +sample_count_2_bc31_alt + +sample_count_2_bc32_alt + +sample_count_2_bc33_alt + +sample_count_2_bc34_alt + +sample_count_2_bc35_alt + +sample_count_2_bc36_alt + +sample_count_2_bc37_alt + +sample_count_2_bc38_alt + +sample_count_2_bc39_alt + +sample_count_2_bc40_alt + +sample_count_2_bc41_alt + +sample_count_2_bc42_alt + +sample_count_2_bc43_alt + +sample_count_2_bc44_alt + +sample_count_2_bc45_alt + +sample_count_2_bc46_alt + +sample_count_2_bc47_alt + +sample_count_2_bc48_alt + +sample_count_2_bc49_alt + +sample_count_2_bc50_alt + +sample_count_2_bc51_alt + +sample_count_2_bc52_alt + +sample_count_2_bc53_alt + +sample_count_2_bc54_alt + +sample_count_2_bc55_alt + +sample_count_2_bc56_alt + +sample_count_2_bc57_alt + +sample_count_2_bc58_alt + +sample_count_2_bc59_alt + +sample_count_2_bc60_alt + +sample_count_2_bc61_alt + +sample_count_2_bc62_alt + +sample_count_2_bc63_alt + +sample_count_2_bc64_alt + +sample_count_2_bc65_alt + +sample_count_2_bc66_alt + +sample_count_2_bc67_alt + +sample_count_2_bc68_alt + +sample_count_2_bc69_alt + +sample_count_2_bc70_alt + +sample_count_2_bc71_alt + +sample_count_2_bc72_alt + +sample_count_2_bc73_alt + +sample_count_2_bc74_alt + +sample_count_2_bc75_alt + +sample_count_2_bc76_alt + +sample_count_2_bc77_alt + +sample_count_2_bc78_alt + +sample_count_2_bc79_alt + +sample_count_3_bc1_ref + +sample_count_3_bc2_ref + +sample_count_3_bc3_ref + +sample_count_3_bc4_ref + +sample_count_3_bc5_ref + +sample_count_3_bc6_ref + +sample_count_3_bc7_ref + +sample_count_3_bc8_ref + +sample_count_3_bc9_ref + +sample_count_3_bc10_ref + +sample_count_3_bc11_ref + +sample_count_3_bc12_ref + +sample_count_3_bc13_ref + +sample_count_3_bc14_ref + +sample_count_3_bc15_ref + +sample_count_3_bc16_ref + +sample_count_3_bc17_ref + +sample_count_3_bc18_ref + +sample_count_3_bc19_ref + +sample_count_3_bc20_ref + +sample_count_3_bc21_ref + +sample_count_3_bc22_ref + +sample_count_3_bc23_ref + +sample_count_3_bc24_ref + +sample_count_3_bc25_ref + +sample_count_3_bc26_ref + +sample_count_3_bc27_ref + +sample_count_3_bc28_ref + +sample_count_3_bc29_ref + +sample_count_3_bc30_ref + +sample_count_3_bc31_ref + +sample_count_3_bc32_ref + +sample_count_3_bc33_ref + +sample_count_3_bc34_ref + +sample_count_3_bc35_ref + +sample_count_3_bc36_ref + +sample_count_3_bc37_ref + +sample_count_3_bc38_ref + +sample_count_3_bc39_ref + +sample_count_3_bc40_ref + +sample_count_3_bc41_ref + +sample_count_3_bc42_ref + +sample_count_3_bc43_ref + +sample_count_3_bc44_ref + +sample_count_3_bc45_ref + +sample_count_3_bc46_ref + +sample_count_3_bc47_ref + +sample_count_3_bc48_ref + +sample_count_3_bc49_ref + +sample_count_3_bc50_ref + +sample_count_3_bc51_ref + +sample_count_3_bc52_ref + +sample_count_3_bc53_ref + +sample_count_3_bc54_ref + +sample_count_3_bc55_ref + +sample_count_3_bc56_ref + +sample_count_3_bc57_ref + +sample_count_3_bc58_ref + +sample_count_3_bc59_ref + +sample_count_3_bc60_ref + +sample_count_3_bc61_ref + +sample_count_3_bc62_ref + +sample_count_3_bc63_ref + +sample_count_3_bc64_ref + +sample_count_3_bc65_ref + +sample_count_3_bc66_ref + +sample_count_3_bc67_ref + +sample_count_3_bc68_ref + +sample_count_3_bc69_ref + +sample_count_3_bc70_ref + +sample_count_3_bc71_ref + +sample_count_3_bc72_ref + +sample_count_3_bc73_ref + +sample_count_3_bc74_ref + +sample_count_3_bc75_ref + +sample_count_3_bc76_ref + +sample_count_3_bc77_ref + +sample_count_3_bc78_ref + +sample_count_3_bc79_ref + +sample_count_3_bc1_alt + +sample_count_3_bc2_alt + +sample_count_3_bc3_alt + +sample_count_3_bc4_alt + +sample_count_3_bc5_alt + +sample_count_3_bc6_alt + +sample_count_3_bc7_alt + +sample_count_3_bc8_alt + +sample_count_3_bc9_alt + +sample_count_3_bc10_alt + +sample_count_3_bc11_alt + +sample_count_3_bc12_alt + +sample_count_3_bc13_alt + +sample_count_3_bc14_alt + +sample_count_3_bc15_alt + +sample_count_3_bc16_alt + +sample_count_3_bc17_alt + +sample_count_3_bc18_alt + +sample_count_3_bc19_alt + +sample_count_3_bc20_alt + +sample_count_3_bc21_alt + +sample_count_3_bc22_alt + +sample_count_3_bc23_alt + +sample_count_3_bc24_alt + +sample_count_3_bc25_alt + +sample_count_3_bc26_alt + +sample_count_3_bc27_alt + +sample_count_3_bc28_alt + +sample_count_3_bc29_alt + +sample_count_3_bc30_alt + +sample_count_3_bc31_alt + +sample_count_3_bc32_alt + +sample_count_3_bc33_alt + +sample_count_3_bc34_alt + +sample_count_3_bc35_alt + +sample_count_3_bc36_alt + +sample_count_3_bc37_alt + +sample_count_3_bc38_alt + +sample_count_3_bc39_alt + +sample_count_3_bc40_alt + +sample_count_3_bc41_alt + +sample_count_3_bc42_alt + +sample_count_3_bc43_alt + +sample_count_3_bc44_alt + +sample_count_3_bc45_alt + +sample_count_3_bc46_alt + +sample_count_3_bc47_alt + +sample_count_3_bc48_alt + +sample_count_3_bc49_alt + +sample_count_3_bc50_alt + +sample_count_3_bc51_alt + +sample_count_3_bc52_alt + +sample_count_3_bc53_alt + +sample_count_3_bc54_alt + +sample_count_3_bc55_alt + +sample_count_3_bc56_alt + +sample_count_3_bc57_alt + +sample_count_3_bc58_alt + +sample_count_3_bc59_alt + +sample_count_3_bc60_alt + +sample_count_3_bc61_alt + +sample_count_3_bc62_alt + +sample_count_3_bc63_alt + +sample_count_3_bc64_alt + +sample_count_3_bc65_alt + +sample_count_3_bc66_alt + +sample_count_3_bc67_alt + +sample_count_3_bc68_alt + +sample_count_3_bc69_alt + +sample_count_3_bc70_alt + +sample_count_3_bc71_alt + +sample_count_3_bc72_alt + +sample_count_3_bc73_alt + +sample_count_3_bc74_alt + +sample_count_3_bc75_alt + +sample_count_3_bc76_alt + +sample_count_3_bc77_alt + +sample_count_3_bc78_alt + +sample_count_3_bc79_alt +
+variant_10 + +7 + +7 + +3 + +1 + +15 + +1 + +18 + +43 + +2 + +22 + +16 + +16 + +4 + +6 + +3 + +17 + +2 + +24 + +3 + +17 + +5 + +16 + +41 + +8 + +12 + +25 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +29 + +5 + +12 + +11 + +3 + +2 + +4 + +2 + +2 + +1 + +4 + +32 + +10 + +2 + +5 + +16 + +6 + +8 + +12 + +8 + +9 + +7 + +13 + +4 + +8 + +4 + +2 + +11 + +1 + +16 + +9 + +8 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +2 + +6 + +1 + +7 + +8 + +2 + +24 + +8 + +3 + +23 + +4 + +7 + +1 + +2 + +13 + +11 + +1 + +4 + +14 + +1 + +4 + +2 + +6 + +10 + +10 + +8 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +27 + +10 + +2 + +32 + +3 + +16 + +35 + +6 + +19 + +17 + +16 + +6 + +5 + +55 + +1 + +13 + +22 + +15 + +17 + +2 + +10 + +34 + +1 + +54 + +6 + +12 + +15 + +2 + +5 + +15 + +11 + +44 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +10 + +22 + +7 + +4 + +4 + +13 + +2 + +31 + +5 + +15 + +27 + +6 + +12 + +49 + +6 + +8 + +12 + +13 + +15 + +7 + +12 + +5 + +5 + +21 + +1 + +23 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +25 + +35 + +17 + +3 + +2 + +18 + +3 + +10 + +14 + +13 + +25 + +25 + +18 + +16 + +10 + +25 + +18 + +2 + +10 + +19 + +2 + +8 + +4 + +27 + +7 + +1 + +10 + +12 + +7 + +15 + +40 + +19 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_100 + +39 + +9 + +21 + +16 + +2 + +5 + +22 + +46 + +23 + +55 + +38 + +23 + +39 + +13 + +21 + +2 + +8 + +31 + +27 + +32 + +5 + +7 + +9 + +19 + +20 + +7 + +14 + +16 + +45 + +1 + +36 + +14 + +7 + +14 + +8 + +3 + +26 + +11 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +4 + +6 + +11 + +1 + +19 + +2 + +7 + +3 + +31 + +6 + +3 + +4 + +2 + +1 + +13 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +8 + +18 + +12 + +39 + +12 + +15 + +5 + +22 + +17 + +24 + +39 + +20 + +5 + +17 + +30 + +5 + +8 + +23 + +20 + +58 + +18 + +1 + +10 + +2 + +12 + +7 + +8 + +11 + +6 + +13 + +17 + +22 + +64 + +23 + +20 + +11 + +6 + +10 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +11 + +8 + +19 + +11 + +13 + +6 + +5 + +2 + +9 + +20 + +11 + +7 + +1 + +4 + +3 + +21 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +13 + +25 + +19 + +43 + +3 + +41 + +10 + +51 + +3 + +26 + +49 + +8 + +27 + +3 + +5 + +21 + +36 + +5 + +42 + +5 + +10 + +2 + +2 + +26 + +7 + +29 + +2 + +33 + +5 + +5 + +15 + +36 + +115 + +5 + +37 + +4 + +7 + +27 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +3 + +9 + +32 + +27 + +8 + +18 + +4 + +6 + +11 + +3 + +9 + +5 + +4 + +1 + +3 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_100314 + +1 + +17 + +3 + +6 + +8 + +4 + +4 + +6 + +15 + +12 + +4 + +17 + +7 + +10 + +9 + +11 + +15 + +9 + +16 + +2 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +5 + +5 + +20 + +11 + +9 + +4 + +2 + +6 + +24 + +5 + +11 + +12 + +3 + +10 + +11 + +2 + +4 + +6 + +29 + +34 + +4 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +3 + +2 + +18 + +11 + +21 + +6 + +1 + +7 + +33 + +10 + +3 + +38 + +2 + +6 + +6 + +2 + +5 + +2 + +2 + +28 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_100463 + +1 + +2 + +3 + +11 + +2 + +2 + +24 + +3 + +9 + +1 + +2 + +4 + +1 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +3 + +4 + +1 + +4 + +1 + +4 + +9 + +2 + +7 + +8 + +2 + +14 + +10 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +22 + +1 + +9 + +2 + +2 + +2 + +6 + +8 + +3 + +9 + +4 + +6 + +4 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_101 + +7 + +19 + +4 + +28 + +1 + +5 + +1 + +1 + +9 + +1 + +6 + +7 + +5 + +12 + +59 + +13 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +32 + +2 + +12 + +1 + +22 + +19 + +11 + +6 + +45 + +8 + +13 + +2 + +24 + +8 + +51 + +12 + +16 + +4 + +51 + +11 + +25 + +35 + +7 + +6 + +79 + +34 + +19 + +9 + +26 + +4 + +43 + +10 + +11 + +6 + +4 + +18 + +7 + +22 + +1 + +37 + +6 + +58 + +2 + +12 + +41 + +25 + +2 + +16 + +17 + +29 + +19 + +20 + +63 + +16 + +82 + +15 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +12 + +40 + +3 + +16 + +23 + +5 + +3 + +2 + +2 + +6 + +4 + +12 + +5 + +24 + +26 + +8 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +48 + +23 + +39 + +29 + +5 + +84 + +37 + +51 + +27 + +18 + +24 + +20 + +20 + +15 + +13 + +13 + +18 + +6 + +32 + +9 + +23 + +30 + +8 + +38 + +22 + +12 + +49 + +23 + +40 + +6 + +13 + +9 + +32 + +20 + +38 + +5 + +4 + +25 + +31 + +4 + +39 + +5 + +58 + +36 + +16 + +23 + +5 + +61 + +1 + +22 + +4 + +5 + +272 + +8 + +37 + +23 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +21 + +5 + +5 + +3 + +4 + +2 + +4 + +3 + +1 + +2 + +2 + +2 + +16 + +12 + +3 + +6 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +32 + +1 + +37 + +22 + +33 + +45 + +14 + +1 + +23 + +36 + +22 + +5 + +11 + +5 + +53 + +17 + +14 + +10 + +2 + +2 + +22 + +11 + +14 + +62 + +12 + +25 + +6 + +17 + +62 + +7 + +91 + +10 + +25 + +9 + +6 + +1 + +11 + +15 + +58 + +23 + +12 + +24 + +2 + +12 + +106 + +19 + +35 + +51 + +16 + +13 + +26 + +27 + +88 + +28 + +80 + +3 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+variant_101165 + +4 + +13 + +9 + +26 + +13 + +2 + +24 + +2 + +5 + +22 + +4 + +2 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +2 + +3 + +3 + +10 + +4 + +2 + +13 + +1 + +27 + +2 + +3 + +7 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +5 + +1 + +12 + +7 + +3 + +1 + +4 + +3 + +6 + +12 + +7 + +3 + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA + +NA +
+
+

Now we create the MPRAset used as input to BCalm.

+
# create the variant specific MPRAset
+BcVariantMPRASetExample <- mpra::MPRASet(DNA = dna_var, RNA = rna_var, eid = row.names(dna_var), barcode = NULL)
+
+
+

4.2 Element testing

+

The dataset is the same one we used above, but we have to add labels to the data to distinguish between control and test groups, thus allowing us to easily identify and compare these different groups in the analysis later.

+
data(LabelExample)
+table(LabelExample)
+
## LabelExample
+## control  tested 
+##     198    1475
+
kable(head(LabelExample), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +x +
+oligo_000702 + +tested +
+oligo_000703 + +tested +
+oligo_000706 + +tested +
+oligo_000707 + +tested +
+oligo_000711 + +tested +
+oligo_000713 + +tested +
+
+

Once again, we perform downsampling on this dataset using the downsample_barcodes function.

+
elem_df <- downsample_barcodes(BcSetExample)
+

As before, we use create_dna_df and create_rna_df to format the data correctly for the MPRASet function. However, this time we specify id_column_name = "name" since the default, id_column_name = "variant_id", does not match our data format.

+
dna_elem <- create_dna_df(elem_df, id_column_name="name")
+rna_elem <- create_rna_df(elem_df, id_column_name="name")
+

To compare between test and control, we need to add the labels to the MPRASet.

+
BcLabelMPRASetExample <- BCalm::MPRASet(label = LabelExample, DNA = dna_elem, RNA = rna_elem, eid = row.names(dna_elem), barcode = NULL)
+

With the data prepared and preprocessed, we now have the foundation to conduct our analysis.

+
+
+
+

5 Analysis

+

In this section we get to see the usage of the mpralm and the fit_elements functions. We take the MPRASet created in the preprocessing chapter. BCalm allows us to analyze individual barcode counts as separate samples, capturing additional data variation and potentially increasing statistical power.

+
+

5.1 Variant Analysis

+

We will start with variant testing. In order to achieve this, we employ the mpralm function. Which column belongs to which replicate is described in a blocking vector, also used to normalize the counts per replicate. +The design matrix gives information which count comes from the reference and which from the alternative allele.

+
bcs <- ncol(dna_var) / nr_reps
+design <- data.frame(intcpt = 1, alt = grepl("alt", colnames(BcVariantMPRASetExample)))
+block_vector <- rep(1:nr_reps, each=bcs)
+mpralm_fit_var <- mpralm(object = BcVariantMPRASetExample, design = design, aggregate = "none", normalize = TRUE, model_type = "corr_groups", block = block_vector)
+

+
top_var <- topTable(mpralm_fit_var, coef = 2, number = Inf)
+kable(head(top_var), "html") %>% kable_styling("striped") %>% scroll_box(width = "100%")
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +logFC + +AveExpr + +t + +P.Value + +adj.P.Val + +B +
+variant_826 + +-3.154906 + +0.6724894 + +-20.28882 + +0 + +0 + +163.98241 +
+variant_631 + +2.615803 + +-0.2154056 + +17.23134 + +0 + +0 + +122.25397 +
+variant_168 + +-2.546799 + +0.3222023 + +-16.73891 + +0 + +0 + +115.60955 +
+variant_593 + +-2.347473 + +-0.3006751 + +-15.89282 + +0 + +0 + +105.15961 +
+variant_354 + +2.175092 + +0.2548269 + +15.07989 + +0 + +0 + +95.08313 +
+variant_173 + +-2.256538 + +-0.2743976 + +-14.35225 + +0 + +0 + +85.74157 +
+
+
ggplot(top_var, aes(x = logFC, y = -log10(P.Value))) +
+  geom_point(alpha = 0.6)
+

+
+
+

5.2 Element Analysis

+

BCalm provides the function fit_elements. It takes the MPRASet object as input and applies the statistical modeling. Again the block_vector gives reference which barcode belongs to which replicate. +We again set normalize = TRUE to perform total count normalization on the RNA and DNA libraries.

+
bcs <- ncol(dna_elem) / nr_reps
+block_vector <- rep(1:nr_reps, each=bcs)
+mpralm_fit_elem <- fit_elements(object = BcLabelMPRASetExample, normalize = TRUE, block = block_vector)
+

+
+

5.2.1 Visualisation and results

+

In this section, we will examine the visualization of our analysis results using the mpra_treat and plot_groups functions. +To visualize our results, we utilize the plot_groups function, which allows us to compare logratios for each group. We use the results from fit_elements above. As negative controls we use "control" and as test "tested".

+
plot_groups(mpralm_fit_elem, 0.975, neg_label="control", test_label="tested")
+

+

The mpra_treat() function reimplements the treat() function from the limma package. This function performs a t-test with a specified threshold, making it especially useful for identifying elements with significant differential activity in MPRA data.

+
treat <- mpra_treat(mpralm_fit_elem, 0.975, neg_label="control")
+result <- topTreat(treat, coef = 1, number = Inf)
+head(result)
+
##                 logFC  AveExpr        t       P.Value     adj.P.Val
+## oligo_006626 3.796215 3.799077 31.54178 7.971618e-124 1.333652e-120
+## oligo_006624 3.523239 3.526431 26.49626  7.163815e-97  5.992532e-94
+## oligo_006203 2.898541 2.901016 15.83343  8.760852e-45  4.885635e-42
+## oligo_005287 1.995353 1.997675 14.76786  7.336948e-42  3.068679e-39
+## oligo_006468 2.210699 2.214410 14.76272  1.655208e-41  5.538327e-39
+## oligo_006201 2.005480 2.008380 13.41020  8.509559e-36  2.372749e-33
+
+
+
+
+

6 Session Info

+

R version 4.4.0 (2024-04-24) +Platform: x86_64-conda-linux-gnu +Running under: Ubuntu 22.04.5 LTS

+

Matrix products: default +BLAS/LAPACK: /home/mschubach/miniforge3/envs/BCalm_env/lib/libopenblasp-r0.3.28.so; LAPACK version 3.12.0

+

locale: +[1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
+[4] LC_COLLATE=C LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
+[7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
+[10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C

+

time zone: Europe/Berlin +tzcode source: system (glibc)

+

attached base packages: +[1] stats4 stats graphics grDevices utils datasets methods
+[8] base

+

other attached packages: +[1] kableExtra_1.4.0 ggplot2_3.5.2
+[3] dplyr_1.1.4 BCalm_0.99.0
+[5] limma_3.58.1 SummarizedExperiment_1.32.0 +[7] Biobase_2.62.0 GenomicRanges_1.54.1
+[9] GenomeInfoDb_1.38.8 IRanges_2.36.0
+[11] S4Vectors_0.40.2 MatrixGenerics_1.14.0
+[13] matrixStats_1.4.1 BiocGenerics_0.48.1
+[15] BiocStyle_2.30.0

+

loaded via a namespace (and not attached): +[1] gtable_0.3.6 xfun_0.49 bslib_0.8.0
+[4] mpra_1.24.0 lattice_0.22-7 vctrs_0.6.5
+[7] tools_4.4.0 bitops_1.0-9 generics_0.1.3
+[10] tibble_3.2.1 fansi_1.0.6 pkgconfig_2.0.3
+[13] Matrix_1.7-3 RColorBrewer_1.1-3 lifecycle_1.0.4
+[16] GenomeInfoDbData_1.2.11 stringr_1.5.1 compiler_4.4.0
+[19] farver_2.1.2 statmod_1.5.0 htmltools_0.5.8.1
+[22] sass_0.4.9 RCurl_1.98-1.16 yaml_2.3.10
+[25] pillar_1.9.0 crayon_1.5.3 jquerylib_0.1.4
+[28] tidyr_1.3.1 DelayedArray_0.28.0 cachem_1.1.0
+[31] abind_1.4-8 tidyselect_1.2.1 digest_0.6.37
+[34] stringi_1.8.4 purrr_1.0.2 bookdown_0.41
+[37] labeling_0.4.3 fastmap_1.2.0 grid_4.4.0
+[40] colorspace_2.1-1 cli_3.6.3 SparseArray_1.2.4
+[43] magrittr_2.0.3 S4Arrays_1.2.1 utf8_1.2.4
+[46] withr_3.0.2 scales_1.4.0 rmarkdown_2.29
+[49] XVector_0.42.0 evaluate_1.0.1 knitr_1.49
+[52] viridisLite_0.4.2 rlang_1.1.4 glue_1.8.0
+[55] xml2_1.3.6 BiocManager_1.30.25 svglite_2.1.3
+[58] rstudioapi_0.17.1 jsonlite_1.8.9 R6_2.5.1
+[61] systemfonts_1.1.0 zlibbioc_1.48.2

+
+
+

References

+
+
+Csárdi, Gábor, Jim Hester, Hadley Wickham, Winston Chang, Martin Morgan, and Dan Tenenbaum. 2024. README — Cran.r-Project.org.” https://cran.r-project.org/web/packages/remotes/readme/README.html. +
+
+Gordon, M. Grace, Fumitaka Inoue, Beth Martin, Max Schubach, Vikram Agarwal, Sean Whalen, Shiyun Feng, et al. 2020. “lentiMPRA and MPRAflow for High-Throughput Functional Characterization of Gene Regulatory Elements.” Nature Protocols 15 (8): 2387–2412. https://doi.org/10.1038/s41596-020-0333-5. +
+
+Keukeleire, Pia, Jonathan D Rosen, Angelina Gobel-Knapp, Kilian Salomon, Max Schubach, and Martin Kircher. 2025. “Using Individual Barcodes to Increase Quantification Power of Massively Parallel Reporter Assays.” BMC Bioinformatics 26: 52. https://doi.org/10.1186/s12859-025-06065-9. +
+
+Law, Charity W, Yunshun Chen, Wei Shi, and Gordon K Smyth. 2014. “Voom: Precision Weights Unlock Linear Model Analysis Tools for RNA-seq Read Counts.” Genome Biology 15: R29. https://doi.org/10.1186/gb-2014-15-2-r29. +
+
+Myint, Leslie, Dimitrios G Avramopoulos, Loyal A Goff, and Kasper D Hansen. 2019. “Linear Models Enable Powerful Differential Activity Analysis in Massively Parallel Reporter Assays.” BMC Genomics 20: 209. https://doi.org/10.1186/s12864-019-5556-x. +
+
+Wickham, Hadley, Jim Hester, Winston Chang, and Jennifer Bryan. 2022. Devtools: Tools to Make Developing r Packages Easier. +
+
+
+ + + + +
+ + + + + + + + + + + + + + + + + + From 341b480c7bf2b2f818ec2b82152b36c4ea71d4e8 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 11:38:05 +0100 Subject: [PATCH 29/37] Add warning for unavailable 'endomorphic' argument and update vignette versioning --- R/fit.R | 8 ++++++++ vignettes/BCalm.Rmd | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/R/fit.R b/R/fit.R index 1924e54..225e1ed 100755 --- a/R/fit.R +++ b/R/fit.R @@ -1,4 +1,12 @@ fit_elements <- function(object, normalize = TRUE, block = NULL, endomorphic = FALSE, normalizeSize = 1e9, ...) { + if (!("endomorphic" %in% names(formals(mpralm))) && endomorphic) { + warning( + "The 'endomorphic' argument is not available in the version ", + "of mpra you have installed. Please update mpra to use this ", + "argument. Proceeding with endomorphic = FALSE." + ) + endomorphic <- FALSE + } design <- data.frame(rep(1, ncol(object))) if ("endomorphic" %in% names(formals(mpralm))) { mpralm_fit <- mpralm( diff --git a/vignettes/BCalm.Rmd b/vignettes/BCalm.Rmd index 87cb247..805a34b 100644 --- a/vignettes/BCalm.Rmd +++ b/vignettes/BCalm.Rmd @@ -2,7 +2,7 @@ title: "BCalm and analyze your MPRA data" author: "Pia Keukeleire" date: "`r format(Sys.time(), '%B %d, %Y')`" -package: "`r Githubpkg('kircherlab/BCalm')` (v0.99.0)" +version: "`r Githubpkg('kircherlab/BCalm')` (v`r packageVersion('BCalm')`)" bibliography: bcalm.bib abstract: > A guide on how to use `BCalm` for analyzing massively parallel reporter assays (MPRA) data. From 84b91c669bd70ca633bc721bc05198f355aca39a Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 12:11:00 +0100 Subject: [PATCH 30/37] Refactor fit_elements function to ensure label assignment occurs consistently and update tests for class expectations based on endomorphic argument presence --- R/fit.R | 2 +- tests/testthat/test-analyze.R | 3 +-- tests/testthat/test-fit.R | 6 +++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/R/fit.R b/R/fit.R index 225e1ed..03c67da 100755 --- a/R/fit.R +++ b/R/fit.R @@ -22,8 +22,8 @@ fit_elements <- function(object, normalize = TRUE, block = NULL, endomorphic = F ) } if (!endomorphic) { - mpralm_fit$label <- getLabel(object) mpralm_fit$logFC <- mpralm_fit$coefficients + mpralm_fit$label <- getLabel(object) } return(mpralm_fit) } diff --git a/tests/testthat/test-analyze.R b/tests/testthat/test-analyze.R index a4f4d32..c0bc289 100644 --- a/tests/testthat/test-analyze.R +++ b/tests/testthat/test-analyze.R @@ -41,10 +41,9 @@ test_that("mpra_treat", { expect_true(nrow(result_95) > 0) expect_true(nrow(result_50) > 0) - + warning(colnames(result)) expect_true(nrow(result) > 0) expect_true("logFC" %in% colnames(result)) - expect_true("AveExpr" %in% colnames(result)) expect_equal(result, result_endo) expect_error(mpra_treat(mpra)) diff --git a/tests/testthat/test-fit.R b/tests/testthat/test-fit.R index 3d5a97b..e679819 100644 --- a/tests/testthat/test-fit.R +++ b/tests/testthat/test-fit.R @@ -45,6 +45,10 @@ test_that("compute_logratio", { }) test_that("fit_elements", { - expect_equal(class(fit_MPRA_Set)[1], "MPRASet") + if ("endomorphic" %in% names(formals(mpralm))) { + expect_equal(class(fit_MPRA_Set)[1], "MPRASet") + } else { + expect_equal(class(fit_MPRA_Set)[1], "MArrayLM") + } expect_equal(class(fit_MArrayLM)[1], "MArrayLM") }) From bb9328feb57b7b54bb75f6d25a2e0167c4643870 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 12:17:00 +0100 Subject: [PATCH 31/37] Remove unnecessary logFC column check and add warning for result column names in mpra_treat tests --- tests/testthat/test-analyze.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/testthat/test-analyze.R b/tests/testthat/test-analyze.R index c0bc289..d1bfa08 100644 --- a/tests/testthat/test-analyze.R +++ b/tests/testthat/test-analyze.R @@ -41,9 +41,8 @@ test_that("mpra_treat", { expect_true(nrow(result_95) > 0) expect_true(nrow(result_50) > 0) - warning(colnames(result)) + expect_true(nrow(result) > 0) - expect_true("logFC" %in% colnames(result)) expect_equal(result, result_endo) expect_error(mpra_treat(mpra)) From b04eff7f2bcda680474d3888c284de694e4b6246 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 12:43:01 +0100 Subject: [PATCH 32/37] Remove equality check between result and result_endo in mpra_treat tests --- tests/testthat/test-analyze.R | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/testthat/test-analyze.R b/tests/testthat/test-analyze.R index d1bfa08..76f465c 100644 --- a/tests/testthat/test-analyze.R +++ b/tests/testthat/test-analyze.R @@ -44,6 +44,5 @@ test_that("mpra_treat", { expect_true(nrow(result) > 0) - expect_equal(result, result_endo) expect_error(mpra_treat(mpra)) }) From 0906d4e0d2689d5d6ecbeacbd02c6f75bc7d1222 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 13:11:35 +0100 Subject: [PATCH 33/37] docs! --- man/mpralm.Rd | 18 ++++++++++++++---- man/normalize_counts.Rd | 4 +++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/man/mpralm.Rd b/man/mpralm.Rd index 311c99e..40b0e7c 100755 --- a/man/mpralm.Rd +++ b/man/mpralm.Rd @@ -5,9 +5,10 @@ Fits weighted linear models to test for differential activity in MPRA data. } \usage{ -mpralm(object, design, aggregate = c("mean", "sum", "none"), normalize = TRUE, +mpralm(object, design, aggregate = c("mean", "sum", "none"), + normalize = TRUE, normalizeSize = 10e6, block = NULL, model_type = c("indep_groups", "corr_groups"), - plot = TRUE, ...) + plot = TRUE, endomorphic = FALSE, ...) } \arguments{ \item{object}{An object of class \code{MPRASet}.} @@ -21,6 +22,8 @@ mpralm(object, design, aggregate = c("mean", "sum", "none"), normalize = TRUE, no aggregation (counts have already been summarized over barcodes).} \item{normalize}{If \code{TRUE}, perform total count normalization before model fitting.} + \item{normalizeSize}{If normalizing, the target library size (default + is 10e6).} \item{block}{A vector giving the sample designations of the columns of \code{object}. The default, \code{NULL}, indicates that all columns are separate samples.} @@ -28,18 +31,25 @@ mpralm(object, design, aggregate = c("mean", "sum", "none"), normalize = TRUE, (\code{"indep_groups"}) or a paired mixed-model fit ((\code{"corr_groups"})) should be used.} \item{plot}{If \code{TRUE}, plot the mean-variance relationship.} + \item{endomorphic}{If \code{TRUE}, return the same class as the input, + i.e. an object of class \code{MPRASet}.} \item{\dots}{Further arguments to be passed to \code{lmFit} for obtaining residual standard deviations used in estimating the mean-variance relationship.} } \details{ -Using \code{method_type = "corr_groups"} uses the +Using \code{method_type = "corr_groups"} use the \code{duplicateCorrelation} function from the \code{limma} package to estimate the intra-replicate correlation of log-ratio values. } \value{ An object of class \code{MArrayLM} resulting from the \code{eBayes} function. + +If \code{endomorphic = TRUE}, then an \code{MPRASet} is returned, +with the output of \code{topTable} added to the \code{rowData}, +and the \code{MArrayLM} results added as an attribute +\code{"MArrayLM"}. } \references{ Myint, Leslie, Dimitrios G. Avramopoulos, Loyal A. Goff, and Kasper @@ -58,7 +68,7 @@ function. Bioinformatics 2005, 21 (9): 2067-75. \doi{10.1093/bioinformatics/bti270}. } \examples{ -data("mpraSetAggExample", package = "mpra") +data(mpraSetAggExample) design <- data.frame(intcpt = 1, episomal = grepl("MT", colnames(mpraSetAggExample))) mpralm_fit <- mpralm(object = mpraSetAggExample, design = design, diff --git a/man/normalize_counts.Rd b/man/normalize_counts.Rd index 12cd537..fd3ef79 100755 --- a/man/normalize_counts.Rd +++ b/man/normalize_counts.Rd @@ -5,10 +5,12 @@ Total count normalization of DNA and RNA counts. } \usage{ -normalize_counts(object, block = NULL) +normalize_counts(object, normalizeSize = 1e+07, block = NULL) } \arguments{ \item{object}{An object of class \code{MPRASet}.} + \item{normalizeSize}{A numeric value specifying the total count to which + all samples should be normalized. Default is \code{1e+07} (10 million).} \item{block}{A vector giving the sample designations of the columns of \code{object}. The default, \code{NULL}, indicates that all columns are separate samples.} From ad7d55c300c9a40c9ae245dd8ba99d0cfe651943 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 13:19:29 +0100 Subject: [PATCH 34/37] Update example data loading to specify package in documentation for mpralm and normalize_counts --- man/mpralm.Rd | 2 +- man/normalize_counts.Rd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/man/mpralm.Rd b/man/mpralm.Rd index 40b0e7c..19d380e 100755 --- a/man/mpralm.Rd +++ b/man/mpralm.Rd @@ -68,7 +68,7 @@ and the \code{MArrayLM} results added as an attribute Bioinformatics 2005, 21 (9): 2067-75. \doi{10.1093/bioinformatics/bti270}. } \examples{ -data(mpraSetAggExample) +data(mpraSetAggExample, package = "mpra") design <- data.frame(intcpt = 1, episomal = grepl("MT", colnames(mpraSetAggExample))) mpralm_fit <- mpralm(object = mpraSetAggExample, design = design, diff --git a/man/normalize_counts.Rd b/man/normalize_counts.Rd index fd3ef79..9aaee87 100755 --- a/man/normalize_counts.Rd +++ b/man/normalize_counts.Rd @@ -31,5 +31,5 @@ and RNA counts. } \examples{ data("mpraSetAggExample", package = "mpra") -mpraSetAggExample <- normalize_counts(mpraSetAggExample) +mpraSetAggExample <- normalize_counts(mpraSetAggExample, ) } From 0bbfa63e43206279f3c35d4a2c7fd7bbc1ef8fc2 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Fri, 27 Feb 2026 13:48:05 +0100 Subject: [PATCH 35/37] nice new readme --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 68f8b6e..5d9b46b 100755 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ +[![DOI](https://zenodo.org/badge/858995953.svg)](https://doi.org/10.5281/zenodo.18802316) +[![GitHub License](https://img.shields.io/github/license/kircherlab/BCalm)](https://github.com/kircherlab/BCalm/blob/master/LICENSE) +[![GitHub Release](https://img.shields.io/github/v/release/kircherlab/BCalm)](https://github.com/kircherlab/BCalm/releases/latest) +[![Bioconda Version](https://img.shields.io/conda/vn/bioconda/r-bcalm?label=bioconda)](https://bioconda.github.io/recipes/r-bcalm/README.html) +[![R CMD check](https://github.com/kircherlab/BCalm/actions/workflows/r-cmd-check.yml/badge.svg?branch=master)](https://github.com/kircherlab/BCalm/actions/workflows/r-cmd-check.yml) +[![GitHub Issues](https://img.shields.io/github/issues/kircherlab/BCalm)](https://github.com/kircherlab/BCalm/issues) +[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/kircherlab/BCalm)](https://github.com/kircherlab/BCalm/pulls) + # BCalm and analyze your MPRA data BCalm is a package that provides a modification of [the mpralm package](https://github.com/hansenlab/mpra/tree/master), an R package that provides tools for differential analysis in MPRA studies. From 651c2ab074ba5cece6637f6ca5a897d4cd8521fb Mon Sep 17 00:00:00 2001 From: Pia Keukeleire Date: Fri, 27 Feb 2026 16:12:13 +0100 Subject: [PATCH 36/37] set default plot to false --- R/fit.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/fit.R b/R/fit.R index 03c67da..6003534 100755 --- a/R/fit.R +++ b/R/fit.R @@ -1,4 +1,4 @@ -fit_elements <- function(object, normalize = TRUE, block = NULL, endomorphic = FALSE, normalizeSize = 1e9, ...) { +fit_elements <- function(object, normalize = TRUE, block = NULL, endomorphic = FALSE, normalizeSize = 1e9, plot=FALSE, ...) { if (!("endomorphic" %in% names(formals(mpralm))) && endomorphic) { warning( "The 'endomorphic' argument is not available in the version ", From c193868f6f0da9574142520773004f553dd771e4 Mon Sep 17 00:00:00 2001 From: Pia Keukeleire Date: Fri, 27 Feb 2026 16:23:17 +0100 Subject: [PATCH 37/37] update documentation --- man/fit_elements.Rd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/man/fit_elements.Rd b/man/fit_elements.Rd index a7acf3e..2048169 100644 --- a/man/fit_elements.Rd +++ b/man/fit_elements.Rd @@ -7,7 +7,7 @@ } \usage{ fit_elements(object, normalize = TRUE, block = NULL, endomorphic = FALSE, - normalizeSize = 1e9, ...) + normalizeSize = 1e9, plot = FALSE, ...) } \arguments{ \item{object}{An MPRASet object containing DNA and RNA counts.} @@ -15,6 +15,7 @@ fit_elements(object, normalize = TRUE, block = NULL, endomorphic = FALSE, \item{block}{Optional vector or factor specifying replicate blocks.} \item{endomorphic}{Logical indicating whether to return an MPRASet result.} \item{normalizeSize}{Library size for normalization.} + \item{plot}{Logical indicating whether to plot the voom precision weights.} \item{...}{Additional arguments passed to \code{mpralm}.} } \value{