# derfinder quick start guide

Leonardo Collado-Torres1,2*

1Lieber Institute for Brain Development, Johns Hopkins Medical Campus
2Center for Computational Biology, Johns Hopkins University

*lcolladotor@gmail.com

#### 15 April 2025

#### Package

derfinder 1.42.0

# 1 Basics

## 1.1 Install derfinder

`R` is an open-source statistical environment which can be easily modified to enhance its functionality via packages. derfinder is a `R` package available via the Bioconductor repository for packages. `R` can be installed on any operating system from CRAN after which you can install derfinder by using the following commands in your `R` session:

    if (!requireNamespace("BiocManager", quietly = TRUE)) {
        install.packages("BiocManager")
    }

    BiocManager::install("derfinder")

    ## Check that you have a valid Bioconductor installation
    BiocManager::valid()

## 1.2 Required knowledge

derfinder is based on many other packages and in particular in those that have implemented the infrastructure needed for dealing with RNA-seq data. That is, packages like Rsamtools, GenomicAlignments and rtracklayer that allow you to import the data. A derfinder user is not expected to deal with those packages directly but will need to be familiar with GenomicRanges to understand the results derfinder generates. It might also prove to be highly beneficial to check the BiocParallel package for performing parallel computations.

If you are asking yourself the question “Where do I start using Bioconductor?” you might be interested in this blog post.

## 1.3 Asking for help

As package developers, we try to explain clearly how to use our packages and in which order to use the functions. But `R` and `Bioconductor` have a steep learning curve so it is critical to learn where to ask for help. The blog post quoted above mentions some but we would like to highlight the Bioconductor support site as the main resource for getting help: remember to use the `derfinder` tag and check the older posts. Other alternatives are available such as creating GitHub issues and tweeting. However, please note that if you want to receive help you should adhere to the posting guidelines. It is particularly critical that you provide a small reproducible example and your session information so package developers can track down the source of the error.

We would like to highlight the derfinder user Jessica Hekman. She has used derfinder with non-human data, and in the process of doing so discovered some small bugs or sections of the documentation that were not clear.

## 1.4 Citing derfinder

We hope that derfinder will be useful for your research. Please use the following information to cite the package and the overall approach. Thank you!

    ## Citation info
    citation("derfinder")

    ## To cite package 'derfinder' in publications use:
    ##
    ##   Collado-Torres L, Nellore A, Frazee AC, Wilks C, Love MI, Langmead B,
    ##   Irizarry RA, Leek JT, Jaffe AE (2017). "Flexible expressed region
    ##   analysis for RNA-seq with derfinder." _Nucl. Acids Res._.
    ##   doi:10.1093/nar/gkw852 <https://doi.org/10.1093/nar/gkw852>,
    ##   <http://nar.oxfordjournals.org/content/early/2016/09/29/nar.gkw852>.
    ##
    ##   Frazee AC, Sabunciyan S, Hansen KD, Irizarry RA, Leek JT (2014).
    ##   "Differential expression analysis of RNA-seq data at single-base
    ##   resolution." _Biostatistics_, *15 (3)*, 413-426.
    ##   doi:10.1093/biostatistics/kxt053
    ##   <https://doi.org/10.1093/biostatistics/kxt053>,
    ##   <http://biostatistics.oxfordjournals.org/content/15/3/413.long>.
    ##
    ##   Collado-Torres L, Jaffe AE, Leek JT (2017). _derfinder:
    ##   Annotation-agnostic differential expression analysis of RNA-seq data
    ##   at base-pair resolution via the DER Finder approach_.
    ##   doi:10.18129/B9.bioc.derfinder
    ##   <https://doi.org/10.18129/B9.bioc.derfinder>,
    ##   https://github.com/lcolladotor/derfinder - R package version 1.42.0,
    ##   <http://www.bioconductor.org/packages/derfinder>.
    ##
    ## To see these entries in BibTeX format, use 'print(<citation>,
    ## bibtex=TRUE)', 'toBibtex(.)', or set
    ## 'options(citation.bibtex.max=999)'.

# 2 Quick start to using to derfinder

Here is a very quick example of a DER Finder analysis. This analysis is explained in more detail later on in this document.

    ## Load libraries
    library("derfinder")
    library("derfinderData")
    library("GenomicRanges")

    ## Determine the files to use and fix the names
    files <- rawFiles(system.file("extdata", "AMY", package = "derfinderData"),
        samplepatt = "bw", fileterm = NULL
    )
    names(files) <- gsub(".bw", "", names(files))

    ## Load the data from disk -- On Windows you have to load data from Bam files
    fullCov <- fullCoverage(files = files, chrs = "chr21", verbose = FALSE)

    ## Get the region matrix of Expressed Regions (ERs)
    regionMat <- regionMatrix(fullCov, cutoff = 30, L = 76, verbose = FALSE)

    ## Get pheno table
    pheno <- subset(brainspanPheno, structure_acronym == "AMY")

    ## Identify which ERs are differentially expressed, that is, find the DERs
    library("DESeq2")

    ## Round matrix
    counts <- round(regionMat$chr21$coverageMatrix)

    ## Round matrix and specify design
    dse <- DESeqDataSetFromMatrix(counts, pheno, ~ group + gender)

    ## Perform DE analysis
    dse <- DESeq(dse, test = "LRT", reduced = ~gender, fitType = "local")

    ## Extract results
    mcols(regionMat$chr21$regions) <- c(mcols(regionMat$chr21$regions), results(dse))

    ## Save info in an object with a shorter name
    ers <- regionMat$chr21$regions
    ers

# 3 Introduction

derfinder is an R package that implements the DER Finder approach (Frazee, Sabunciyan, Hansen, Irizarry, and Leek, 2014) for RNA-seq data. Briefly, this approach is an alternative to feature-counting and transcript assembly. The basic idea is to identify contiguous base-pairs in the genome that present differential expression signal. These base-pairs are grouped into _d_ifferentially _e_xpressed _r_regions (DERs). This approach is annotation-agnostic which is a feature you might be interested in. In particular, derfinder contains functions that allow you to identify DERs via two alternative methods. You can find more details on the full derfinder users guide.

