# Chromosome engineering to correct a complex rearrangement on chromosome 8 reveals the effects of 8p syndrome on gene expression and neural differentiation

### Computational Analysis for Supplementary S3DE

#### Lu Qiao

#### 2025-08-12

### Load Libraries

    library("readxl")
    library("tidyverse")
    library("edgeR")
    library("clusterProfiler")
    library("org.Hs.eg.db")
    library("enrichplot")
    library("msigdbr")
    library("biomaRt")
    library(MetBrewer)

## GSEA

### exclude 8p region

    ensembl <- useEnsembl(biomart = "genes", dataset = "hsapiens_gene_ensembl")
    # region of interest
    chromosome_of_interest <- "8"
    deletion_start <- 0
    deletion_end <- 7247573
    duplication_start <- 11828865
    duplication_end <- 40361770

    attributes <- c(
      "ensembl_gene_id",
      "external_gene_name",
      "chromosome_name",
      "start_position",
      "end_position",
      "strand",
      "gene_biotype"
    )

    # deletion region
    filters_del <- c("chromosome_name", "start", "end")
    values_del <- list(chromosome_of_interest, deletion_start, deletion_end)

    genes_in_deletion <- getBM(
      attributes = attributes,
      filters = filters_del,
      values = values_del,
      mart = ensembl
    )

    # duplication region
    filters_dup <- c("chromosome_name", "start", "end")
    values_dup <- list(chromosome_of_interest, duplication_start, duplication_end)

    genes_in_duplication <- getBM(
      attributes = attributes,
      filters = filters_dup,
      values = values_dup,
      mart = ensembl
    )

    # Load Hallmark gene sets
    H_t2g <- msigdbr(species = "Homo sapiens", category = "H")
    C5_t2g <- msigdbr(species = "Homo sapiens", category = "C5")
    C2_t2g <- msigdbr(species = "Homo sapiens", category = "C2")

    genes_to_exclude <- unique(c(genes_in_duplication$ensembl_gene_id, genes_in_deletion$ensembl_gene_id))

    H_t2g_filtered <- H_t2g[!H_t2g$ensembl_gene %in% genes_to_exclude, ] %>% dplyr::select(gs_name, entrez_gene, gs_description)

    C5_filtered <- C5_t2g[!C5_t2g$ensembl_gene %in% genes_to_exclude, ] %>% dplyr::select(gs_name, entrez_gene, gs_description)

    C2_filtered <- C2_t2g[!C2_t2g$ensembl_gene %in% genes_to_exclude, ] %>% dplyr::select(gs_name, entrez_gene, gs_description)

    # length(unique(C2_t2g$gs_name))
    # length(unique(C2_filtered$gs_name))
    # length(unique(H_t2g$gs_name))
    # length(unique(H_t2g_filtered$gs_name))

    ranked_data_PRO_versus_REV <- read.table("filtered_ranked_gene_list_PRO_versus_REV_1743794460069.tsv",
                              header = TRUE,
                              sep = "\t",
                              quote = "",
                              fill = TRUE,
                              comment.char = "")

    pvalue_cutoff <- 0.05
    n_permutations <- 100000
    ranked_genes <- setNames(ranked_data_PRO_versus_REV$SCORE, ranked_data_PRO_versus_REV$NAME)
    # Map to Entrez IDs
    entrez_ids <- mapIds(org.Hs.eg.db,
                         keys = names(ranked_genes),
                         column = "ENTREZID",
                         keytype = "SYMBOL",
                         multiVals = "first")

    # Remove unmapped genes
    ranked_genes_entrez <- ranked_genes[!is.na(entrez_ids)]
    names(ranked_genes_entrez) <- entrez_ids[!is.na(entrez_ids)]

    # Resolve ties by adding a small random number
    ranked_genes_entrez <- ranked_genes_entrez + runif(length(ranked_genes_entrez), min = -1e-5, max = 1e-5)

    ranked_genes_entrez <- sort(ranked_genes_entrez, decreasing = TRUE)
    cat("Mapped", sum(!is.na(entrez_ids)), "out of", length(entrez_ids), "genes to Entrez IDs.\n")

    ## Mapped 14138 out of 14207 genes to Entrez IDs.

    set.seed(1234)
    GSEA_H <- GSEA(geneList = ranked_genes_entrez,
                        TERM2GENE = H_t2g_filtered,
                        pvalueCutoff = 1.0,
                        eps = 0,
                        nPermSimple = n_permutations,
                        minGSSize = 15,
                        maxGSSize = 500,
                        verbose = TRUE)

    gsea_h_df <- as.data.frame(GSEA_H@result) %>%
      left_join(H_t2g_filtered %>%
                  dplyr::select(gs_name, gs_description) %>%
                  distinct(),
                by = c("ID" = "gs_name")) %>%
      mutate(geneset = "Hallmark")

    GSEA_C5 <- GSEA(geneList = ranked_genes_entrez,
                        TERM2GENE = C5_filtered,
                        pvalueCutoff = 1.0,
                        eps = 0,
                        nPermSimple = n_permutations,
                        minGSSize = 15,
                        maxGSSize = 500,
                        verbose = TRUE)
    GSEA_C2 <- GSEA(geneList = ranked_genes_entrez,
                        TERM2GENE = C2_filtered,
                        pvalueCutoff = 1.0,
                        eps = 0,
                        nPermSimple = n_permutations,
                        minGSSize = 15,
                        maxGSSize = 500,
                        verbose = TRUE)

    gsea_c5_df <- as.data.frame(GSEA_C5@result) %>%
      left_join(C5_t2g%>%
                  dplyr::select(gs_name, gs_description) %>%
                  distinct(),
                by = c("ID" = "gs_name")) %>%
      mutate(geneset = "C5")
    gsea_c2_df <- as.data.frame(GSEA_C2@result) %>%
      left_join(C2_filtered %>%
                  dplyr::select(gs_name, gs_description) %>%
                  distinct(),
                by = c("ID" = "gs_name")) %>%
      mutate(geneset = "C2")
    GSEA_result_PRO_versus_REV <- bind_rows(gsea_h_df, gsea_c2_df, gsea_c5_df) %>%
      arrange(enrichmentScore)

    GSEA_table <- GSEA_result_PRO_versus_REV %>%
      dplyr::select(-c(Description, gs_description)) %>%
      dplyr::rename("MSigDB_gene_sets" = geneset)

    # write_csv(GSEA_table, "gseaPROvsREV-wo8p-1234-noCutoff.csv")

    GSEA_table <- read_csv("gseaPROvsREV-wo8p-1234-noCutoff.csv")
    GSEA_table_all <- read_csv("gseaPROvsREV-1234-noCutoff.csv")

    # Join and compare NES direction
    compare_df <- inner_join(GSEA_table_all, GSEA_table, by = "ID", suffix = c("_all", "_filtered"))

    # Filter to only consistent NES direction
    consistent_df <- compare_df %>%
      filter(sign(NES_all) == sign(NES_filtered))

    # Check how many remain
    n_consistent <- nrow(consistent_df)

    # Optional: list of consistent shared pathways
    consistent_pathways <- consistent_df$ID

    # Output
    cat("Number of consistent pathways:", n_consistent, "\n")

    ## Number of consistent pathways: 11334

    all(sign(consistent_df$NES_all) == sign(consistent_df$NES_filtered))

    ## [1] TRUE

    fdr_mismatch <- consistent_df %>%
      filter((qvalue_all <= 0.05 & qvalue_filtered > 0.05) |
             (qvalue_all > 0.05 & qvalue_filtered <= 0.05))

    cat("Number of shared pathways with FDR ≤ 0.05 in one table but not the other:", nrow(fdr_mismatch), "\n")

    ## Number of shared pathways with FDR ≤ 0.05 in one table but not the other: 16

    opposite_nes <- compare_df %>%
      filter(sign(NES_all) != sign(NES_filtered))

    cat("Number of shared pathways with opposite NES direction:", nrow(opposite_nes), "\n")

    ## Number of shared pathways with opposite NES direction: 201

    # library(ggrepel)
    #
    # more_sig_all <- compare_df %>% filter(qvalue_all < qvalue_filtered, sign(NES_all) == sign(NES_filtered), NES_all != 0, NES_filtered != 0)
    # ggplot(compare_df, aes(x = qvalue_all, y = qvalue_filtered, label = ID)) +
    #   geom_point(size = 1, color = "grey") +
    #   geom_text_repel(
    #     data = compare_df %>% filter(qvalue_all < qvalue_filtered, sign(NES_all) == sign(NES_filtered)),
    #     aes(label = ID),
    #     size = 3,
    #     max.overlaps = 5,
    #     box.padding = 0.3,
    #     point.padding = 0.3,
    #     segment.color = "grey50"
    #   ) +
    #   geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "lightblue") +
    #   theme_minimal() +
    #   labs(
    #     title = "Q value Comparison", x = "Q in GSEA_All", y = "Q in GSEA_background"
    #   ) +
    #   theme(
    #     text = element_text(family = "Arial", face = "bold"),
    #     plot.title = element_text(size = 20, face = "bold", hjust = 0.5, family = "Arial"),
    #     axis.title = element_text(size = 12, family = "Arial"),
    #     axis.text = element_text(size = 12, family = "Arial"),
    #     axis.title.x = element_text(margin = margin(t = 20))
    #   )

    ggplot(consistent_df, aes(x = qvalue_all, y = qvalue_filtered)) +
      geom_point(size = 1, color = "darkgrey") +
      geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "lightblue") +
      theme_classic() +
      labs(
        title = "GSEA with/without 8p", x = "Q value (with 8p)", y = "Q value (without 8p)"
      ) +
      xlim(0, 1) +
      ylim(0, 1) +
      theme(
        text = element_text(family = "Arial", face = "bold"),
        plot.title = element_text(size = 20, face = "bold", hjust = 0.5, family = "Arial"),
        axis.title = element_text(size = 18, family = "Arial"),
        axis.text = element_text(size = 18, family = "Arial"),
        axis.title.x = element_text(margin = margin(t = 20))
      )

    # Spearman
    spearman_r <- cor(consistent_df$qvalue_all,
                      consistent_df$qvalue_filtered,
                      use    = "complete.obs",
                      method = "spearman")
    spearman_r

    ## [1] 0.9827097

    spearman_test <- cor.test(consistent_df$qvalue_all,
                      consistent_df$qvalue_filtered,
                              use    = "complete.obs",
                              method = "spearman")

    ## Warning in cor.test.default(consistent_df$qvalue_all,
    ## consistent_df$qvalue_filtered, : Cannot compute exact p-value with ties

    spearman_test

    ##
    ##  Spearman's rank correlation rho
    ##
    ## data:  consistent_df$qvalue_all and consistent_df$qvalue_filtered
    ## S = 4195666648, p-value < 2.2e-16
    ## alternative hypothesis: true rho is not equal to 0
    ## sample estimates:
    ##       rho
    ## 0.9827097

    # write_csv(consistent_df %>% dplyr::select(ID, qvalue_all, qvalue_filtered), "GSEA_comparison.csv")

    library(eulerr)

    consistent_df_sig <- compare_df %>%
      filter(sign(NES_all) == sign(NES_filtered)) %>%
      filter(qvalue_all <= 0.05 & qvalue_filtered <= 0.05)

    venn_data <- c(
      "GSEA with 8p" = nrow(GSEA_table_all %>% filter(qvalue <= 0.05)) - nrow(consistent_df_sig),
      "GSEA without 8p" = nrow(GSEA_table %>% filter(qvalue <= 0.05)) - nrow(consistent_df_sig),
      "GSEA with 8p&GSEA without 8p" = nrow(consistent_df_sig)
    )

    venn_euler <- euler(venn_data)
    p <- plot(
      venn_euler,
      fills = c(
        met.brewer("Cassatt2", n = 10)[4],
        met.brewer("Cassatt2", n = 10)[6]
      ),
      labels = list(font = 1, cex = 0),
      alpha = 0.7
    )

    png("euler_plot_GSEA_all.png", width = 1500, height = 1200, res = 300)
    grid::grid.newpage()
    # Draw the plot
    grid::grid.draw(p)
    # Close the file
    dev.off()

    ## quartz_off_screen
    ##                 2

