minPanel

Author

Tingting Zhan

Published

February 23, 2026

1 Introduction

This vignette of package minPanel (Github) presents …

1.1 Prerequisite

Package minPanel requires R version 4.5.0 (released 2025-04-11) or higher (macOS, Windows, Linux).

Environment on author’s computer
Sys.info()[c('sysname', 'release', 'machine')]
#  sysname  release  machine 
# "Darwin" "25.3.0"  "arm64"
R.version
#                _                           
# platform       aarch64-apple-darwin20      
# arch           aarch64                     
# os             darwin20                    
# system         aarch64, darwin20           
# status                                     
# major          4                           
# minor          5.2                         
# year           2025                        
# month          10                          
# day            31                          
# svn rev        88974                       
# language       R                           
# version.string R version 4.5.2 (2025-10-31)
# nickname       [Not] Part in a Rumble

Experimental (and maybe unstable) features are released extremely frequently to Github.

remotes::install_github('tingtingzhan/minPanel')

1.2 Getting Started

Examples in this vignette require that the search path has

library(minPanel)
library(ggplot2)
library(flextable)

2 Data Set

Study data should be described in a peer-reviewed manuscript in the following language.

<Biology> samples from n_1 <positive.subjects> were obtained from our collaborators <institutionA-1>, <institutionA-2> under approved IRB protocols. <Biology> samples from n_0 <negative.subjects> from <institutionB-1>, <institutionB-2> were used as controls. Demographic information of human subjects is shown in <table> and <supplementary materials>.

Data from Zezulinski et al. (2025) is included in package minPanel.

Listing 1 shows that the data object m1 is a logical matrix of 12877 variants in 50 early & late stage, i.e., positive, patients.

Listing 1: Number of variants and positive patients
m1 |> 
  dim()
# [1] 12877    50
Listing 2: A snippet of m1 (Listing 1)
m1 |> 
  head(n = c(3L, 3L))
#                     UPH-106P UPH-004P UPH-083P
# chr17:7176997 C>T      FALSE    FALSE     TRUE
# chr11:118583356 G>A    FALSE    FALSE    FALSE
# chr12:49269877 C>T     FALSE    FALSE     TRUE

Listing 3 shows that the data object m0 is a logical matrix of the same 12877 variants in 31 UPC, i.e., negative, patients.

Listing 3: Number of variants and negative patients
m0 |> 
  dim()
# [1] 12877    31
Listing 4: A snippet of m0 (Listing 3)
m0 |> 
  head(n = c(3L, 3L))
#                     UPC-022P UPC-021P UPC-044P
# chr17:7176997 C>T      FALSE    FALSE    FALSE
# chr11:118583356 G>A    FALSE    FALSE    FALSE
# chr12:49269877 C>T     FALSE    FALSE    FALSE

3 Panel of Variant-Collections

Listing 5 consolidates the variants that identify the same set of positive subjects in Listing 1 and the same set of negative subjects in Listing 3. In other words, these variants are considered identical in terms of Listing 1 and Listing 3. Therefore they are consolidated into one variant-collection.

Listing 5: Variant collections
(m = panel(m1 = m1, m0 = m0))
# Panel of 1253 Variant-Collections from
# 50 positive subjects
# 31 negative subjects

Listing 5 consolidates the 12877 variants in Listing 1 and Listing 3 into 1253 variant-collections. For example, the variants below (Listing 6) identify the same set of positive and negative subjects, thus they are consolidated as one collection.

Listing 6: e.g., variants consolidated in one variant-collection
Code
m@id[[8L]] |>
  cat(sep = '\n')
# chr1:29053290 C>A
# chr1:29053291 A>G
# chr1:29053294 G>C
# chr1:29053295 C>T

4 Ordered Panel

Methodology should be described in a peer-reviewed manuscript in the following language.

An ordered panel of variant-collections is determined using the following steps: (1) we exclude the collections that identify none of the <positive.subjects> per collection; (2) we exclude the collections that identify 1-or-more <negative.subjects> per collection; (3) we sort the remaining collections by the number of <positive.subjects> identified per collection, from most to least; (4) we exclude the collections that identify no more <positive.subjects> than all the preceding collections. Such panel of collections is ordered, i.e., a researcher may reduce the size of the panel by keeping the collections in the top of the panel and dropping those in the bottom of the panel. <Figure> is the Consolidated Standards of Reporting Trials (CONSORT) diagram of this selection procedure. This methodology is implemented in R (R Core Team (2025)) package minPanel (citation coming soon).