# 4 Sample DER Finder analysis

This is a brief overview of what a DER Finder analysis looks like. In particular, here we will be identifying expressed regions (ERs) without relying on annotation. Next, we’ll identify candidate differentially expressed regions (DERs). Finally, we’ll compare the DERs with known annotation features.

We first load the required packages.

    ## Load libraries
    library("derfinder")
    library("derfinderData")
    library("GenomicRanges")

Next, we need to locate the chromosome 21 coverage files for a set of 12 samples. These samples are a small subset from the BrainSpan Atlas of the Human Brain (BrainSpan, 2011) publicly available data. The function `rawFiles()` helps us in locating these files.

    ## Determine the files to use and fix the names
    files <- rawFiles(system.file("extdata", "AMY", package = "derfinderData"),
        samplepatt = "bw", fileterm = NULL
    )
    names(files) <- gsub(".bw", "", names(files))

Next, we can load the full coverage data into memory using the `fullCoverage()` function. Note that the BrainSpan data is already normalized by the total number of mapped reads in each sample. However, that won’t be the case with most data sets in which case you might want to use the `totalMapped` and `targetSize` arguments. The function `getTotalMapped()` will be helpful to get this information.

    ## Load the data from disk
    fullCov <- fullCoverage(
        files = files, chrs = "chr21", verbose = FALSE,
        totalMapped = rep(1, length(files)), targetSize = 1
    )

Now that we have the data, we can identify expressed regions (ERs) by using a cutoff of 30 on the base-level mean coverage from these 12 samples. Once the regions have been identified, we can calculate a coverage matrix with one row per ER and one column per sample (12 in this case). For doing this calculation we need to know the length of the sequence reads, which in this study were 76 bp long.

    ## Get the region matrix of Expressed Regions (ERs)
    regionMat <- regionMatrix(fullCov, cutoff = 30, L = 76, verbose = FALSE)

`regionMatrix()` returns a list of elements, each with three pieces of output. The actual ERs are arranged in a `GRanges` object named `regions`.

    ## regions output
    regionMat$chr21$regions

    ## GRanges object with 45 ranges and 6 metadata columns:
    ##      seqnames            ranges strand |     value      area indexStart
    ##         <Rle>         <IRanges>  <Rle> | <numeric> <numeric>  <integer>
    ##    1    chr21   9827018-9827582      * |  313.6717 177224.53          1
    ##    2    chr21 15457301-15457438      * |  215.0846  29681.68        566
    ##    3    chr21 20230140-20230192      * |   38.8325   2058.12        704
    ##    4    chr21 20230445-20230505      * |   41.3245   2520.80        757
    ##    5    chr21 27253318-27253543      * |   34.9131   7890.37        818
    ##   ..      ...               ...    ... .       ...       ...        ...
    ##   41    chr21 33039644-33039688      * |   34.4705 1551.1742       2180
    ##   42    chr21 33040784-33040798      * |   32.1342  482.0133       2225
    ##   43    chr21          33040890      * |   30.0925   30.0925       2240
    ##   44    chr21 33040900-33040901      * |   30.1208   60.2417       2241
    ##   45    chr21 48019401-48019414      * |   31.1489  436.0850       2243
    ##       indexEnd cluster clusterL
    ##      <integer>   <Rle>    <Rle>
    ##    1       565       1      565
    ##    2       703       2      138
    ##    3       756       3      366
    ##    4       817       3      366
    ##    5      1043       4      765
    ##   ..       ...     ...      ...
    ##   41      2224      17       45
    ##   42      2239      18      118
    ##   43      2240      18      118
    ##   44      2242      18      118
    ##   45      2256      19       14
    ##   -------
    ##   seqinfo: 1 sequence from an unspecified genome

`bpCoverage` is the base-level coverage list which can then be used for plotting.

    ## Base-level coverage matrices for each of the regions
    ## Useful for plotting
    lapply(regionMat$chr21$bpCoverage[1:2], head, n = 2)

    ## $`1`
    ##   HSB97 HSB92 HSB178 HSB159 HSB153 HSB113 HSB130 HSB136 HSB126 HSB145 HSB123
    ## 1 36.54 47.40  15.71   3.52  16.71  93.20   5.62  98.34  28.22   5.88   3.32
    ## 2 51.42 65.04  29.35   5.83  30.53 124.76  11.32 199.28  63.68  10.39   7.25
    ##   HSB135
    ## 1 185.17
    ## 2 374.85
    ##
    ## $`2`
    ##     HSB97 HSB92 HSB178 HSB159 HSB153 HSB113 HSB130 HSB136 HSB126 HSB145 HSB123
    ## 566 22.21 13.95   23.2   4.97  38.61  45.59  34.75 104.21  15.92  19.87   7.94
    ## 567 22.21 13.95   23.2   4.97  38.65  45.59  35.15 104.30  15.92  19.87   7.94
    ##     HSB135
    ## 566 141.61
    ## 567 141.64

    ## Check dimensions. First region is 565 long, second one is 138 bp long.
    ## The columns match the number of samples (12 in this case).
    lapply(regionMat$chr21$bpCoverage[1:2], dim)

    ## $`1`
    ## [1] 565  12
    ##
    ## $`2`
    ## [1] 138  12

