In this vignette we present the basic features of Glimma. Glimma is an interactive R widget for creating plots for differential expression analysis, created using the Vega and htmlwidgets frameworks. The created plots can be embedded in R Markdown, or exported as standalone HTML documents. The data presented here is slightly modified from the RNAseq123 workflow and only a single contrast has been performed for simplicity. We can use either limma or edgeR to fit the models and they both share upstream steps in common.
To begin, the DGEList object from the workflow has been included with the package as internal data.
The multidimensional scaling (MDS) plot is frequently used to explore differences in samples. When data has been MDS transformed, the first two dimensions explain the greatest variance between samples, and the amount of variance decreases monotonically with increasing dimension.
The Glimma MDS plot contains two main components:
The Glimma MDS allows different dimensions to be plotted against each
other, and for the colours of the points to be changed based on
predefined factors. The grouping variables are taken from the
samples
component of DGEList
objects used in
limma
and edgeR
.
In the plot above, try:
scale_by
field.colour_by
field.shape_by
field.colourscheme
field.x_axis
and y_axis
fields.Adjusting plot size
Usage:
glimmaMDS(dge, width=1200, height=1200)
Users can specify the width and height of the MDS plot widget in pixels. The default width and height are 900 and 500 respectively.
Continuous colour schemes
Usage:
glimmaMDS(dge, continuous.color=TRUE)
This argument specifies that continuous colour schemes should be used, which can be useful for colouring samples by their expression for a particular gene.
Custom experimental groups
Usage:
glimmaMDS(dge, groups=[vector or data frame])
This allows the user to change the associated sample information such
as experimental groups. This information is displayed in mouseover
tooltips and can be used to adjust the plot using scale_by
,
colour_by
and shape_by
fields.
The MA plot is a visualisation that plots the log-fold-change between experimental groups (M) against the average expression across all the samples (A) for each gene.
The Glimma MA plot contains two main components:
The second plot shows gene expression from the last selected sample, which can be selected from the table or directly from the summary plot.
To create this plot we need to run differential expression (DE)
analysis for our data using either the limma
package or the
edgeR
package (both are shown below). First, we load in
design and contrast matrices generated from the RNAseq123 workflow.
design <- readRDS(
system.file("RNAseq123/design.rds", package = "Glimma"))
contr.matrix <- readRDS(
system.file("RNAseq123/contr.matrix.rds", package = "Glimma"))
We fit our DE analysis using limma
to give us an object
that contains test statistics for each gene.
Alternatively, we can fit our DE analysis using
edgeR
.
dge <- estimateDisp(dge, design)
gfit <- glmFit(dge, design)
glrt <- glmLRT(gfit, design, contrast = contr.matrix)
The MA plot can then be created using the fitted object containing
the statistics about the genes (either efit
or
glrt
), and the dge
object containing raw
counts and information about the samples. We use results from
limma
in the following example:
In the plot above, try:
max_y_axis
field.
Adjusting plot size
Usage:
glimmaMA(efit, dge=dge, width=1200, height=1200)
Users can specify the width and height of the MA plot widget in pixels. The default width and height are both 920px.
Changing DE status colouring
Usage:
glimmaMA(efit, dge=dge, status.cols=c("blue", "grey", "red")
Users can customise the colours associated with the differential
expression status of a gene using the status.cols
argument.
A vector of length three should be passed in, where each element must be
a valid CSS colour string.
Changing sample colours in expression plot
Usage:
glimmaMA(efit, dge=dge, sample.cols=c("yellow", "yellow", "yellow", "red", "red", "red", "purple", "purple", "purple")
Users can provide a vector of valid CSS colour strings of length
ncol(dge$counts)
or ncol(counts)
which
correspond to sample colours. The colours used in the example here
reflect the sequencing lane.
Overriding counts and groups
Usage:
glimmaMA(efit, counts=counts, groups=groups)
Glimma extracts counts and experimental data from the
dge
argument for limma and edgeR data types. However, users
can optionally supply their own counts and experimental groups using the
counts
and groups
arguments.
Transforming counts values
Usage:
glimmaMA(efit, dge=dge, transform.counts="rpkm")
The transform.counts
argument allows users to choose
between strategies for transforming counts data displayed on the
expression plot. The default argument is "logcpm"
which
log-transforms counts using edgeR::cpm(counts, log=TRUE)
.
Other options are “rpkm"
for
edgeR::rpkm(counts)
, cpm
for
edgeR::cpm(counts)
and none
for no
transformation.
Changing displayed columns in gene
annotation The gene annotations are pulled from the
DGEList
object by default. This can be overwritten by
providing a different table of annotations via the anno
argument, the substitute annotations must have the same number of rows
as the counts matrix and the genes must be in the same order as in the
counts.
Some annotations may contain too many columsn to be sensibly
displayed. The display.columns
argument can be used to
control the columns displayed in the plot. A vector of column names are
to be provided for selecting the columns that will be displayed in the
interactive plot.
A popular alternative to the MA plot for plotting the output of
differential expression analysis the the volcano plot. This can be
produced using the glimmaVolcano
function and the same
arguments as the glimmaMA
.
The plots created are automatically embedded into Rmarkdown reports,
but having many interactive plots can significantly slow down the page.
It is instead recommended to save the plots and link to them via
markdown hyperlinks. Plots can be saved either by providing the
html
argument a filename, or by using
htmlwidgets::saveWidget
, which also provides further
customisation options. Let us now create a html file named
“ma-plot.html” in our working directory.
sessionInfo()
#> R version 4.4.1 (2024-06-14)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.1 LTS
#>
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
#>
#> locale:
#> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
#> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
#> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
#> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
#> [9] LC_ADDRESS=C LC_TELEPHONE=C
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: Etc/UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats4 stats graphics grDevices utils datasets methods
#> [8] base
#>
#> other attached packages:
#> [1] DESeq2_1.47.0 SummarizedExperiment_1.35.5
#> [3] Biobase_2.67.0 MatrixGenerics_1.17.1
#> [5] matrixStats_1.4.1 GenomicRanges_1.57.2
#> [7] GenomeInfoDb_1.41.2 IRanges_2.39.2
#> [9] S4Vectors_0.43.2 BiocGenerics_0.53.0
#> [11] edgeR_4.3.21 limma_3.61.12
#> [13] Glimma_2.17.0 rmarkdown_2.28
#>
#> loaded via a namespace (and not attached):
#> [1] gtable_0.3.6 xfun_0.48 bslib_0.8.0
#> [4] ggplot2_3.5.1 htmlwidgets_1.6.4 lattice_0.22-6
#> [7] vctrs_0.6.5 tools_4.4.1 generics_0.1.3
#> [10] parallel_4.4.1 tibble_3.2.1 fansi_1.0.6
#> [13] pkgconfig_2.0.3 Matrix_1.7-1 lifecycle_1.0.4
#> [16] GenomeInfoDbData_1.2.13 compiler_4.4.1 statmod_1.5.0
#> [19] munsell_0.5.1 codetools_0.2-20 htmltools_0.5.8.1
#> [22] sys_3.4.3 buildtools_1.0.0 sass_0.4.9
#> [25] yaml_2.3.10 pillar_1.9.0 crayon_1.5.3
#> [28] jquerylib_0.1.4 BiocParallel_1.41.0 DelayedArray_0.31.14
#> [31] cachem_1.1.0 abind_1.4-8 tidyselect_1.2.1
#> [34] locfit_1.5-9.10 digest_0.6.37 dplyr_1.1.4
#> [37] maketools_1.3.1 fastmap_1.2.0 grid_4.4.1
#> [40] colorspace_2.1-1 cli_3.6.3 SparseArray_1.5.45
#> [43] magrittr_2.0.3 S4Arrays_1.5.11 utf8_1.2.4
#> [46] scales_1.3.0 UCSC.utils_1.1.0 XVector_0.45.0
#> [49] httr_1.4.7 evaluate_1.0.1 knitr_1.48
#> [52] rlang_1.1.4 Rcpp_1.0.13 glue_1.8.0
#> [55] jsonlite_1.8.9 R6_2.5.1 zlibbioc_1.51.2