Listing 7: Ordered panel x0: controlled at 0-or-less False(+) per collection
x0 = m |>
  subset(subset = sum1 > 0L) |>
  subset(subset = sum0 <= 0L, append.label = TRUE) |>
  sort_by(y = ~ sum1, decreasing = TRUE) |>
  subset(subset = diff(cumsum1) > 0L) |>
  append_label(info = 'cumsum0')

The pipeline Listing 8 consists of five steps.

  1. The first call to subset() (Appendix Section 6.2.2) selects the collections that identify at least one positive subjects per collection (Appendix Section 6.2.1).
  2. The second call to subset() selects the collections that identify none of the negative subjects per collection (Appendix Section 6.2.1). The per-collection criterion 'False(+) ≤0/31' is appended to the @label of the output.
  3. The call to sort_by() (Appendix Section 6.2.3) sorts the collections by their number of positive subjects identified per collection (Appendix Section 6.2.1), in decreasing order.
  4. The last call to subset() identifies the collections, so that each one collection identifies at least one more positive subjects than all the preceding collections (Appendix Section 6.2.1).
  5. The call to append_label() (Appendix Section 6.2.4) summarizes the number of negative subjects identified as a panel of collections (Appendix Section 6.2.1). The panel-wise criterion 'panelFalse(+) ≤0/31' is appended to the @label of the output.
Listing 8: Ordered panel x0: controlled at 0-or-less False(+) per collection
x0
# False(+) ≤0/31
# panelFalse(+) ≤0/31
# Panel of 23 Variant-Collections from
# 50 positive subjects
# 31 negative subjects

Figure 1 (Listing 9) presents a Consolidated Standards of Reporting Trials (CONSORT) diagram of the creation of the ordered panel Listing 8.

Listing 9: CONSORT Diagram of ordered panel Listing 8
x0 |>
  consort.panel()
Figure 1: CONSORT Diagram of ordered panel Listing 8

Similarly, we relax the constraint on False(+)-per-collection and create Listing 10 - Listing 12.

Listing 10: Ordered panel x1: controlled at 1-or-less False(+) per collection
x1 = m |>
  subset(subset = sum1 > 0L) |>
  subset(subset = sum0 <= 1L, append.label = TRUE) |>
  sort_by(y = ~ sum1, decreasing = TRUE) |>
  subset(subset = diff(cumsum1) > 0L) |>
  append_label(info = 'cumsum0')
x1
# False(+) ≤1/31
# panelFalse(+) ≤7/31
# Panel of 18 Variant-Collections from
# 50 positive subjects
# 31 negative subjects
Listing 11: Ordered panel x2: controlled at 2-or-less False(+) per collection
x2 = m |>
  subset(subset = sum1 > 0L) |>
  subset(subset = sum0 <= 2L, append.label = TRUE) |>
  sort_by(y = ~ sum1, decreasing = TRUE) |>
  subset(subset = diff(cumsum1) > 0L) |>
  append_label(info = 'cumsum0')
x2
# False(+) ≤2/31
# panelFalse(+) ≤13/31
# Panel of 17 Variant-Collections from
# 50 positive subjects
# 31 negative subjects
Listing 12: Ordered panel x3: controlled at 3-or-less False(+) per collection
x3 = m |>
  subset(subset = sum1 > 0L) |>
  subset(subset = sum0 <= 3L, append.label = TRUE) |>
  sort_by(y = ~ sum1, decreasing = TRUE) |>
  subset(subset = diff(cumsum1) > 0L) |>
  append_label(info = 'cumsum0')
x3
# False(+) ≤3/31
# panelFalse(+) ≤12/31
# Panel of 16 Variant-Collections from
# 50 positive subjects
# 31 negative subjects

5 Operating Characteristics

Listing 13 collects multiple ordered panels.

Listing 13: Ordered panel list containing Listing 8 - Listing 12
(z = panellist(x0, x1, x2, x3))
# Component 1 :
# False(+) ≤0/31
# panelFalse(+) ≤0/31
# Panel of 23 Variant-Collections from
# 50 positive subjects
# 31 negative subjects
# 
# Component 2 :
# False(+) ≤1/31
# panelFalse(+) ≤7/31
# Panel of 18 Variant-Collections from
# 50 positive subjects
# 31 negative subjects
# 
# Component 3 :
# False(+) ≤2/31
# panelFalse(+) ≤13/31
# Panel of 17 Variant-Collections from
# 50 positive subjects
# 31 negative subjects
# 
# Component 4 :
# False(+) ≤3/31
# panelFalse(+) ≤12/31
# Panel of 16 Variant-Collections from
# 50 positive subjects
# 31 negative subjects