The end result of the coverage matrix is shown below. Note that the coverage has been adjusted for read length. Because reads might not fully align inside a given region, the numbers are generally not integers but can be rounded if needed.

    ## Dimensions of the coverage matrix
    dim(regionMat$chr21$coverageMatrix)

    ## [1] 45 12

    ## Coverage for each region. This matrix can then be used with limma or other pkgs
    head(regionMat$chr21$coverageMatrix)

    ##          HSB97       HSB92      HSB178     HSB159       HSB153       HSB113
    ## 1 1325.9622371 1168.519079 1407.288552 297.939342 1461.2986829 3653.1093346
    ## 2  200.7834228  127.543553  193.695657  67.940131  313.8513139  333.3740816
    ## 3   20.4623685   23.758816   33.127368  28.145395   52.8756585   35.3828948
    ## 4   28.2011836   29.546183   33.576974  31.244343   51.6146040   42.3398681
    ## 5   35.5428946  100.085790   97.151316  78.069605   36.3046051   77.7402631
    ## 6    0.3956579    1.136447    1.139079   1.000132    0.4221053    0.7988158
    ##        HSB130      HSB136      HSB126      HSB145     HSB123      HSB135
    ## 1 1106.722895 5570.221054 1397.068687 1330.158818 277.072106 8987.460401
    ## 2  267.354342 1162.313418  463.909476  257.114210  99.987237 1198.713552
    ## 3   23.483947   17.168947   30.725394   22.895921  20.153553   16.786842
    ## 4   24.724736   19.309606   41.094474   33.802632  29.931579   32.634080
    ## 5  171.861974   93.503158  115.059342   90.950526 168.939342  180.638684
    ## 6    2.231053    1.007895    1.473421    1.171316   1.770263    1.697368

We can then use the coverage matrix and packages such as limma, DESeq2 or edgeR to identify which ERs are differentially expressed. Here we’ll use DESeq2 for which we need some phenotype data.

    ## Get pheno table
    pheno <- subset(brainspanPheno, structure_acronym == "AMY")

Now we can identify the DERs using a rounded version of the coverage matrix.

    ## Identify which ERs are differentially expressed, that is, find the DERs
    library("DESeq2")

    ## Loading required package: SummarizedExperiment

    ## Loading required package: MatrixGenerics

    ## Loading required package: matrixStats

    ##
    ## Attaching package: 'MatrixGenerics'

    ## The following objects are masked from 'package:matrixStats':
    ##
    ##     colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,
    ##     colCounts, colCummaxs, colCummins, colCumprods, colCumsums,
    ##     colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,
    ##     colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,
    ##     colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,
    ##     colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,
    ##     colWeightedMeans, colWeightedMedians, colWeightedSds,
    ##     colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,
    ##     rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,
    ##     rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,
    ##     rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,
    ##     rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,
    ##     rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,
    ##     rowWeightedMads, rowWeightedMeans, rowWeightedMedians,
    ##     rowWeightedSds, rowWeightedVars

    ## Loading required package: Biobase

    ## Welcome to Bioconductor
    ##
    ##     Vignettes contain introductory material; view with
    ##     'browseVignettes()'. To cite Bioconductor, see
    ##     'citation("Biobase")', and for packages 'citation("pkgname")'.

    ##
    ## Attaching package: 'Biobase'

    ## The following object is masked from 'package:MatrixGenerics':
    ##
    ##     rowMedians

    ## The following objects are masked from 'package:matrixStats':
    ##
    ##     anyMissing, rowMedians

    ## Round matrix
    counts <- round(regionMat$chr21$coverageMatrix)

    ## Round matrix and specify design
    dse <- DESeqDataSetFromMatrix(counts, pheno, ~ group + gender)

    ## converting counts to integer mode

    ## Perform DE analysis
    dse <- DESeq(dse, test = "LRT", reduced = ~gender, fitType = "local")

    ## estimating size factors

    ## estimating dispersions

    ## gene-wise dispersion estimates

    ## mean-dispersion relationship

    ## final dispersion estimates

    ## fitting model and testing

    ## Extract results
    mcols(regionMat$chr21$regions) <- c(
        mcols(regionMat$chr21$regions),
        results(dse)
    )

    ## Save info in an object with a shorter name
    ers <- regionMat$chr21$regions
    ers

    ## GRanges object with 45 ranges and 12 metadata columns:
    ##      seqnames            ranges strand |     value      area indexStart
    ##         <Rle>         <IRanges>  <Rle> | <numeric> <numeric>  <integer>
    ##    1    chr21   9827018-9827582      * |  313.6717 177224.53          1
    ##    2    chr21 15457301-15457438      * |  215.0846  29681.68        566
    ##    3    chr21 20230140-20230192      * |   38.8325   2058.12        704
    ##    4    chr21 20230445-20230505      * |   41.3245   2520.80        757
    ##    5    chr21 27253318-27253543      * |   34.9131   7890.37        818
    ##   ..      ...               ...    ... .       ...       ...        ...
    ##   41    chr21 33039644-33039688      * |   34.4705 1551.1742       2180
    ##   42    chr21 33040784-33040798      * |   32.1342  482.0133       2225
    ##   43    chr21          33040890      * |   30.0925   30.0925       2240
    ##   44    chr21 33040900-33040901      * |   30.1208   60.2417       2241
    ##   45    chr21 48019401-48019414      * |   31.1489  436.0850       2243
    ##       indexEnd cluster clusterL  baseMean log2FoldChange     lfcSE      stat
    ##      <integer>   <Rle>    <Rle> <numeric>      <numeric> <numeric> <numeric>
    ##    1       565       1      565 2846.2872     -1.3012037  0.900114   1.18752
    ##    2       703       2      138  451.5196     -1.0635132  0.787523   2.66981
    ##    3       756       3      366   29.5781     -0.5364640  0.307665  16.32623
    ##    4       817       3      366   36.0603     -0.6256137  0.294302   8.96934
    ##    5      1043       4      765  101.6468     -0.0887821  0.344721   2.15124
    ##   ..       ...     ...      ...       ...            ...       ...       ...
    ##   41      2224      17       45 20.782035      -0.654517  0.326476  1.201039
    ##   42      2239      18      118  6.410542      -0.570137  0.475008  0.454718
    ##   43      2240      18      118  0.129717      -0.745914  3.116540 -0.033322
    ##   44      2242      18      118  0.702291      -0.646216  3.045577  0.260501
    ##   45      2256      19       14  5.293293      -0.320977  0.744647 29.167078
    ##           pvalue       padj
    ##        <numeric>  <numeric>
    ##    1 2.75831e-01 1.00000000
    ##    2 1.02268e-01 0.92041575
    ##    3 5.33207e-05 0.00119972
    ##    4 2.74547e-03 0.04118210
    ##    5 1.42455e-01 0.94756226
    ##   ..         ...        ...
    ##   41 2.73114e-01 1.0000e+00
    ##   42 5.00103e-01 1.0000e+00
    ##   43 1.00000e+00 1.0000e+00
    ##   44 6.09776e-01 1.0000e+00
    ##   45 6.63979e-08 2.9879e-06
    ##   -------
    ##   seqinfo: 1 sequence from an unspecified genome

