knitr::opts_knit$set(global.device = TRUE)
This lightning talk will attempt to use a toy dataset to generate covariate-matched, null-hypothesis GRanges with nullranges::matchRanges() and then visualize the results using the BentoBox framework.
For this example lets use a utility function to create a simulated dataset:
set.seed(123) x <- Bioc2021::makeExampleMatchedDataSet(type = "GRanges") x
This creates a GRanges object with random ranges and 3 metadata colums (feature1, color, and length) that describe "features" of each range.
Let's demonstrate generating a set of matched ranges by finding ranges that are FALSE for feature1 but have the same distributions of color and length.
Our focal set of interest is where feature1 is TRUE, and pool is all other ranges (where feature1 is FALSE):
focal <- x[x$feature1] pool <- x[!x$feature1]
We can use nullranges::matchRanges() to select a subset from pool that is distributionally matched in color and range length:
library(nullranges) mgr <- matchRanges(focal = focal, pool = pool, covar = ~color + length, method = 'stratified', replace = FALSE) mgr
overview can show how successful our matching was:
overview(mgr)
Defining the region to plot:
library(BentoBox) region <- bbParams(chrom = "chr1", chromstart = 1, chromend = 1000)
We can visualize these ranges by creating a BentoBox page:
bbPageCreate(width = 8.5, height = 6.5, default.units = 'inches')
Visualize the pool GRanges:
poolSet <- bbPlotRanges(data = pool, params = region, x = 1, y = 1, width = 2.5, height = 2.5, fill = pool$color) bbAnnoGenomeLabel(plot = poolSet, x = 1, y = 3.55) bbPlotText(label = "Pool Set", x = 2.25, y = 0.9, just = c("center", "bottom"), fontcolor = "#33A02C", fontface = "bold", fontfamily = 'mono')
Visualize the focal GRanges of interest:
focalSet <- bbPlotRanges(data = focal, params = region, x = 5, y = 1, width = 2.5, height = 1, fill = focal$color) bbAnnoGenomeLabel(plot = focalSet, x = 5, y = 2.05) bbPlotText(label = "Focal Set", x = 6.25, y = 0.9, just = c("center", "bottom"), fontcolor = "#1F78B4", fontface = "bold", fontfamily = 'mono')
And finally the matched GRanges:
## Matched set matchedSet <- bbPlotRanges(data = mgr, params = region, x = 5, y = 2.5, width = 2.5, height = 1, fill = mgr$color) bbAnnoGenomeLabel(plot = matchedSet, x = 5, y = 3.55) bbPlotText(label = "Matched Set", x = 6.25, y = 2.75, just = c("center", "bottom"), fontcolor = "#A6CEE3", fontface = "bold", fontfamily = 'mono')
Below our GRanges, we can use BentoBox to place ggplots created from the nullranges plotPropensity() and plotCovariate() functions.
First lets plot propensity scores:
library(ggplot2) smallText <- theme(legend.title = element_text(size=8), legend.text=element_text(size=8), title = element_text(size=8), axis.title.x = element_text(size=8), axis.title.y = element_text(size=8)) ## Plot propensity scores ggplot in BentoBox propensityPlot <- plotPropensity(mgr, sets=c('f','m','p')) + smallText + theme(legend.key.size = unit(0.5, 'lines'), title = element_blank()) bbPlotGG(plot = propensityPlot, x = 1, y = 4.5, width = 2.5, height = 1.5, just = c("left", "top")) ## Text labels bbPlotText(label = "plotPropensity()", x = 1.10, y = 4.24, just = c("left", "bottom"), fontface = "bold", fontfamily = 'mono') bbPlotText(label = "~color + length", x = 1.25, y = 4.5, just = c("left", "bottom"), fontsize = 10, fontfamily = "mono")
plotting color and length covariates:
## Plot "color" covariate covColor <- plotCovariate(x=mgr, covar=covariates(mgr)[1], sets=c('f','m','p')) + smallText + theme(legend.text = element_blank(), legend.position = 'none') bbPlotGG(plot = covColor, x = 3.50, y = 4.5, width = 1.8, height = 1.5, just = c("left", "top")) ## Plot "length" covariate covLength <- plotCovariate(x=mgr, covar=covariates(mgr)[2], sets=c('f','m','p'))+ smallText + theme(legend.key.size = unit(0.5, 'lines')) bbPlotGG(plot = covLength, x = 5.30, y = 4.5, width = 2.75, height = 1.5, just = c("left", "top")) ## Text labels bbPlotText(label = "plotCovariate()", x = 3.75, y = 4.24, just = c("left", "bottom"), fontface = "bold", fontfamily = "mono") bbPlotText(label = covariates(mgr), x = c(4, 5.9), y = 4.5, just = c("left", "bottom"), fontsize = 10, fontfamily = "mono")
When the plot is finished you can remove the page guides:
bbPageGuideHide()
And now your plot is publication-ready!
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.