5.1 Visualization

The operating characteristics should be described in a peer-reviewed manuscript in the following language.

<Figure_oc> presents the operating characteristic curves of multiple ordered panels of variant-collections. The x-axis is the number of variant-collections that are selected from each ordered panel by the investigator. The y-axis is the percentage of <positive.subjects> identified, i.e., the sensitivity, for each selected number of variant-collections. An operating characteristics curve moves towards the upper-left corner to indicate a better performance, i.e., higer sensitivity with lower number of variant-collections selected from the ordered panel.

<Figure_roc> presents the pseudo receiver operating characteristic (ROC) curves of multiple ordered panels of variant-collections. The x-axis is the non-specificity for each selected number of variant-collections. The y-axis is the percentage of <positive.subjects> identified, i.e., the sensitivity, for each selected number of variant-collections. This is a pseudo ROC curve, as each sensitivity-non-specificity pair on this curve corresponds to a different selected number of variant-collections.

Figure 2 (Listing 14) and Figure 3 (Listing 15) visualize the operating characteristic and the pseudo receiver operating characteristic curves of the panel-list Listing 13. It is concluded that the ordered panel Listing 10, controlled at a per-collection false positive of <=1/31, is the optimal among the four ordered panels.

Compared to the ordered panel Listing 10,

  • the ordered panel Listing 8, controlled at a more stringent criterion of per-collection false positive of <=0/31, has
    • lower sensitivity, assuming the same number of variant-collections selected (Figure 2);
    • lower panel-wise non-specificity (Figure 3);
  • the ordered panel Listing 11 and ordered panel Listing 12, controlled at less stringent criteria of per-collection false positive of <=2/31 and <=3/31, respectively, have
    • almost identical sensitivity, assuming the same number of variant-collections selected (Figure 2);
    • higher panel-wise non-specificity (Figure 3).
Listing 14: Operating characteristics of ordered panel list Listing 13
z |> 
  autoplot()
Figure 2: Operating Characteristics of Ordered Panel List Listing 13
Listing 15: Pseudo receiver operating characteristics of ordered panel list Listing 13
z |> 
  autoplot(which = 'roc')
Figure 3: Pseudo Receiver Operating Characteristics of Ordered Panel List Listing 13

5.2 Selected Collections

The S3 method as_flextable.panellist() (Listing 16) displays the variant-collections selected in each ordered panel of the panel-list Listing 13. The variant-collections that contain more than one variants are highlighted using the light-yellow color.

Listing 16: Variant-collections in each ordered panel of the panel-list Listing 13
z |> 
  as_flextable()

Variant-Collection

Individual

Variants in Collection

Panel

True(+)

False(+)

False(+) ≤0/31
panelFalse(+) ≤0/31
size=23

False(+) ≤1/31
panelFalse(+) ≤7/31
size=18

False(+) ≤2/31
panelFalse(+) ≤13/31
size=17

False(+) ≤3/31
panelFalse(+) ≤12/31
size=16

Collection 1

12/50

0/31

chr17:7176997 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 2

10/50

0/31

chr11:118583356 G>A

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 3

6/50

0/31

chr12:49269877 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 4

5/50

0/31

chr11:102350873 T>A
chr11:102350877 A>C

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 5

5/50

0/31

chr3:9789723 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 6

5/50

0/31

chrX:47199344 G>A

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 7

4/50

0/31

chr1:29053204 TA>T

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

Collection 8

4/50

0/31

chr1:29053290 C>A
chr1:29053291 A>G
chr1:29053294 G>C
chr1:29053295 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

Collection 11

4/50

0/31

chr17:7313221 G>A

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

Collection 12

4/50

0/31

chr19:10115113 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 13

4/50

0/31

chr19:10252243 G>T
chr19:10252246 G>T

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 14

4/50

0/31

chr19:10252358 G>C

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

Collection 17

4/50

0/31

chr19:55092500 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 19

4/50

0/31

chr5:141583561 T>A

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 20

4/50

0/31

chr8:144098748 A>T
chr8:144098750 G>C

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 22

3/50

0/31

chr1:11054996 C>A

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 23

3/50

0/31

chr1:160999732 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 31

3/50

0/31

chr11:64800903 A>C

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

Collection 32

3/50

0/31

chr12:8946388 C>G