We can then compare the DERs against known annotation to see which DERs overlap known exons, introns, or intergenic regions. A way to visualize this information is via a Venn diagram which we can create using `vennRegions()` from the derfinderPlot package as shown in Figure 1.

    ## Find overlaps between regions and summarized genomic annotation
    annoRegs <- annotateRegions(ers, genomicState$fullGenome, verbose = FALSE)

    library("derfinderPlot")

    ## Registered S3 method overwritten by 'GGally':
    ##   method from
    ##   +.gg   ggplot2

    venn <- vennRegions(annoRegs,
        counts.col = "blue",
        main = "Venn diagram using TxDb.Hsapiens.UCSC.hg19.knownGene annotation"
    )

Figure 1: Venn diagram showing ERs by annotation class

We can also identify the nearest annotated feature. In this case, we’ll look for the nearest known gene from the UCSC hg19 annotation.

    ## Load database of interest
    library("TxDb.Hsapiens.UCSC.hg19.knownGene")

    ## Loading required package: GenomicFeatures

    ## Loading required package: AnnotationDbi

    txdb <- keepSeqlevels(TxDb.Hsapiens.UCSC.hg19.knownGene, "chr21")

    ## Find nearest feature
    library("bumphunter")

    ## Loading required package: foreach

    ## Loading required package: iterators

    ## Loading required package: parallel

    ## Loading required package: locfit

    ## locfit 1.5-9.12   2025-03-05

    genes <- annotateTranscripts(txdb)

    ## No annotationPackage supplied. Trying org.Hs.eg.db.

    ## Loading required package: org.Hs.eg.db

    ##

    ## Getting TSS and TSE.

    ## Getting CSS and CSE.

    ## Getting exons.

    ## Annotating genes.

    annotation <- matchGenes(ers, subject = genes)

    ## Restore seqlevels
    txdb <- restoreSeqlevels(txdb)

    ## View annotation results
    head(annotation)

    ##       name
    ## 1     <NA>
    ## 2     LIPI
    ## 3 TMPRSS15
    ## 4 TMPRSS15
    ## 5      APP
    ## 6      APP
    ##                                                                                                                                                                                                                                                                                                                                                                                                                  annotation
    ## 1                                                                                                                                                                                                                                                                                                                                                                                                                      <NA>
    ## 2                                                                                                                                                                             NM_001302998 NM_001302999 NM_001303000 NM_001303001 NM_001379565 NM_001379566 NM_145317 NM_198996 NP_001289927 NP_001289928 NP_001289929 NP_001289930 NP_001366494 NP_001366495 NP_945347 XM_006723965 XM_054324334 XP_006724028 XP_054180309
    ## 3 NM_001428056 NM_001428057 NM_002772 NP_001414985 NP_001414986 NP_002763 XM_011529655 XM_011529656 XM_011529658 XM_047440912 XM_047440913 XM_054324693 XM_054324694 XM_054324695 XM_054324696 XM_054324697 XM_054324698 XM_054324700 XM_054324701 XP_011527957 XP_011527958 XP_011527960 XP_047296868 XP_047296869 XP_054180668 XP_054180669 XP_054180670 XP_054180671 XP_054180672 XP_054180673 XP_054180675 XP_054180676
    ## 4 NM_001428056 NM_001428057 NM_002772 NP_001414985 NP_001414986 NP_002763 XM_011529655 XM_011529656 XM_011529658 XM_047440912 XM_047440913 XM_054324693 XM_054324694 XM_054324695 XM_054324696 XM_054324697 XM_054324698 XM_054324700 XM_054324701 XP_011527957 XP_011527958 XP_011527960 XP_047296868 XP_047296869 XP_054180668 XP_054180669 XP_054180670 XP_054180671 XP_054180672 XP_054180673 XP_054180675 XP_054180676
    ## 5                                                                                                                                               NM_000484 NM_001136016 NM_001136129 NM_001136130 NM_001136131 NM_001204301 NM_001204302 NM_001204303 NM_001385253 NM_201413 NM_201414 NP_000475 NP_001129488 NP_001129601 NP_001129602 NP_001129603 NP_001191230 NP_001191231 NP_001191232 NP_001372182 NP_958816 NP_958817
    ## 6                                                                                                                                               NM_000484 NM_001136016 NM_001136129 NM_001136130 NM_001136131 NM_001204301 NM_001204302 NM_001204303 NM_001385253 NM_201413 NM_201414 NP_000475 NP_001129488 NP_001129601 NP_001129602 NP_001129603 NP_001191230 NP_001191231 NP_001191232 NP_001372182 NP_958816 NP_958817
    ##   description      region distance   subregion insideDistance exonnumber nexons
    ## 1 close to 3' close to 3'      815        <NA>             NA         NA      1
    ## 2  downstream  downstream   125774        <NA>             NA         NA      8
    ## 3    upstream    upstream   454170        <NA>             NA         NA     25
    ## 4    upstream    upstream   454475        <NA>             NA         NA     25
    ## 5 inside exon      inside   289903 inside exon              0         16     16
    ## 6 inside exon      inside   289899 inside exon              0         16     16
    ##     UTR strand  geneL codingL    Geneid subjectHits
    ## 1  <NA>      +     60      NA 100500815          15
    ## 2  <NA>      - 102077  101886    149998         149
    ## 3  <NA>      - 134537  133653      5651         579
    ## 4  <NA>      - 134537  133653      5651         579
    ## 5 3'UTR      - 290585  230434       351         354
    ## 6 3'UTR      - 290585  230434       351         354

    ## You can use derfinderPlot::plotOverview() to visualize this information

