In cancer studies, many works propose transcriptional signatures as good indicators of cancer processes, for their potential to show cancer ongoing activities and that can be used for patient stratification. For these reasons, they are considered potentially useful to guide therapeutic decisions and monitoring interventions. Moreover, transcriptional signatures of RNA-seq experiments are also used to assess the complex relations between the tumor and its microenvironment. In recent years, the new technologies for transcriptome detection (single-cell RNA-seq and spatial transcriptomics) highlighted the highly heterogeneous behaviour of this disease and, as a result, the need to dissect its complexity.
Each of these signatures has a specific gene set (and eventually a
set of coefficients to differently weight the gene contributions) whose
expression levels are combined in a single-sample score. And each
signature has its own method to define the computation of the score.
Despite much evidence that computational implementations are useful to
improve data applicability and dissemination, the vast majority of
signatures in literature are not published along with a computational
code and only few of them have been implemented in a software, virtuous
examples are: the R package consensusOV
, dedicated to the
TCGA ovarian cancer signature; and the R package genefu
which hosts some of the most popular signatures of breast cancer.
signifinder
provides an easy and fast computation of
several published signatures. Firstly, users can see all the signatures
collected so far in the package, with all the useful information and a
description on how to properly interpret the scores. Then, users can
decide which signature they want to compute on their dataset. To be
easily integrated in the expression data analysis pipelines,
signifinder
works with the Bioconductor data structures
(SummarizedExperiment
, SingleCellExperiment
and SpatialExperiment
).
Also, several visualization functions are implemented to visualize the scores. These can help in the result interpretations: users can not only browse single signatures independently but also compare them with each other.
To install this package:
The criteria for the inclusion of the signatures are: (i) signatures should rely on cancer topics, and be developed and used on cancer samples; (ii) signatures must exclusively use transcriptomic data; (iii) the original paper must state the gene list used for the signature definition, where all genes have an official gene symbol (Hugo consortium) or an unambiguous translation (genes without an official gene symbol are removed); (iv) the method to calculate the score must be unambiguously described. While it may not ever be possible to include all cancer signatures proposed in the literature, our package makes easy the addition of new signatures (by us or by others via “pull requests”, see Adding new signatures).
The input expression dataset must be normalized RNA-Seq counts (or
normalized data matrix from microarrays) of bulk transcriptomics data,
single-cell transcriptomics data or spatial transcriptomics data. They
should be provided in the form of a matrix, a data frame or a
SummarizedExperiment
(and respectively
SingleCellExperiment
/SpatialExperiment
) where
rows correspond to genes and columns correspond to samples. In the last
case, the name of the assay containing the normalized values should be
“norm_expr” (users can also choose another name, but it should be
specified in the whichAssay
argument). Regardless the input
type class, the output data is a SummarizedExperiment
(SingleCellExperiment
/SpatialExperiment
) where
the scores computed are put in the colData
section.
Gene IDs in the input data can either be gene symbols, NCBI entrez or
ensembl gene IDs. Users must say which of the three identifiers they use
(SYMBOL, ENTREZID or ENSEMBL) to let the package convert the signature
gene lists (nametype
argument inside the signature
functions). When a signature is computed a message is shown that says
the percentage of genes found in the input data compared to the original
list. There is no minimum threshold of genes for signatures to be
computed, but a warning
will be given if there are less
than the 30% of signature genes. After a signature has been calculated
it is possible to visually inspect signature gene expressions using
geneHeatmapSignPlot
(see Signature goodness).
Furthermore, the original works also specify the type of expression
value (e.g. normalized value, TPM (transcript per million), log(TPM),
etc…) that should be used to compute the signature. Therefore, during
signature computation, data type should be eventually converted as
reported in the original work. When using signifinder
,
users must supply the input data in the form of normalised
counts (or normalised arrays) and, for the signatures
which require this, a data transformation step will be automatically
performed. The transformed data matrix will be included in the output as
an additional assay and the name of the assay will be the name of the
conversion (i.e. “TPM”, “CPM” or “FPKM”). Alternatively, if the input
data is a SummarizedExperiment
object that already contains
(in addition to the normalized count) also an assay of the transformed
data, this will be used directly. Note that in order to be used they
must be called “TPM”, “CPM” or “FPKM”. Finally, included signatures have
been developed both from array and RNA-seq data, therefore it is
crucially important for users to specify the type of input data:
“microarray” or “rnaseq” (inputType
argument inside the
signature functions). In signifinder
, signatures developed
with microarray can be applied to RNA-seq data but not vice versa due to
input type conversions.
In the following section, we use an example bulk expression dataset
of ovarian cancer to show how to use signifinder
with a
standard workflow.
# loading packages
library(SummarizedExperiment)
library(signifinder)
library(dplyr)
data(ovse)
ovse
## class: SummarizedExperiment
## dim: 3180 40
## metadata(0):
## assays(4): norm_expr TPM CPM FPKM
## rownames(3180): ABL2 ACADM ... TMSB4Y USP9Y
## rowData names(0):
## colnames(40): sample1 sample2 ... sample39 sample40
## colData names(42): OV_subtype os ... APM_Wang ADO_Sidders
We can check all the signatures available in the package with the
function availableSignatures
.
The function returns a data frame with all the signatures included in the package and for each signature the following information:
colData
1 | |
---|---|
signature | EMT_Miow |
scoreLabel | EMT_Miow_Epithelial, EMT_Miow_Mesenchymal |
functionName | EMTSign |
topic | epithelial to mesenchymal |
tumor | ovarian cancer |
tissue | ovary |
cellType | bulk |
requiredInput | microarray, rnaseq |
transformationStep | normArray, normCounts |
author | Miow |
reference | Miow Q. et al. Oncogene (2015) |
description | Double score obtained with ssGSEA to establish the epithelial- and the mesenchymal-like status in ovarian cancer patients. |
We can also interrogate the table asking which signatures are available for a specific tissue (e.g. ovary).
signature | scoreLabel | functionName | topic | tumor | tissue | cellType | requiredInput | transformationStep | author | reference | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | EMT_Miow | EMT_Miow_Epithelial, EMT_Miow_Mesenchymal | EMTSign | epithelial to mesenchymal | ovarian cancer | ovary | bulk | microarray, rnaseq | normArray, normCounts | Miow | Miow Q. et al. Oncogene (2015) |
5 | Pyroptosis_Ye | Pyroptosis_Ye | pyroptosisSign | pyroptosis | ovarian cancer | ovary | bulk | rnaseq | FPKM | Ye | Ye Y. et al. Cell Death Discov. (2021) |
9 | Ferroptosis_Ye | Ferroptosis_Ye | ferroptosisSign | ferroptosis | ovarian cancer | ovary | bulk | microarray, rnaseq | normArray, FPKM | Ye | Ye Y. et al. Front. Mol. Biosci. (2021) |
13 | LipidMetabolism_Zheng | LipidMetabolism_Zheng | lipidMetabolismSign | metabolism | epithelial ovarian cancer | ovary | bulk | rnaseq | normCounts | Zheng | Zheng M. et al. Int. J. Mol. Sci. (2020) |
15 | ImmunoScore_Hao | ImmunoScore_Hao | immunoScoreSign | immune system | epithelial ovarian cancer | ovary | bulk | microarray, rnaseq | normArray, log2(FPKM+0.01) | Hao | Hao D. et al. Clin Cancer Res (2018) |
17 | ConsensusOV_Chen | ConsensusOV_Chen_IMR, ConsensusOV_Chen_DIF, ConsensusOV_Chen_PRO, ConsensusOV_Chen_MES | consensusOVSign | ovarian subtypes | high-grade serous ovarian carcinoma | ovary | bulk | microarray, rnaseq | normArray, normCounts | Chen | Chen G.M. et al. Clin Cancer Res (2018) |
19 | Matrisome_Yuzhalin | Matrisome_Yuzhalin | matrisomeSign | extracellular matrix | ovarian cystadenocarcinoma, gastric adenocarcinoma, colorectal adenocarcinoma, lung adenocarcinoma | ovary, lung, stomach, colon | bulk | microarray, rnaseq | normArray, normCounts | Yuzhalin | Yuzhalin A. et al. Br J Cancer (2018) |
45 | HRDS_Lu | HRDS_Lu | HRDSSign | chromosomal instability | ovarian cancer, breast cancer | ovary, breast | bulk | microarray, rnaseq | normArray, normCounts | Lu | Lu J. et al. J Mol Med (2014) |
47 | DNArep_Kang | DNArep_Kang | DNArepSign | chromosomal instability | serous ovarian cystadenocarcinoma | ovary | bulk | microarray, rnaseq | normArray, log2(normCount+1) | Kang | Kang J. et al. JNCI (2012) |
48 | IPSOV_Shen | IPSOV_Shen | IPSOVSign | immune system | ovarian cancer | ovary | bulk | microarray, rnaseq | normArray, log2(normCount+1) | Shen | Shen S. et al. EBiomed (2019) |
60 | LRRC15CAF_Dominguez | LRRC15CAF_Dominguez | LRRC15CAFSign | cancer associated fibroblasts | pancreatic adenocarcinoma, breast cancer, lung cancer, ovarian cancer, colon cancer, renal cancer, esophageal cancer, stomach adenocarcinoma, bladder cancer, head and neck squamous cell carcinoma | pancreas, breast, lung, ovary, colon, kidney, esophagus, stomach, bladder, head and neck | bulk | rnaseq | log2(normCounts+1) | Dominguez | Dominguez C.X. et al. Cancer Discovery (2020) |
63 | COXIS_Bonavita | COXIS_Bonavita | COXISSign | immune system | melanoma, bladder cancer, gastric cancer, clear cell renal cancer, ovarian cancer, cervical cancer, breast cancer (TNBC), lung cancer, head and neck squamous cell carcinoma | skin, bladder, stomach, kidney, ovary, cervix, breast, lung, head and neck | bulk | rnaseq | log2(normCounts+1) | Bonavita | Bonavita E. et al. Immunity (2020) |
Once we have found a signature of interest, we can compute it by
using the corresponding function (indicated in the
functionName
field of availableSignatures
table). All the signature functions require the expression data and to
indicate the type of input data (inputType
equal to
“rnaseq” or “microarray”). Data are supposed to be the normalized
expression values.
## ferroptosisSignYe is using 100% of signature genes
Some signatures are grouped in the same function by cancer topic even
if they deal with different cancer types and computation approaches. We
can unequivocally choose the one we are interested in by stating the
first author of the signature (indicated in the author
field of availableSignatures
table). E.g., currently, there
are four different epithelial-to-mesenchymal transition (EMT) signatures
implemented inside the EMTSign
function (“Miow”, “Mak”,
“Cheng” or “Thompson”). We can choose which one to compute stating the
author
argument:
## EMTSignMiow is using 96% of epithelial signature genes
## EMTSignMiow is using 91% of mesenchymal signature genes
## ! 3 genes with constant values throughout the samples
In this way, “EMT_Miow” is computed. Regardless the expression input
type, the output data of all the signature functions is a
SummarizedExperiment
with the computed signature scores in
the colData
. Thus, the returned object can be resubmitted
as input data to another signature function and will be returned as well
with the addition of the new signature in the colData
.
We can also compute multiple signatures at once with the function
multipleSign
. We can specify which signatures we are
interested in through the use of the arguments tissue
,
tumor
and/or topic
to define the signature
list to compute. E.g. here below we compute all the available signature
for ovary and pan-tissue:
## EMTSignMiow is using 96% of epithelial signature genes
## EMTSignMiow is using 91% of mesenchymal signature genes
## ! 3 genes with constant values throughout the samples
## EMTSignMak is using 96% of epithelial signature genes
## EMTSignMak is using 100% of mesenchymal signature genes
## pyroptosisSignYe is using 86% of signature genes
## ferroptosisSignYe is using 100% of signature genes
## lipidMetabolismSign is using 100% of signature genes
## hypoxiaSign is using 92% of signature genes
## immunoScoreSignHao is using 100% of signature genes
## immunoScoreSignRoh is using 100% of signature genes
## 'select()' returned 1:1 mapping between keys and columns
## Loading training data
## Training Random Forest...
## IPSSign is using 98% of signature genes
## matrisomeSign is using 100% of signature genes
## mitoticIndexSign is using 100% of signature genes
## ImmuneCytSignRooney is using 100% of signature genes
## IFNSign is using 100% of signature genes
## expandedImmuneSign is using 100% of signature genes
## TinflamSign is using 100% of signature genes
## CINSign is using 96% of signature genes
## CINSign is using 94% of signature genes
## cellCycleSignLundberg is using 93% of signature genes
## cellCycleSignDavoli is using 100% of signature genes
## ASCSign is using 92% of signature genes
## ImmuneCytSignDavoli is using 100% of signature genes
## ChemokineSign is using 100% of signature genes
## ECMSign is using 100% of up signature genes
## ECMSign is using 93% of down signature genes
## ! 3 genes with constant values throughout the samples
## HRDSSign is using 89% of signature genes
## VEGFSign is using 100% of signature genes
## DNArepSign is using 87% of signature genes
## IPSOVSign is using 100% of signature genes
## ! Duplicated gene IDs removed from gene set Antimicrobials
## ! Some gene sets have size one. Consider setting minSize > 1
## APMSign is using 100% of signature genes
## ! 3 genes with constant values throughout the samples
## ! Genes with constant values are discarded
## APMSignWang raised an error:
## No identifiers in the gene sets could be matched to the identifiers in the expression data.
## Therefore it was omitted
## ADOSign is using 100% of signature genes
## ! 3 genes with constant values throughout the samples
## ! Genes with constant values are discarded
## ADOSignSidders raised an error:
## No identifiers in the gene sets could be matched to the identifiers in the expression data.
## Therefore it was omitted
## LRRC15CAFSign is using 100% of signature genes
## Warning in scoreSingleSamples(gdb, datasetm, methods = "ewm"): 3 row(s) removed
## from expression object (y) due to 0sd
## COXISSign is using 83% of signature genes
Here below, instead, we compute all the available signature for ovary, pan-tissue and that are related to the immune system activity:
ovse <- multipleSign(dataset = ovse, inputType = "rnaseq",
tissue = c("ovary", "pan-tissue"),
topic = "immune system")
## immunoScoreSignHao is using 100% of signature genes
## immunoScoreSignRoh is using 100% of signature genes
## IPSSign is using 98% of signature genes
## ImmuneCytSignRooney is using 100% of signature genes
## IFNSign is using 100% of signature genes
## expandedImmuneSign is using 100% of signature genes
## TinflamSign is using 100% of signature genes
## ImmuneCytSignDavoli is using 100% of signature genes
## ChemokineSign is using 100% of signature genes
## IPSOVSign is using 100% of signature genes
## ! Duplicated gene IDs removed from gene set Antimicrobials
## ! Some gene sets have size one. Consider setting minSize > 1
## APMSign is using 100% of signature genes
## ! 3 genes with constant values throughout the samples
## ! Genes with constant values are discarded
## APMSignWang raised an error:
## No identifiers in the gene sets could be matched to the identifiers in the expression data.
## Therefore it was omitted
## COXISSign is using 83% of signature genes
Alternatively, we can state exactly the signature names using the
whichSign
argument.
## EMTSignMiow is using 96% of epithelial signature genes
## EMTSignMiow is using 91% of mesenchymal signature genes
## ! 3 genes with constant values throughout the samples
## IPSOVSign is using 100% of signature genes
## ! Duplicated gene IDs removed from gene set Antimicrobials
## ! Some gene sets have size one. Consider setting minSize > 1
When computing a signature on a dataset we always have to keep in
mind that not all the signature genes may be present in the dataset.
Also, these may have many zero values or other issues affecting the
goodness of a specific signature for the dataset. We can inspect some
signature’s technical parameters to evaluate their reliability for the
analysed dataset. First, users can access the complete gene list of a
signature with the function getSignGenes
, that returns a
dataframe object with “SYMBOL” in the first column. Some signatures have
also additional columns: “coeff” for coefficients that weigh the gene
contributions; “class” for a classification that divides the signature
in two or more groups. Few signatures have other specific columns.
## SYMBOL
## 1 RRAGD
## 2 FABP5
## 3 UCHL1
## 4 GAL
## 5 PLOD1
## 6 DDIT4
## 7 VEGFA
## 8 ADM
## 9 ANGPTL4
## 10 NDRG1
## 11 SLC16A3
## 12 FLVCR2
## SYMBOL coeff
## 1 AIM2 -0.187
## 2 PLCG1 0.068
## 3 ELANE 0.097
## 4 PJVK -0.143
## 5 CASP3 -0.086
## 6 CASP6 -0.033
## 7 GSDMA 0.130
## SYMBOL class
## 1 CDH1 epithelial
## 2 CDH3 epithelial
## 3 CLDN4 epithelial
## 4 EPCAM epithelial
## 5 ST14 epithelial
## 6 MAL2 epithelial
## 7 VIM mesenchymal
## 8 SNAI2 mesenchymal
## 9 ZEB2 mesenchymal
## 10 FN1 mesenchymal
## 11 MMP2 mesenchymal
## 12 AGER mesenchymal
Second, the evaluationSignPlot
function returns a
multipanel plot that shows for each signature: (i) a value of the
goodness of a signature for the user’s dataset. This goes from 0, worst
goodness, to 100, best goodness, and is a combination of the parameters
shown in the other pannels; (ii) the percentage of genes from the
signature gene list that are actually available in the dataset; (iii)
the percentage of zero values in the signature genes, for each sample;
(iv) the correlation between signature scores and the sample total read
counts; (v) the correlation between signature scores and the percentage
of the sample total zero values.
Third, users may be also interested in visually exploring the
expression values of the genes involved in a signature. In this case, we
can use geneHeatmapSignPlot
to visualize them. It generates
a heatmap of the expression values with genes on the rows and samples on
the columns.
Further, the function is not restricted to the visualization of only one signature, and we can also plot the expression values of genes from multiple signatures, also evaluating the gene list intersections. Since each signature has its own method to compute the score then to plot several signatures together the scores are transformed into z-score, individually for each signature.
Each signature computed can be explored using the
oneSignPlot
function to visualize both the score and the
density distribution.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
To easily investigate the relation across multiple signatures,
signifinder
provides a function to easily show the pairwise
correlations of the signatures (correlationSignPlot
). The
whichSign
argument could be set to specify which signatures
should be plotted. When it is not stated all signatures are used.
Green-blue colors represent anticorrelations while orange-red scale is
for positive correlations. Then, signatures are clustered to group
together higher related ones.
We can compare scores across different signatures with the
hetmapSignPlot
function. Since each signature has its own
method to compute the score then to plot several signatures together the
scores are transformed into z-score, individually for each signature.
The whichSign
argument could be set to specify which
signatures should be plotted. When it is not stated all signatures are
used.
Users may also be interested in seeing how signatures are sorted in
relation to only one or few of them. In this case, we can pass one or
few signatures to the clusterBySign
argument that will be
used to cluster samples. Furthermore, users can add to the plot external
sample annotations or plot the internal signature annotations
(“signature”, “topic”, “tumor” or “tissue”).
Using the function survivalSignPlot
we can test the
association with survival of a signature. The function needs a data
frame with the patient survival time data. survivalSignPlot
uses a Kaplan-Meier curve to test if patients with high or low values of
the signature have differences in survival time. Different cut points of
the signature score can be indicated through the argument
cutpoint
to define the two patient groups.
mysurvData <- cbind(ovse$os, ovse$status)
rownames(mysurvData) <- rownames(colData(ovse))
head(mysurvData)
## [,1] [,2]
## sample1 NA 0
## sample2 1720 1
## sample3 887 1
## sample4 547 1
## sample5 260 0
## sample6 1069 1
survivalSignPlot(data = ovse, survData = mysurvData,
whichSign = "Pyroptosis_Ye", cutpoint = "optimal")
## Warning in geom_segment(aes(x = 0, y = max(y2), xend = max(x1), yend = max(y2)), : All aesthetics have length 1, but the data has 2 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
## All aesthetics have length 1, but the data has 2 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
## All aesthetics have length 1, but the data has 2 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
## All aesthetics have length 1, but the data has 2 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
Finally, we can plot ridge lines with one or multiple signatures, also grouping samples by external annotations if needed. Since each signature has its own method to compute the score then to plot several signatures together the scores are transformed into z-score, individually for each signature.
## Picking joint bandwidth of 0.405
## Picking joint bandwidth of 0.24
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_density_ridges()`).
Here, we present the results obtained with other two example datasets; one for single-cell transcriptomics and one for spatial transcriptomics.
We report here the results obtained using the single-cell transcriptomics dataset coming from a glioblastoma tissue of Darmanis et al. (GEO ID: GSE84465, Darmanis, S. et al. Single-Cell RNA-Seq Analysis of Infiltrating Neoplastic Cells at the Migrating Front of Human Glioblastoma. Cell Rep 21, 1399–1410 (2017)). We focused on the cells coming from the BT_S2 patient, that were labeled as immune cells, neoplastic or oligodendrocyte precursor cells (OPC) and that come from both the core and the periphery of the tumor.
We computed all the signatures for “brain” and “pan-tissue” that are
available in signifinder running the command multipleSign
setting inputType = "rnaseq"
and
tissue = c("brain", "pan-tissue")
. Then, we performed a
t-SNE and plotted the signature scores. Here, we can see the ridge plot
and the t-SNE colored by some of the signatures computed, all cells or
separately for different cell types.
We used the spatial transcriptomic dataset “Human Breast Cancer:
Ductal Carcinoma In Situ, Invasive Carcinoma (FFPE)”, included in the
10x Genomics Visium Spatial Gene Expression data, from the 10x website
(https://www.10xgenomics.com). A manual annotation of the
tissue area was performed and used to annotate the spots. We computed
all the signatures for “breast” and “pan-tissue” cancers available in
signifinder running the command multipleSign
setting
inputType = "rnaseq"
and
tissue = c("breast", "pan-tissue")
. Here, we show the ridge
plot and the spatial distribution of scores obtained for the
Hipoxia_Buffa signature.
Please contact us if you have a gene expression signature that you
would like to see added to the signifinder
package. You can
write us an email ([email protected]) or open an issue in https://github.com/CaluraLab/signifinder/issues. The
more difficult/custom the implementation, the better, as its inclusion
in this package will provide more value for other users in the
R/Bioconductor community.
Here is the output of sessionInfo() on the system on which this document was compiled.
## R version 4.4.1 (2024-06-14)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Etc/UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] dplyr_1.1.4 signifinder_1.9.0
## [3] SummarizedExperiment_1.36.0 Biobase_2.67.0
## [5] GenomicRanges_1.59.0 GenomeInfoDb_1.43.0
## [7] IRanges_2.41.0 S4Vectors_0.44.0
## [9] BiocGenerics_0.53.1 generics_0.1.3
## [11] MatrixGenerics_1.19.0 matrixStats_1.4.1
## [13] BiocStyle_2.35.0
##
## loaded via a namespace (and not attached):
## [1] ggtext_0.1.2
## [2] ProtGenerics_1.39.0
## [3] GSVA_2.1.0
## [4] bitops_1.0-9
## [5] lubridate_1.9.3
## [6] httr_1.4.7
## [7] RColorBrewer_1.1-3
## [8] doParallel_1.0.17
## [9] tools_4.4.1
## [10] backports_1.5.0
## [11] utf8_1.2.4
## [12] R6_2.5.1
## [13] HDF5Array_1.35.1
## [14] lazyeval_0.2.2
## [15] mgcv_1.9-1
## [16] rhdf5filters_1.18.0
## [17] GetoptLong_1.0.5
## [18] withr_3.0.2
## [19] gridExtra_2.3
## [20] cli_3.6.3
## [21] exactRankTests_0.8-35
## [22] labeling_0.4.3
## [23] sass_0.4.9
## [24] mvtnorm_1.3-1
## [25] survMisc_0.5.6
## [26] readr_2.1.5
## [27] randomForest_4.7-1.2
## [28] ggridges_0.5.6
## [29] commonmark_1.9.2
## [30] Rsamtools_2.22.0
## [31] systemfonts_1.1.0
## [32] svglite_2.1.3
## [33] maps_3.4.2
## [34] limma_3.63.0
## [35] rstudioapi_0.17.1
## [36] RSQLite_2.3.7
## [37] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2
## [38] shape_1.4.6.1
## [39] BiocIO_1.17.0
## [40] consensusOV_1.29.0
## [41] car_3.1-3
## [42] Matrix_1.7-1
## [43] interp_1.1-6
## [44] fansi_1.0.6
## [45] abind_1.4-8
## [46] lifecycle_1.0.4
## [47] yaml_2.3.10
## [48] edgeR_4.4.0
## [49] carData_3.0-5
## [50] rhdf5_2.50.0
## [51] SparseArray_1.6.0
## [52] grid_4.4.1
## [53] blob_1.2.4
## [54] crayon_1.5.3
## [55] lattice_0.22-6
## [56] beachmat_2.23.0
## [57] cowplot_1.1.3
## [58] GenomicFeatures_1.59.0
## [59] annotate_1.85.0
## [60] KEGGREST_1.47.0
## [61] mapproj_1.2.11
## [62] magick_2.8.5
## [63] sys_3.4.3
## [64] maketools_1.3.1
## [65] pillar_1.9.0
## [66] knitr_1.48
## [67] ComplexHeatmap_2.23.0
## [68] rjson_0.2.23
## [69] codetools_0.2-20
## [70] glue_1.8.0
## [71] data.table_1.16.2
## [72] vctrs_0.6.5
## [73] png_0.1-8
## [74] gtable_0.3.6
## [75] assertthat_0.2.1
## [76] cachem_1.1.0
## [77] xfun_0.48
## [78] S4Arrays_1.6.0
## [79] survival_3.7-0
## [80] SingleCellExperiment_1.28.0
## [81] iterators_1.0.14
## [82] KMsurv_0.1-5
## [83] statmod_1.5.0
## [84] nlme_3.1-166
## [85] bit64_4.5.2
## [86] openair_2.18-2
## [87] bslib_0.8.0
## [88] maxstat_0.7-25
## [89] irlba_2.3.5.1
## [90] colorspace_2.1-1
## [91] DBI_1.2.3
## [92] tidyselect_1.2.1
## [93] bit_4.5.0
## [94] compiler_4.4.1
## [95] curl_5.2.3
## [96] ontologyIndex_2.12
## [97] graph_1.85.0
## [98] xml2_1.3.6
## [99] DelayedArray_0.33.1
## [100] plotly_4.10.4
## [101] rtracklayer_1.66.0
## [102] checkmate_2.3.2
## [103] scales_1.3.0
## [104] hexbin_1.28.4
## [105] stringr_1.5.1
## [106] SpatialExperiment_1.16.0
## [107] digest_0.6.37
## [108] rmarkdown_2.28
## [109] sparrow_1.12.0
## [110] XVector_0.46.0
## [111] htmltools_0.5.8.1
## [112] pkgconfig_2.0.3
## [113] jpeg_0.1-10
## [114] DGEobj.utils_1.0.6
## [115] sparseMatrixStats_1.18.0
## [116] highr_0.11
## [117] fastmap_1.2.0
## [118] ensembldb_2.31.0
## [119] rlang_1.1.4
## [120] GlobalOptions_0.1.2
## [121] htmlwidgets_1.6.4
## [122] UCSC.utils_1.2.0
## [123] DelayedMatrixStats_1.29.0
## [124] farver_2.1.2
## [125] jquerylib_0.1.4
## [126] zoo_1.8-12
## [127] jsonlite_1.8.9
## [128] BiocParallel_1.41.0
## [129] BiocSingular_1.23.0
## [130] RCurl_1.98-1.16
## [131] magrittr_2.0.3
## [132] kableExtra_1.4.0
## [133] Formula_1.2-5
## [134] GenomeInfoDbData_1.2.13
## [135] patchwork_1.3.0
## [136] Rhdf5lib_1.28.0
## [137] munsell_0.5.1
## [138] Rcpp_1.0.13
## [139] babelgene_22.9
## [140] viridis_0.6.5
## [141] stringi_1.8.4
## [142] zlibbioc_1.52.0
## [143] MASS_7.3-61
## [144] plyr_1.8.9
## [145] org.Hs.eg.db_3.20.0
## [146] parallel_4.4.1
## [147] deldir_2.0-4
## [148] survminer_0.5.0
## [149] Biostrings_2.75.0
## [150] splines_4.4.1
## [151] gridtext_0.1.5
## [152] hms_1.1.3
## [153] circlize_0.4.16
## [154] locfit_1.5-9.10
## [155] ggpubr_0.6.0
## [156] markdown_1.13
## [157] ggsignif_0.6.4
## [158] buildtools_1.0.0
## [159] ScaledMatrix_1.14.0
## [160] DGEobj_1.1.2
## [161] XML_3.99-0.17
## [162] evaluate_1.0.1
## [163] latticeExtra_0.6-30
## [164] BiocManager_1.30.25
## [165] tzdb_0.4.0
## [166] foreach_1.5.2
## [167] tidyr_1.3.1
## [168] purrr_1.0.2
## [169] km.ci_0.5-6
## [170] clue_0.3-65
## [171] ggplot2_3.5.1
## [172] rsvd_1.0.5
## [173] broom_1.0.7
## [174] xtable_1.8-4
## [175] restfulr_0.0.15
## [176] AnnotationFilter_1.31.0
## [177] rstatix_0.7.2
## [178] viridisLite_0.4.2
## [179] TxDb.Hsapiens.UCSC.hg38.knownGene_3.20.0
## [180] tibble_3.2.1
## [181] memoise_2.0.1
## [182] AnnotationDbi_1.69.0
## [183] GenomicAlignments_1.43.0
## [184] cluster_2.1.6
## [185] timechange_0.3.0
## [186] BiocSet_1.21.0
## [187] GSEABase_1.69.0