False(+) ≤0/31
panelFalse(+) ≤0/31

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

Collection 33

3/50

0/31

chr14:105249697 C>T

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 37

3/50

0/31

chr16:71921451 A>C

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 50

3/50

0/31

chr19:12747525 C>A

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 57

3/50

0/31

chr19:58551755 G>A
chr19:58551758 C>A

False(+) ≤0/31
panelFalse(+) ≤0/31

Collection 340

12/50

1/31

chr18:51196776 G>C

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 341

8/50

1/31

chr5:141582348 C>G

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 342

7/50

1/31

chr17:43015806 C>T

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 343

7/50

1/31

chr19:1080497 C>A

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 346

5/50

1/31

chr19:38840293 C>T

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

Collection 348

4/50

1/31

chr1:12001541 C>T

False(+) ≤1/31
panelFalse(+) ≤7/31

Collection 349

4/50

1/31

chr10:17693290 A>AA

False(+) ≤1/31
panelFalse(+) ≤7/31

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 350

4/50

1/31

chr11:118583892 C>A

False(+) ≤1/31
panelFalse(+) ≤7/31

Collection 815

11/50

2/31

chr17:50094891 GAGGAT>G

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 816

8/50

2/31

chrX:154442587 T>A

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 817

7/50

2/31

chr17:1651476 A>G

False(+) ≤2/31
panelFalse(+) ≤13/31

Collection 819

7/50

2/31

chr21:44856223 C>T

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 827

5/50

2/31

chr7:64978289 G>A

False(+) ≤2/31
panelFalse(+) ≤13/31

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 1042

11/50

3/31

chr13:45516236 A>G

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 1043

8/50

3/31

chr16:71922614 C>A

False(+) ≤3/31
panelFalse(+) ≤12/31

Collection 1045

7/50

3/31

chr16:2037561 G>A

False(+) ≤3/31
panelFalse(+) ≤12/31

6 Appendix

6.1 About

R terminology may differ from that commonly used in mathematics and statistics. For explanations and references to the terms and abbreviations used in this vignette, please refer to Section 8.

6.1.1 Environment

This vignette is created under R version 4.5.2 (2025-10-31) with the aid of packages knitr (Xie 2025, v1.51), quarto (Allaire and Dervieux 2025, v1.5.1 with Quarto v1.8.27) and rmarkdown (Allaire et al. 2024, v2.30). Documentation is supported by package roxygen2 (Wickham et al. 2025, v7.3.3).

An Integrated Development Environment (IDE), e.g., RStudio (Posit team 2025) or Positron, is not required, but highly recommended.

6.1.2 Dependency

Package minPanel Imports packages

6.2 panel

The function panel() (Section 3) returns an object of S4 class 'panel', with slots

  • @m1, a logical matrix, collections on rows and positive subjects on columns
  • @m0, a logical matrix, collections on rows and negative subjects on columns
  • @id, a list of character vectors. Each character vector contains the variants in a collection.
  • @label, an optional character scalar

The S4 method of show to signature = 'panel' prints the vital information, e.g., the number of collections, and the number of positive and negative subjects.

6.2.1 (Cumulative) True & False Positives

The function sum1() finds the number of true positives per collection, i.e., the rowSums of the slot @m1.

The function sum0() finds the number of false positives per collection, i.e., the rowSums of the slot @m0.

Functions sum1() and sum0() return an integer vector.

# example

The function cumsum1() finds the number of true positives, by a sub-panel of the first i collections.

The function cumsum0() finds the number of false positives, by a sub-panel of the first i collections.

The function cumsum1() and cumsum0() return a not-strictly increasing integer vector.

# example

6.2.2 Subset

The S3 method subset.panel() 🚧

6.2.2.1 by Panel-Wise False Positives

Panel x1 in Section 4, controlled at sum0 <= 1L per collection, has a substantial panel-wise false positive rate

x1
# False(+) ≤1/31
# panelFalse(+) ≤7/31
# Panel of 18 Variant-Collections from
# 50 positive subjects
# 31 negative subjects

User may impose an additional criterion of panel-wise false positive of 5 or less out of 31 negative subjects.

Example: additional criteria of panel-wise false positive <=5
x1a = m |>
  subset(subset = sum1 > 0L) |>
  subset(subset = sum0 <= 1L, append.label = TRUE) |>
  sort_by(y = ~ sum1, decreasing = TRUE) |>
  subset(subset = diff(cumsum1) > 0L) |>
  subset(subset = cumsum0 <= 5L, append.label = TRUE)