We can check the base-level coverage information for some of our DERs. In this example we do so for the first 5 ERs (Figures ??, ??, ??, ??, ??).

    ## Extract the region coverage
    regionCov <- regionMat$chr21$bpCoverage
    plotRegionCoverage(
        regions = ers, regionCoverage = regionCov,
        groupInfo = pheno$group, nearestAnnotation = annotation,
        annotatedRegions = annoRegs, whichRegions = seq_len(5), txdb = txdb,
        scalefac = 1, ask = FALSE, verbose = FALSE
    )

Figure 2: Base-pair resolution plot of differentially expressed region 1

Figure 3: Base-pair resolution plot of differentially expressed region 2

Figure 4: Base-pair resolution plot of differentially expressed region 3

Figure 5: Base-pair resolution plot of differentially expressed region 4

Figure 6: Base-pair resolution plot of differentially expressed region 5

You can then use the regionReport package to generate interactive HTML reports exploring the results.

If you are interested in using derfinder we recommend checking the derfinder users guide and good luck with your analyses!

# 5 Reproducibility

This package was made possible thanks to:

- R (R Core Team, 2025)
- AnnotationDbi (Pagès, Carlson, Falcon, and Li, 2017)
- BiocParallel (Morgan, Wang, Obenchain, Lang, Thompson, and Turaga, 2025)
- bumphunter (Jaffe, Murakami, Lee, Leek, Fallin, Feinberg, and Irizarry, 2012) and (Jaffe, Murakami, Lee, Leek, Fallin, Feinberg, and Irizarry, 2012)
- derfinderHelper (Collado-Torres, Jaffe, and Leek, 2017)
- GenomeInfoDb (Arora, Morgan, Carlson, and Pagès, 2017)
- GenomicAlignments (Lawrence, Huber, Pagès, Aboyoun, Carlson, Gentleman, Morgan, and Carey, 2013)
- GenomicFeatures (Lawrence, Huber, Pagès et al., 2013)
- GenomicFiles (Bioconductor Package Maintainer, Obenchain, Love, Shepherd, and Morgan, 2025)
- GenomicRanges (Lawrence, Huber, Pagès et al., 2013)
- Hmisc (Harrell Jr, 2025)
- IRanges (Lawrence, Huber, Pagès et al., 2013)
- qvalue (Storey, Bass, Dabney, and Robinson, 2025)
- Rsamtools (Morgan, Pagès, Obenchain, and Hayden, 2025)
- rtracklayer (Lawrence, Gentleman, and Carey, 2009)
- S4Vectors (Pagès, Lawrence, and Aboyoun, 2017)
- derfinderData (Collado-Torres, Jaffe, and Leek, 2024)
- sessioninfo (Wickham, Chang, Flight, Müller, and Hester, 2025)
- ggplot2 (Wickham, 2016)
- knitr (Xie, 2014)
- BiocStyle (Oleś, 2025)
- RefManageR (McLean, 2017)
- rmarkdown (Allaire, Xie, Dervieux, McPherson, Luraschi, Ushey, Atkins, Wickham, Cheng, Chang, and Iannone, 2024)
- testthat (Wickham, 2011)
- TxDb.Hsapiens.UCSC.hg19.knownGene (Carlson and Maintainer, 2015)

Code for creating the vignette

    ## Create the vignette
    library("rmarkdown")
    system.time(render("derfinder-quickstart.Rmd", "BiocStyle::html_document"))

    ## Extract the R code
    library("knitr")
    knit("derfinder-quickstart.Rmd", tangle = TRUE)

Date the vignette was generated.

    ## [1] "2025-04-15 20:13:40 EDT"

Wallclock time spent generating the vignette.

    ## Time difference of 2.059 mins