## Session Info and Citations

    sessionInfo()

    ## R version 4.4.1 (2024-06-14)
    ## Platform: aarch64-apple-darwin20
    ## Running under: macOS 15.6
    ##
    ## Matrix products: default
    ## BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
    ## LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0
    ##
    ## locale:
    ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
    ##
    ## time zone: America/Los_Angeles
    ## tzcode source: internal
    ##
    ## attached base packages:
    ## [1] stats4    stats     graphics  grDevices utils     datasets  methods
    ## [8] base
    ##
    ## other attached packages:
    ##  [1] eulerr_7.0.2           MetBrewer_0.2.0        biomaRt_2.60.1
    ##  [4] msigdbr_7.5.1          enrichplot_1.24.4      org.Hs.eg.db_3.19.1
    ##  [7] AnnotationDbi_1.66.0   IRanges_2.38.1         S4Vectors_0.42.1
    ## [10] Biobase_2.64.0         BiocGenerics_0.50.0    clusterProfiler_4.12.6
    ## [13] edgeR_4.2.2            limma_3.60.6           lubridate_1.9.3
    ## [16] forcats_1.0.0          stringr_1.5.1          dplyr_1.1.4
    ## [19] purrr_1.0.2            readr_2.1.5            tidyr_1.3.1
    ## [22] tibble_3.2.1           ggplot2_3.5.1          tidyverse_2.0.0
    ## [25] readxl_1.4.3
    ##
    ## loaded via a namespace (and not attached):
    ##   [1] RColorBrewer_1.1-3      rstudioapi_0.17.1       jsonlite_1.8.9
    ##   [4] magrittr_2.0.3          farver_2.1.2            rmarkdown_2.28
    ##   [7] fs_1.6.5                zlibbioc_1.50.0         vctrs_0.6.5
    ##  [10] memoise_2.0.1           ggtree_3.12.0           progress_1.2.3
    ##  [13] htmltools_0.5.8.1       curl_5.2.3              cellranger_1.1.0
    ##  [16] gridGraphics_0.5-1      sass_0.4.9              bslib_0.8.0
    ##  [19] plyr_1.8.9              httr2_1.0.5             cachem_1.1.0
    ##  [22] igraph_2.1.1            lifecycle_1.0.4         pkgconfig_2.0.3
    ##  [25] Matrix_1.7-1            R6_2.5.1                fastmap_1.2.0
    ##  [28] gson_0.1.0              GenomeInfoDbData_1.2.12 digest_0.6.37
    ##  [31] aplot_0.2.3             colorspace_2.1-1        patchwork_1.3.0
    ##  [34] RSQLite_2.3.7           filelock_1.0.3          fansi_1.0.6
    ##  [37] timechange_0.3.0        httr_1.4.7              polyclip_1.10-7
    ##  [40] compiler_4.4.1          bit64_4.5.2             withr_3.0.2
    ##  [43] BiocParallel_1.38.0     viridis_0.6.5           DBI_1.2.3
    ##  [46] ggforce_0.4.2           R.utils_2.12.3          MASS_7.3-61
    ##  [49] rappdirs_0.3.3          tools_4.4.1             ape_5.8
    ##  [52] scatterpie_0.2.4        R.oo_1.26.0             glue_1.8.0
    ##  [55] nlme_3.1-166            GOSemSim_2.30.2         polylabelr_0.3.0
    ##  [58] grid_4.4.1              shadowtext_0.1.4        reshape2_1.4.4
    ##  [61] fgsea_1.30.0            generics_0.1.3          gtable_0.3.6
    ##  [64] tzdb_0.4.0              R.methodsS3_1.8.2       data.table_1.16.2
    ##  [67] hms_1.1.3               xml2_1.3.6              tidygraph_1.3.1
    ##  [70] utf8_1.2.4              XVector_0.44.0          ggrepel_0.9.6
    ##  [73] pillar_1.9.0            babelgene_22.9          yulab.utils_0.1.7
    ##  [76] splines_4.4.1           tweenr_2.0.3            BiocFileCache_2.12.0
    ##  [79] treeio_1.28.0           lattice_0.22-6          bit_4.5.0
    ##  [82] tidyselect_1.2.1        GO.db_3.19.1            locfit_1.5-9.10
    ##  [85] Biostrings_2.72.1       knitr_1.48              gridExtra_2.3
    ##  [88] xfun_0.48               graphlayouts_1.2.0      statmod_1.5.0
    ##  [91] stringi_1.8.4           UCSC.utils_1.0.0        lazyeval_0.2.2
    ##  [94] ggfun_0.1.7             yaml_2.3.10             evaluate_1.0.1
    ##  [97] codetools_0.2-20        ggraph_2.2.1            qvalue_2.36.0
    ## [100] ggplotify_0.1.2         cli_3.6.3               munsell_0.5.1
    ## [103] jquerylib_0.1.4         Rcpp_1.0.13             GenomeInfoDb_1.40.1
    ## [106] dbplyr_2.5.0            png_0.1-8               parallel_4.4.1
    ## [109] blob_1.2.4              prettyunits_1.2.0       DOSE_3.30.5
    ## [112] viridisLite_0.4.2       tidytree_0.4.6          scales_1.3.0
    ## [115] crayon_1.5.3            rlang_1.1.4             cowplot_1.1.3
    ## [118] fastmatch_1.1-4         KEGGREST_1.44.1

    packages_in_use <- c( names( sessionInfo()$otherPkgs ) )
    the_citations_list <- lapply( X=packages_in_use, FUN=citation)
    the_citations_list

    ## [[1]]
    ## To cite use of the eulerr R package in publications, please use:
    ##
    ##   Larsson J (2024). _eulerr: Area-Proportional Euler and Venn Diagrams
    ##   with Ellipses_. R package version 7.0.2,
    ##   <https://CRAN.R-project.org/package=eulerr>.
    ##
    ## To cite the methodology behind eulerr in publications, please use:
    ##
    ##   Larsson J, Gustafsson P (2018). "A Case Study in Fitting
    ##   Area-Proportional Euler Diagrams with Ellipses Using eulerr." In
    ##   _Proceedings of International Workshop on Set Visualization and
    ##   Reasoning_, volume 2116, 84-91.
    ##   <https://cran.r-project.org/package=eulerr>.
    ##
    ## To see these entries in BibTeX format, use 'print(<citation>,
    ## bibtex=TRUE)', 'toBibtex(.)', or set
    ## 'options(citation.bibtex.max=999)'.
    ##
    ## [[2]]
    ## To cite package 'MetBrewer' in publications use:
    ##
    ##   Mills BR (2022). _MetBrewer: Color Palettes Inspired by Works at the
    ##   Metropolitan Museum of Art_. R package version 0.2.0,
    ##   <https://CRAN.R-project.org/package=MetBrewer>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {MetBrewer: Color Palettes Inspired by Works at the Metropolitan Museum of
    ## Art},
    ##     author = {Blake Robert Mills},
    ##     year = {2022},
    ##     note = {R package version 0.2.0},
    ##     url = {https://CRAN.R-project.org/package=MetBrewer},
    ##   }
    ##
    ## ATTENTION: This citation information has been auto-generated from the
    ## package DESCRIPTION file and may need manual editing, see
    ## 'help("citation")'.
    ##
    ## [[3]]
    ## To cite the biomaRt package in publications use:
    ##
    ##   Mapping identifiers for the integration of genomic datasets with the
    ##   R/Bioconductor package biomaRt. Steffen Durinck, Paul T. Spellman,
    ##   Ewan Birney and Wolfgang Huber, Nature Protocols 4, 1184-1191 (2009).
    ##
    ##   BioMart and Bioconductor: a powerful link between biological
    ##   databases and microarray data analysis. Steffen Durinck, Yves Moreau,
    ##   Arek Kasprzyk, Sean Davis, Bart De Moor, Alvis Brazma and Wolfgang
    ##   Huber, Bioinformatics 21, 3439-3440 (2005).
    ##
    ## To see these entries in BibTeX format, use 'print(<citation>,
    ## bibtex=TRUE)', 'toBibtex(.)', or set
    ## 'options(citation.bibtex.max=999)'.
    ##
    ## [[4]]
    ## To cite package 'msigdbr' in publications use:
    ##
    ##   Dolgalev I (2022). _msigdbr: MSigDB Gene Sets for Multiple Organisms
    ##   in a Tidy Data Format_. R package version 7.5.1,
    ##   <https://CRAN.R-project.org/package=msigdbr>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {msigdbr: MSigDB Gene Sets for Multiple Organisms in a Tidy Data Format},
    ##     author = {Igor Dolgalev},
    ##     year = {2022},
    ##     note = {R package version 7.5.1},
    ##     url = {https://CRAN.R-project.org/package=msigdbr},
    ##   }
    ##
    ## [[5]]
    ## To cite package 'enrichplot' in publications use:
    ##
    ##   Yu G (2024). _enrichplot: Visualization of Functional Enrichment
    ##   Result_. doi:10.18129/B9.bioc.enrichplot
    ##   <https://doi.org/10.18129/B9.bioc.enrichplot>, R package version
    ##   1.24.4, <https://bioconductor.org/packages/enrichplot>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {enrichplot: Visualization of Functional Enrichment Result},
    ##     author = {Guangchuang Yu},
    ##     year = {2024},
    ##     note = {R package version 1.24.4},
    ##     url = {https://bioconductor.org/packages/enrichplot},
    ##     doi = {10.18129/B9.bioc.enrichplot},
    ##   }
    ##
    ## [[6]]
    ## To cite package 'org.Hs.eg.db' in publications use:
    ##
    ##   Carlson M (2024). _org.Hs.eg.db: Genome wide annotation for Human_. R
    ##   package version 3.19.1.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {org.Hs.eg.db: Genome wide annotation for Human},
    ##     author = {Marc Carlson},
    ##     year = {2024},
    ##     note = {R package version 3.19.1},
    ##   }
    ##
    ## ATTENTION: This citation information has been auto-generated from the
    ## package DESCRIPTION file and may need manual editing, see
    ## 'help("citation")'.
    ##
    ## [[7]]
    ## To cite package 'AnnotationDbi' in publications use:
    ##
    ##   Pagès H, Carlson M, Falcon S, Li N (2024). _AnnotationDbi:
    ##   Manipulation of SQLite-based annotations in Bioconductor_.
    ##   doi:10.18129/B9.bioc.AnnotationDbi
    ##   <https://doi.org/10.18129/B9.bioc.AnnotationDbi>, R package version
    ##   1.66.0, <https://bioconductor.org/packages/AnnotationDbi>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {AnnotationDbi: Manipulation of SQLite-based annotations in Bioconductor},
    ##     author = {Hervé Pagès and Marc Carlson and Seth Falcon and Nianhua Li},
    ##     year = {2024},
    ##     note = {R package version 1.66.0},
    ##     url = {https://bioconductor.org/packages/AnnotationDbi},
    ##     doi = {10.18129/B9.bioc.AnnotationDbi},
    ##   }
    ##
    ## ATTENTION: This citation information has been auto-generated from the
    ## package DESCRIPTION file and may need manual editing, see
    ## 'help("citation")'.
    ##
    ## [[8]]
    ## To cite package 'IRanges' in publications use:
    ##
    ##   Lawrence M, Huber W, Pag\`es H, Aboyoun P, Carlson M, et al. (2013)
    ##   Software for Computing and Annotating Genomic Ranges. PLoS Comput
    ##   Biol 9(8): e1003118. doi:10.1371/journal.pcbi.1003118
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Article{,
    ##     title = {Software for Computing and Annotating Genomic Ranges},
    ##     author = {Michael Lawrence and Wolfgang Huber and Herv\'e Pag\`es and Patrick Aboyoun and Marc Carlson and Robert Gentleman and Martin Morgan and Vincent Carey},
    ##     year = {2013},
    ##     journal = {{PLoS} Computational Biology},
    ##     volume = {9},
    ##     issue = {8},
    ##     doi = {10.1371/journal.pcbi.1003118},
    ##     url = {http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1003118},
    ##   }
    ##
    ## [[9]]
    ## To cite package 'S4Vectors' in publications use:
    ##
    ##   Pagès H, Lawrence M, Aboyoun P (2024). _S4Vectors: Foundation of
    ##   vector-like and list-like containers in Bioconductor_.
    ##   doi:10.18129/B9.bioc.S4Vectors
    ##   <https://doi.org/10.18129/B9.bioc.S4Vectors>, R package version
    ##   0.42.1, <https://bioconductor.org/packages/S4Vectors>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {S4Vectors: Foundation of vector-like and list-like containers in
    ## Bioconductor},
    ##     author = {Hervé Pagès and Michael Lawrence and Patrick Aboyoun},
    ##     year = {2024},
    ##     note = {R package version 0.42.1},
    ##     url = {https://bioconductor.org/packages/S4Vectors},
    ##     doi = {10.18129/B9.bioc.S4Vectors},
    ##   }
    ##
    ## [[10]]
    ## To cite package 'Biobase' in publications use:
    ##
    ##   Orchestrating high-throughput genomic analysis with Bioconductor. W.
    ##   Huber, V.J. Carey, R. Gentleman, ..., M. Morgan Nature Methods,
    ##   2015:12, 115.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Article{,
    ##     author = {W. Huber and V. J. Carey and R. Gentleman and S. Anders and M. Carlson and B. S. Carvalho and H. C. Bravo and S. Davis and L. Gatto and T. Girke and R. Gottardo and F. Hahne and K. D. Hansen and R. A. Irizarry and M. Lawrence and M. I. Love and J. MacDonald and V. Obenchain and A. K. {Ole's} and H. {Pag`es} and A. Reyes and P. Shannon and G. K. Smyth and D. Tenenbaum and L. Waldron and M. Morgan},
    ##     title = {{O}rchestrating high-throughput genomic analysis with {B}ioconductor},
    ##     journal = {Nature Methods},
    ##     year = {2015},
    ##     volume = {12},
    ##     number = {2},
    ##     pages = {115--121},
    ##     url = {http://www.nature.com/nmeth/journal/v12/n2/full/nmeth.3252.html},
    ##   }
    ##
    ## [[11]]
    ## To cite package 'BiocGenerics' in publications use:
    ##
    ##   Orchestrating high-throughput genomic analysis with Bioconductor. W.
    ##   Huber, V.J. Carey, R. Gentleman, ..., M. Morgan Nature Methods,
    ##   2015:12, 115.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Article{,
    ##     author = {{Huber} and {W.} and {Carey} and V. J. and {Gentleman} and {R.} and {Anders} and {S.} and {Carlson} and {M.} and {Carvalho} and B. S. and {Bravo} and H. C. and {Davis} and {S.} and {Gatto} and {L.} and {Girke} and {T.} and {Gottardo} and {R.} and {Hahne} and {F.} and {Hansen} and K. D. and {Irizarry} and R. A. and {Lawrence} and {M.} and {Love} and M. I. and {MacDonald} and {J.} and {Obenchain} and {V.} and {{Ole's}} and A. K. and {{Pag`es}} and {H.} and {Reyes} and {A.} and {Shannon} and {P.} and {Smyth} and G. K. and {Tenenbaum} and {D.} and {Waldron} and {L.} and {Morgan} and {M.}},
    ##     title = {{O}rchestrating high-throughput genomic analysis with {B}ioconductor},
    ##     journal = {Nature Methods},
    ##     year = {2015},
    ##     volume = {12},
    ##     number = {2},
    ##     pages = {115--121},
    ##     url = {http://www.nature.com/nmeth/journal/v12/n2/full/nmeth.3252.html},
    ##   }
    ##
    ## [[12]]
    ## Please cite S. Xu (2024) for using clusterProfiler. In addition, please
    ## cite G. Yu (2010) when using GOSemSim, G. Yu (2015) when using DOSE and
    ## G. Yu (2015) when using ChIPseeker.
    ##
    ##   S Xu, E Hu, Y Cai, Z Xie, X Luo, L Zhan, W Tang, Q Wang, B Liu, R
    ##   Wang, W Xie, T Wu, L Xie, G Yu. Using clusterProfiler to characterize
    ##   multiomics data. Nature Protocols. 2024,
    ##   doi:10.1038/s41596-024-01020-z
    ##
    ##   T Wu, E Hu, S Xu, M Chen, P Guo, Z Dai, T Feng, L Zhou, W Tang, L
    ##   Zhan, X Fu, S Liu, X Bo, and G Yu. clusterProfiler 4.0: A universal
    ##   enrichment tool for interpreting omics data. The Innovation. 2021,
    ##   2(3):100141
    ##
    ##   Guangchuang Yu, Li-Gen Wang, Yanyan Han and Qing-Yu He.
    ##   clusterProfiler: an R package for comparing biological themes among
    ##   gene clusters. OMICS: A Journal of Integrative Biology 2012,
    ##   16(5):284-287
    ##
    ## To see these entries in BibTeX format, use 'print(<citation>,
    ## bibtex=TRUE)', 'toBibtex(.)', or set
    ## 'options(citation.bibtex.max=999)'.
    ##
    ## [[13]]
    ## See Section 1.2 in the User's Guide for more detail about how to cite
    ## the different edgeR pipelines.
    ##
    ##   Chen Y, Chen L, Lun ATL, Baldoni PL, Smyth GK (2024). edgeR 4.0:
    ##   powerful differential analysis of sequencing data with expanded
    ##   functionality and improved support for small counts and larger
    ##   datasets. bioRxiv doi: 10.1101/2024.01.21.576131
    ##
    ##   Chen Y, Lun ATL, Smyth GK (2016). From reads to genes to pathways:
    ##   differential expression analysis of RNA-Seq experiments using
    ##   Rsubread and the edgeR quasi-likelihood pipeline. F1000Research 5,
    ##   1438
    ##
    ##   McCarthy DJ, Chen Y and Smyth GK (2012). Differential expression
    ##   analysis of multifactor RNA-Seq experiments with respect to
    ##   biological variation. Nucleic Acids Research 40(10), 4288-4297
    ##
    ##   Robinson MD, McCarthy DJ and Smyth GK (2010). edgeR: a Bioconductor
    ##   package for differential expression analysis of digital gene
    ##   expression data. Bioinformatics 26(1), 139-140
    ##
    ## To see these entries in BibTeX format, use 'print(<citation>,
    ## bibtex=TRUE)', 'toBibtex(.)', or set
    ## 'options(citation.bibtex.max=999)'.
    ##
    ## [[14]]
    ## To cite package 'limma' in publications use:
    ##
    ##   Ritchie, M.E., Phipson, B., Wu, D., Hu, Y., Law, C.W., Shi, W., and
    ##   Smyth, G.K. (2015). limma powers differential expression analyses for
    ##   RNA-sequencing and microarray studies. Nucleic Acids Research 43(7),
    ##   e47.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Article{,
    ##     author = {Matthew E Ritchie and Belinda Phipson and Di Wu and Yifang Hu and Charity W Law and Wei Shi and Gordon K Smyth},
    ##     title = {{limma} powers differential expression analyses for {RNA}-sequencing and microarray studies},
    ##     journal = {Nucleic Acids Research},
    ##     year = {2015},
    ##     volume = {43},
    ##     number = {7},
    ##     pages = {e47},
    ##     doi = {10.1093/nar/gkv007},
    ##   }
    ##
    ## [[15]]
    ## To cite lubridate in publications use:
    ##
    ##   Garrett Grolemund, Hadley Wickham (2011). Dates and Times Made Easy
    ##   with lubridate. Journal of Statistical Software, 40(3), 1-25. URL
    ##   https://www.jstatsoft.org/v40/i03/.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Article{,
    ##     title = {Dates and Times Made Easy with {lubridate}},
    ##     author = {Garrett Grolemund and Hadley Wickham},
    ##     journal = {Journal of Statistical Software},
    ##     year = {2011},
    ##     volume = {40},
    ##     number = {3},
    ##     pages = {1--25},
    ##     url = {https://www.jstatsoft.org/v40/i03/},
    ##   }
    ##
    ## [[16]]
    ## To cite package 'forcats' in publications use:
    ##
    ##   Wickham H (2023). _forcats: Tools for Working with Categorical
    ##   Variables (Factors)_. R package version 1.0.0,
    ##   <https://CRAN.R-project.org/package=forcats>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {forcats: Tools for Working with Categorical Variables (Factors)},
    ##     author = {Hadley Wickham},
    ##     year = {2023},
    ##     note = {R package version 1.0.0},
    ##     url = {https://CRAN.R-project.org/package=forcats},
    ##   }
    ##
    ## [[17]]
    ## To cite package 'stringr' in publications use:
    ##
    ##   Wickham H (2023). _stringr: Simple, Consistent Wrappers for Common
    ##   String Operations_. R package version 1.5.1,
    ##   <https://CRAN.R-project.org/package=stringr>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {stringr: Simple, Consistent Wrappers for Common String Operations},
    ##     author = {Hadley Wickham},
    ##     year = {2023},
    ##     note = {R package version 1.5.1},
    ##     url = {https://CRAN.R-project.org/package=stringr},
    ##   }
    ##
    ## [[18]]
    ## To cite package 'dplyr' in publications use:
    ##
    ##   Wickham H, François R, Henry L, Müller K, Vaughan D (2023). _dplyr: A
    ##   Grammar of Data Manipulation_. R package version 1.1.4,
    ##   <https://CRAN.R-project.org/package=dplyr>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {dplyr: A Grammar of Data Manipulation},
    ##     author = {Hadley Wickham and Romain François and Lionel Henry and Kirill Müller and Davis Vaughan},
    ##     year = {2023},
    ##     note = {R package version 1.1.4},
    ##     url = {https://CRAN.R-project.org/package=dplyr},
    ##   }
    ##
    ## [[19]]
    ## To cite package 'purrr' in publications use:
    ##
    ##   Wickham H, Henry L (2023). _purrr: Functional Programming Tools_. R
    ##   package version 1.0.2, <https://CRAN.R-project.org/package=purrr>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {purrr: Functional Programming Tools},
    ##     author = {Hadley Wickham and Lionel Henry},
    ##     year = {2023},
    ##     note = {R package version 1.0.2},
    ##     url = {https://CRAN.R-project.org/package=purrr},
    ##   }
    ##
    ## [[20]]
    ## To cite package 'readr' in publications use:
    ##
    ##   Wickham H, Hester J, Bryan J (2024). _readr: Read Rectangular Text
    ##   Data_. R package version 2.1.5,
    ##   <https://CRAN.R-project.org/package=readr>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {readr: Read Rectangular Text Data},
    ##     author = {Hadley Wickham and Jim Hester and Jennifer Bryan},
    ##     year = {2024},
    ##     note = {R package version 2.1.5},
    ##     url = {https://CRAN.R-project.org/package=readr},
    ##   }
    ##
    ## [[21]]
    ## To cite package 'tidyr' in publications use:
    ##
    ##   Wickham H, Vaughan D, Girlich M (2024). _tidyr: Tidy Messy Data_. R
    ##   package version 1.3.1, <https://CRAN.R-project.org/package=tidyr>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {tidyr: Tidy Messy Data},
    ##     author = {Hadley Wickham and Davis Vaughan and Maximilian Girlich},
    ##     year = {2024},
    ##     note = {R package version 1.3.1},
    ##     url = {https://CRAN.R-project.org/package=tidyr},
    ##   }
    ##
    ## [[22]]
    ## To cite package 'tibble' in publications use:
    ##
    ##   Müller K, Wickham H (2023). _tibble: Simple Data Frames_. R package
    ##   version 3.2.1, <https://CRAN.R-project.org/package=tibble>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {tibble: Simple Data Frames},
    ##     author = {Kirill Müller and Hadley Wickham},
    ##     year = {2023},
    ##     note = {R package version 3.2.1},
    ##     url = {https://CRAN.R-project.org/package=tibble},
    ##   }
    ##
    ## [[23]]
    ## To cite ggplot2 in publications, please use
    ##
    ##   H. Wickham. ggplot2: Elegant Graphics for Data Analysis.
    ##   Springer-Verlag New York, 2016.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Book{,
    ##     author = {Hadley Wickham},
    ##     title = {ggplot2: Elegant Graphics for Data Analysis},
    ##     publisher = {Springer-Verlag New York},
    ##     year = {2016},
    ##     isbn = {978-3-319-24277-4},
    ##     url = {https://ggplot2.tidyverse.org},
    ##   }
    ##
    ## [[24]]
    ## To cite package 'tidyverse' in publications use:
    ##
    ##   Wickham H, Averick M, Bryan J, Chang W, McGowan LD, François R,
    ##   Grolemund G, Hayes A, Henry L, Hester J, Kuhn M, Pedersen TL, Miller
    ##   E, Bache SM, Müller K, Ooms J, Robinson D, Seidel DP, Spinu V,
    ##   Takahashi K, Vaughan D, Wilke C, Woo K, Yutani H (2019). "Welcome to
    ##   the tidyverse." _Journal of Open Source Software_, *4*(43), 1686.
    ##   doi:10.21105/joss.01686 <https://doi.org/10.21105/joss.01686>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Article{,
    ##     title = {Welcome to the {tidyverse}},
    ##     author = {Hadley Wickham and Mara Averick and Jennifer Bryan and Winston Chang and Lucy D'Agostino McGowan and Romain François and Garrett Grolemund and Alex Hayes and Lionel Henry and Jim Hester and Max Kuhn and Thomas Lin Pedersen and Evan Miller and Stephan Milton Bache and Kirill Müller and Jeroen Ooms and David Robinson and Dana Paige Seidel and Vitalie Spinu and Kohske Takahashi and Davis Vaughan and Claus Wilke and Kara Woo and Hiroaki Yutani},
    ##     year = {2019},
    ##     journal = {Journal of Open Source Software},
    ##     volume = {4},
    ##     number = {43},
    ##     pages = {1686},
    ##     doi = {10.21105/joss.01686},
    ##   }
    ##
    ## [[25]]
    ## To cite package 'readxl' in publications use:
    ##
    ##   Wickham H, Bryan J (2023). _readxl: Read Excel Files_. R package
    ##   version 1.4.3, <https://CRAN.R-project.org/package=readxl>.
    ##
    ## A BibTeX entry for LaTeX users is
    ##
    ##   @Manual{,
    ##     title = {readxl: Read Excel Files},
    ##     author = {Hadley Wickham and Jennifer Bryan},
    ##     year = {2023},
    ##     note = {R package version 1.4.3},
    ##     url = {https://CRAN.R-project.org/package=readxl},
    ##   }