x1a
# False(+) ≤1/31
# panelFalse(+) ≤5/31
# Panel of 14 Variant-Collections from
# 50 positive subjects
# 31 negative subjects

Figure 4 shows ..

Figure: operating characteristics of x0, x1 and x1a
panellist(x0, x1, x1a) |>
  autoplot()
Figure 4: Operating characteristics of x0, x1 and x1a

6.2.3 Sort-By

The S3 method sort_by.panel() 🚧

6.2.4 Append Label

The function append_label() 🚧

6.2.5 CONSORT Diagram

The function consort.panel() creates a CONSORT diagram of the creation of a panel, using package consort (Dayim 2024).

The function consort.panel() is a wrapper of the function consort::consort_plot(), which returns an object of class 'consort'.

Examples using function consort.panel() are provided in Section 4.

6.3 panellist

6.3.1 CONSORT Diagram

The function consort.panellist() organizes the CONSORT diagrams of each panel member in a panellist in a collage, using packages consort (Dayim 2024) and patchwork (Pedersen 2025).

Figure 5 presents side-by-side the selection of collections in x0, x1, and x2.

Figure: CONSORT diagrams of x0, x1, and x2
z[1:3] |> 
  consort.panellist(nrow = 1L)
Figure 5: CONSORT Diagram of panellist

7 What We Don’t Do

7.1 subset.panel()

7.1.1 by Multiple Criteria

too difficult to parse..

m |> 
  subset.panel(subset = (sum1 > 0L) & (sum0 <= 3L))

8 Terms & Abbreviations

Table 1 presents a comprehensive glossary of R terms and abbreviations used in this vignette, which is folded to avoid overwhelming the reader with its excessive length.

R terminology and nomenclature could be drastically different from that of mathematics and statistics. Readers are strongly advised to read closely from the reference links in Table 1, most of which point to webpages on search.r-project.org, cran.r-project.org, adv-r.hadley.nz and en.wikipedia.org.

Table 1: Terms & Abbreviations in R
Table 1: Terms & Abbreviations in R
Term / Abbreviation Description
[moved] [moved]

9 References

Allaire, JJ, and Christophe Dervieux. 2025. quarto: R Interface to ’Quarto’ Markdown Publishing System. https://doi.org/10.32614/CRAN.package.quarto.
Allaire, JJ, Yihui Xie, Christophe Dervieux, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, et al. 2024. rmarkdown: Dynamic Documents for r. https://github.com/rstudio/rmarkdown.
Bengtsson, Henrik. 2025. matrixStats: Functions That Apply to Rows and Columns of Matrices (and to Vectors). https://doi.org/10.32614/CRAN.package.matrixStats.
Csárdi, Gábor. 2025. cli: Helpers for Developing Command Line Interfaces. https://doi.org/10.32614/CRAN.package.cli.
Dayim, Alim. 2024. consort: Create Consort Diagram. https://doi.org/10.32614/CRAN.package.consort.
Gohel, David, and Panagiotis Skintzos. 2026. flextable: Functions for Tabular Reporting. https://doi.org/10.32614/CRAN.package.flextable.
Pedersen, Thomas Lin. 2025. patchwork: The Composer of Plots. https://doi.org/10.32614/CRAN.package.patchwork.
Posit team. 2025. RStudio: Integrated Development Environment for R. Boston, MA: Posit Software, PBC. http://www.posit.co/.
R Core Team. 2025. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Wickham, Hadley. 2016. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org.
Wickham, Hadley, Peter Danenberg, Gábor Csárdi, and Manuel Eugster. 2025. roxygen2: In-Line Documentation for R. https://doi.org/10.32614/CRAN.package.roxygen2.
Wickham, Hadley, Thomas Lin Pedersen, and Dana Seidel. 2025. scales: Scale Functions for Visualization. https://doi.org/10.32614/CRAN.package.scales.
Xie, Yihui. 2025. knitr: A General-Purpose Package for Dynamic Report Generation in R. https://yihui.org/knitr/.
Zezulinski, Daniel, Maarouf A. Hoteit, David E. Kaplan, Angela Simeone, Tingting Zhan, Cataldo Doria, Fowsiyo Y. Ahmed, Lewis R. Roberts, Timothy M. Block, and Aejaz Sayeed. 2025. “Detection of Circulating mRNA Variants in Hepatocellular Carcinoma Patients Using Targeted RNAseq.” Liver Cancer. https://doi.org/10.1159/000545366.