`R` session information.

    ## ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
    ##  setting  value
    ##  version  R version 4.5.0 RC (2025-04-04 r88126 ucrt)
    ##  os       Windows Server 2022 x64 (build 20348)
    ##  system   x86_64, mingw32
    ##  ui       RTerm
    ##  language (EN)
    ##  collate  C
    ##  ctype    English_United States.utf8
    ##  tz       America/New_York
    ##  date     2025-04-15
    ##  pandoc   2.7.3 @ C:/PROGRA~1/Pandoc/ (via rmarkdown)
    ##  quarto   NA
    ##
    ## ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
    ##  package                           * version   date (UTC) lib source
    ##  abind                               1.4-8     2024-09-12 [2] CRAN (R 4.5.0)
    ##  AnnotationDbi                     * 1.70.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  AnnotationFilter                    1.32.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  backports                           1.5.0     2024-05-23 [2] CRAN (R 4.5.0)
    ##  base64enc                           0.1-3     2015-07-28 [2] CRAN (R 4.5.0)
    ##  bibtex                              0.5.1     2023-01-26 [2] CRAN (R 4.5.0)
    ##  Biobase                           * 2.68.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  BiocFileCache                       2.16.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  BiocGenerics                      * 0.54.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  BiocIO                              1.18.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  BiocManager                         1.30.25   2024-08-28 [2] CRAN (R 4.5.0)
    ##  BiocParallel                        1.42.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  BiocStyle                         * 2.36.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  biomaRt                             2.64.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  Biostrings                          2.76.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  biovizBase                          1.56.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  bit                                 4.6.0     2025-03-06 [2] CRAN (R 4.5.0)
    ##  bit64                               4.6.0-1   2025-01-16 [2] CRAN (R 4.5.0)
    ##  bitops                              1.0-9     2024-10-03 [2] CRAN (R 4.5.0)
    ##  blob                                1.2.4     2023-03-17 [2] CRAN (R 4.5.0)
    ##  bookdown                            0.43      2025-04-15 [2] CRAN (R 4.5.0)
    ##  BSgenome                            1.76.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  bslib                               0.9.0     2025-01-30 [2] CRAN (R 4.5.0)
    ##  bumphunter                        * 1.50.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  cachem                              1.1.0     2024-05-16 [2] CRAN (R 4.5.0)
    ##  checkmate                           2.3.2     2024-07-29 [2] CRAN (R 4.5.0)
    ##  cli                                 3.6.4     2025-02-13 [2] CRAN (R 4.5.0)
    ##  cluster                             2.1.8.1   2025-03-12 [2] CRAN (R 4.5.0)
    ##  codetools                           0.2-20    2024-03-31 [2] CRAN (R 4.5.0)
    ##  colorspace                          2.1-1     2024-07-26 [2] CRAN (R 4.5.0)
    ##  crayon                              1.5.3     2024-06-20 [2] CRAN (R 4.5.0)
    ##  curl                                6.2.2     2025-03-24 [2] CRAN (R 4.5.0)
    ##  data.table                          1.17.0    2025-02-22 [2] CRAN (R 4.5.0)
    ##  DBI                                 1.2.3     2024-06-02 [2] CRAN (R 4.5.0)
    ##  dbplyr                              2.5.0     2024-03-19 [2] CRAN (R 4.5.0)
    ##  DelayedArray                        0.34.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  derfinder                         * 1.42.0    2025-04-15 [1] Bioconductor 3.21 (R 4.5.0)
    ##  derfinderData                     * 2.25.0    2024-12-17 [2] Bioconductor 3.21 (R 4.5.0)
    ##  derfinderHelper                     1.42.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  derfinderPlot                     * 1.42.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  DESeq2                            * 1.48.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  dichromat                           2.0-0.1   2022-05-02 [2] CRAN (R 4.5.0)
    ##  digest                              0.6.37    2024-08-19 [2] CRAN (R 4.5.0)
    ##  doRNG                               1.8.6.2   2025-04-02 [2] CRAN (R 4.5.0)
    ##  dplyr                               1.1.4     2023-11-17 [2] CRAN (R 4.5.0)
    ##  ensembldb                           2.32.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  evaluate                            1.0.3     2025-01-10 [2] CRAN (R 4.5.0)
    ##  fastmap                             1.2.0     2024-05-15 [2] CRAN (R 4.5.0)
    ##  filelock                            1.0.3     2023-12-11 [2] CRAN (R 4.5.0)
    ##  foreach                           * 1.5.2     2022-02-02 [2] CRAN (R 4.5.0)
    ##  foreign                             0.8-90    2025-03-31 [2] CRAN (R 4.5.0)
    ##  Formula                             1.2-5     2023-02-24 [2] CRAN (R 4.5.0)
    ##  generics                          * 0.1.3     2022-07-05 [2] CRAN (R 4.5.0)
    ##  GenomeInfoDb                      * 1.44.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  GenomeInfoDbData                    1.2.14    2025-04-10 [2] Bioconductor
    ##  GenomicAlignments                   1.44.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  GenomicFeatures                   * 1.60.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  GenomicFiles                        1.44.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  GenomicRanges                     * 1.60.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  GGally                              2.2.1     2024-02-14 [2] CRAN (R 4.5.0)
    ##  ggbio                               1.56.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  ggplot2                             3.5.2     2025-04-09 [2] CRAN (R 4.5.0)
    ##  ggstats                             0.9.0     2025-03-10 [2] CRAN (R 4.5.0)
    ##  glue                                1.8.0     2024-09-30 [2] CRAN (R 4.5.0)
    ##  graph                               1.86.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  gridExtra                           2.3       2017-09-09 [2] CRAN (R 4.5.0)
    ##  gtable                              0.3.6     2024-10-25 [2] CRAN (R 4.5.0)
    ##  Hmisc                               5.2-3     2025-03-16 [2] CRAN (R 4.5.0)
    ##  hms                                 1.1.3     2023-03-21 [2] CRAN (R 4.5.0)
    ##  htmlTable                           2.4.3     2024-07-21 [2] CRAN (R 4.5.0)
    ##  htmltools                           0.5.8.1   2024-04-04 [2] CRAN (R 4.5.0)
    ##  htmlwidgets                         1.6.4     2023-12-06 [2] CRAN (R 4.5.0)
    ##  httr                                1.4.7     2023-08-15 [2] CRAN (R 4.5.0)
    ##  httr2                               1.1.2     2025-03-26 [2] CRAN (R 4.5.0)
    ##  IRanges                           * 2.42.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  iterators                         * 1.0.14    2022-02-05 [2] CRAN (R 4.5.0)
    ##  jquerylib                           0.1.4     2021-04-26 [2] CRAN (R 4.5.0)
    ##  jsonlite                            2.0.0     2025-03-27 [2] CRAN (R 4.5.0)
    ##  KEGGREST                            1.48.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  knitr                               1.50      2025-03-16 [2] CRAN (R 4.5.0)
    ##  lattice                             0.22-7    2025-04-02 [2] CRAN (R 4.5.0)
    ##  lazyeval                            0.2.2     2019-03-15 [2] CRAN (R 4.5.0)
    ##  lifecycle                           1.0.4     2023-11-07 [2] CRAN (R 4.5.0)
    ##  limma                               3.64.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  locfit                            * 1.5-9.12  2025-03-05 [2] CRAN (R 4.5.0)
    ##  lubridate                           1.9.4     2024-12-08 [2] CRAN (R 4.5.0)
    ##  magick                              2.8.6     2025-03-23 [2] CRAN (R 4.5.0)
    ##  magrittr                            2.0.3     2022-03-30 [2] CRAN (R 4.5.0)
    ##  Matrix                              1.7-3     2025-03-11 [2] CRAN (R 4.5.0)
    ##  MatrixGenerics                    * 1.20.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  matrixStats                       * 1.5.0     2025-01-07 [2] CRAN (R 4.5.0)
    ##  memoise                             2.0.1     2021-11-26 [2] CRAN (R 4.5.0)
    ##  munsell                             0.5.1     2024-04-01 [2] CRAN (R 4.5.0)
    ##  nnet                                7.3-20    2025-01-01 [2] CRAN (R 4.5.0)
    ##  org.Hs.eg.db                      * 3.21.0    2025-04-10 [2] Bioconductor
    ##  OrganismDbi                         1.50.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  pillar                              1.10.2    2025-04-05 [2] CRAN (R 4.5.0)
    ##  pkgconfig                           2.0.3     2019-09-22 [2] CRAN (R 4.5.0)
    ##  plyr                                1.8.9     2023-10-02 [2] CRAN (R 4.5.0)
    ##  png                                 0.1-8     2022-11-29 [2] CRAN (R 4.5.0)
    ##  prettyunits                         1.2.0     2023-09-24 [2] CRAN (R 4.5.0)
    ##  progress                            1.2.3     2023-12-06 [2] CRAN (R 4.5.0)
    ##  ProtGenerics                        1.40.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  purrr                               1.0.4     2025-02-05 [2] CRAN (R 4.5.0)
    ##  qvalue                              2.40.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  R6                                  2.6.1     2025-02-15 [2] CRAN (R 4.5.0)
    ##  rappdirs                            0.3.3     2021-01-31 [2] CRAN (R 4.5.0)
    ##  RBGL                                1.84.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  RColorBrewer                        1.1-3     2022-04-03 [2] CRAN (R 4.5.0)
    ##  Rcpp                                1.0.14    2025-01-12 [2] CRAN (R 4.5.0)
    ##  RCurl                               1.98-1.17 2025-03-22 [2] CRAN (R 4.5.0)
    ##  RefManageR                        * 1.4.0     2022-09-30 [2] CRAN (R 4.5.0)
    ##  reshape2                            1.4.4     2020-04-09 [2] CRAN (R 4.5.0)
    ##  restfulr                            0.0.15    2022-06-16 [2] CRAN (R 4.5.0)
    ##  rjson                               0.2.23    2024-09-16 [2] CRAN (R 4.5.0)
    ##  rlang                               1.1.6     2025-04-11 [2] CRAN (R 4.5.0)
    ##  rmarkdown                           2.29      2024-11-04 [2] CRAN (R 4.5.0)
    ##  rngtools                            1.5.2     2021-09-20 [2] CRAN (R 4.5.0)
    ##  rpart                               4.1.24    2025-01-07 [2] CRAN (R 4.5.0)
    ##  Rsamtools                           2.24.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  RSQLite                             2.3.9     2024-12-03 [2] CRAN (R 4.5.0)
    ##  rstudioapi                          0.17.1    2024-10-22 [2] CRAN (R 4.5.0)
    ##  rtracklayer                         1.68.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  S4Arrays                            1.8.0     2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  S4Vectors                         * 0.46.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  sass                                0.4.10    2025-04-11 [2] CRAN (R 4.5.0)
    ##  scales                              1.3.0     2023-11-28 [2] CRAN (R 4.5.0)
    ##  sessioninfo                       * 1.2.3     2025-02-05 [2] CRAN (R 4.5.0)
    ##  SparseArray                         1.8.0     2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  statmod                             1.5.0     2023-01-06 [2] CRAN (R 4.5.0)
    ##  stringi                             1.8.7     2025-03-27 [2] CRAN (R 4.5.0)
    ##  stringr                             1.5.1     2023-11-14 [2] CRAN (R 4.5.0)
    ##  SummarizedExperiment              * 1.38.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  tibble                              3.2.1     2023-03-20 [2] CRAN (R 4.5.0)
    ##  tidyr                               1.3.1     2024-01-24 [2] CRAN (R 4.5.0)
    ##  tidyselect                          1.2.1     2024-03-11 [2] CRAN (R 4.5.0)
    ##  timechange                          0.3.0     2024-01-18 [2] CRAN (R 4.5.0)
    ##  tinytex                             0.57      2025-04-15 [2] CRAN (R 4.5.0)
    ##  TxDb.Hsapiens.UCSC.hg19.knownGene * 3.2.2     2025-04-10 [2] Bioconductor
    ##  txdbmaker                           1.4.0     2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  UCSC.utils                          1.4.0     2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  VariantAnnotation                   1.54.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  vctrs                               0.6.5     2023-12-01 [2] CRAN (R 4.5.0)
    ##  xfun                                0.52      2025-04-02 [2] CRAN (R 4.5.0)
    ##  XML                                 3.99-0.18 2025-01-01 [2] CRAN (R 4.5.0)
    ##  xml2                                1.3.8     2025-03-14 [2] CRAN (R 4.5.0)
    ##  XVector                             0.48.0    2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    ##  yaml                                2.3.10    2024-07-26 [2] CRAN (R 4.5.0)
    ##
    ##  [1] E:/biocbuild/bbs-3.21-bioc/tmpdir/RtmpyQ3R1e/Rinst75983ba13ded
    ##  [2] E:/biocbuild/bbs-3.21-bioc/R/library
    ##  * ── Packages attached to the search path.
    ##
    ## ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

# 6 Bibliography

This vignette was generated using BiocStyle (Oleś, 2025) with knitr (Xie, 2014) and rmarkdown (Allaire, Xie, Dervieux et al., 2024) running behind the scenes.

Citations made with RefManageR (McLean, 2017).

[1] J. Allaire, Y. Xie, C. Dervieux, et al. rmarkdown: Dynamic Documents for R. R package version 2.29. 2024. URL: https://github.com/rstudio/rmarkdown.

[2] S. Arora, M. Morgan, M. Carlson, et al. GenomeInfoDb: Utilities for manipulating chromosome and other ‘seqname’ identifiers. 2017. DOI: 10.18129/B9.bioc.GenomeInfoDb.

[3] Bioconductor Package Maintainer, V. Obenchain, M. Love, et al. GenomicFiles: Distributed computing by file or by range. R package version 1.44.0. 2025. DOI: 10.18129/B9.bioc.GenomicFiles. URL: https://bioconductor.org/packages/GenomicFiles.

[4] BrainSpan. “Atlas of the Developing Human Brain [Internet]. Funded by ARRA Awards 1RC2MH089921-01, 1RC2MH090047-01, and 1RC2MH089929-01.” 2011. URL: http://www.brainspan.org/.

[5] M. Carlson and B. P. Maintainer. TxDb.Hsapiens.UCSC.hg19.knownGene: Annotation package for TxDb object(s). R package version 3.2.2. 2015.

[6] L. Collado-Torres, A. E. Jaffe, and J. T. Leek. derfinderHelper: derfinder helper package. https://github.com/leekgroup/derfinderHelper - R package version 1.42.0. 2017. DOI: 10.18129/B9.bioc.derfinderHelper. URL: http://www.bioconductor.org/packages/derfinderHelper.

[7] L. Collado-Torres, A. Jaffe, and J. Leek. derfinderData: Processed BigWigs from BrainSpan for examples. R package version 2.25.0. 2024. DOI: 10.18129/B9.bioc.derfinderData. URL: https://bioconductor.org/packages/derfinderData.

[8] A. C. Frazee, S. Sabunciyan, K. D. Hansen, et al. “Differential expression analysis of RNA-seq data at single-base resolution”. In: Biostatistics 15 (3) (2014), pp. 413-426. DOI: 10.1093/biostatistics/kxt053. URL: http://biostatistics.oxfordjournals.org/content/15/3/413.long.

[9] F. Harrell Jr. Hmisc: Harrell Miscellaneous. R package version 5.2-3. 2025. DOI: 10.32614/CRAN.package.Hmisc. URL: https://CRAN.R-project.org/package=Hmisc.

[10] A. E. Jaffe, P. Murakami, H. Lee, et al. “Bump hunting to identify differentially methylated regions in epigenetic epidemiology studies”. In: International journal of epidemiology 41.1 (2012), pp. 200–209. DOI: 10.1093/ije/dyr238.

[11] A. E. Jaffe, P. Murakami, H. Lee, et al. “Bump hunting to identify differentially methylated regions in epigenetic epidemiology studies”. In: International Journal of Epidemiology (2012).

[12] M. Lawrence, R. Gentleman, and V. Carey. “rtracklayer: an R package for interfacing with genome browsers”. In: Bioinformatics 25 (2009), pp. 1841-1842. DOI: 10.1093/bioinformatics/btp328. URL: http://bioinformatics.oxfordjournals.org/content/25/14/1841.abstract.

[13] M. Lawrence, W. Huber, H. Pagès, et al. “Software for Computing and Annotating Genomic Ranges”. In: PLoS Computational Biology 9 (8 2013). DOI: 10.1371/journal.pcbi.1003118. URL: http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1003118}.

[14] M. W. McLean. “RefManageR: Import and Manage BibTeX and BibLaTeX References in R”. In: The Journal of Open Source Software (2017). DOI: 10.21105/joss.00338.

[15] M. Morgan, H. Pagès, V. Obenchain, et al. Rsamtools: Binary alignment (BAM), FASTA, variant call (BCF), and tabix file import. R package version 2.24.0. 2025. DOI: 10.18129/B9.bioc.Rsamtools. URL: https://bioconductor.org/packages/Rsamtools.

[16] M. Morgan, J. Wang, V. Obenchain, et al. BiocParallel: Bioconductor facilities for parallel evaluation. R package version 1.42.0. 2025. DOI: 10.18129/B9.bioc.BiocParallel. URL: https://bioconductor.org/packages/BiocParallel.

[17] A. Oleś. BiocStyle: Standard styles for vignettes and other Bioconductor documents. R package version 2.36.0. 2025. DOI: 10.18129/B9.bioc.BiocStyle. URL: https://bioconductor.org/packages/BiocStyle.

[18] H. Pagès, M. Carlson, S. Falcon, et al. AnnotationDbi: Annotation Database Interface. 2017. DOI: 10.18129/B9.bioc.AnnotationDbi.

[19] H. Pagès, M. Lawrence, and P. Aboyoun. S4Vectors: S4 implementation of vector-like and list-like objects. 2017. DOI: 10.18129/B9.bioc.S4Vectors.

[20] R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. Vienna, Austria, 2025. URL: https://www.R-project.org/.

[21] J. D. Storey, A. J. Bass, A. Dabney, et al. qvalue: Q-value estimation for false discovery rate control. R package version 2.40.0. 2025. DOI: 10.18129/B9.bioc.qvalue. URL: https://bioconductor.org/packages/qvalue.

[22] H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016. ISBN: 978-3-319-24277-4. URL: https://ggplot2.tidyverse.org.

[23] H. Wickham. “testthat: Get Started with Testing”. In: The R Journal 3 (2011), pp. 5–10. URL: https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf.

[24] H. Wickham, W. Chang, R. Flight, et al. sessioninfo: R Session Information. R package version 1.2.3. 2025. DOI: 10.32614/CRAN.package.sessioninfo. URL: https://CRAN.R-project.org/package=sessioninfo.

[25] Y. Xie. “knitr: A Comprehensive Tool for Reproducible Research in R”. In: Implementing Reproducible Computational Research. Ed. by V. Stodden, F. Leisch and R. D. Peng. ISBN 978-1466561595. Chapman and Hall/CRC, 2014.