The tuberculosis R/Bioconductor package features tuberculosis gene expression data for machine learning. All human samples from GEO that did not come from cell lines, were not taken postmortem, and did not feature recombination have been included. The package has more than 10,000 samples from both microarray and sequencing studies that have been processed from raw data through a hyper-standardized, reproducible pipeline.
tuberculosis 1.13.0
To fully understand the provenance of data in the tuberculosis R/Bioconductor package, please see the tuberculosis.pipeline GitHub repository; however, all users beyond the extremely curious can ignore these details without consequence. Yet, a brief summary of data processing is appropriate here. Microarray data were processed from raw files (e.g. CEL
files) and background corrected using the normal-exponential method and the saddle-point approximation to maximum likelihood as implemented in the limma R/Bioconductor package; no normalization of expression values was done; where platforms necessitated it, the RMA (robust multichip average) algorithm without background correction or normalization was used to generate an expression matrix. Sequencing data were processed from raw files (i.e. fastq
files) using the nf-core/rnaseq pipeline inside a Singularity container; the GRCh38 genome build was used for alignment. Gene names for both microarray and sequencing data are HGNC-approved GRCh38 gene names from the genenames.org REST API.
To install tuberculosis from Bioconductor, use BiocManager as follows.
BiocManager::install("tuberculosis")
To install tuberculosis from GitHub, use BiocManager as follows.
BiocManager::install("schifferl/tuberculosis", dependencies = TRUE, build_vignettes = TRUE)
Most users should simply install tuberculosis from Bioconductor.
To use the package without double colon syntax, it should be loaded as follows.
library(tuberculosis)
The package is lightweight, with few dependencies, and contains no data itself.
To find data, users will use the tuberculosis
function with a regular expression pattern to list available resources. The resources are organized by GEO series accession numbers. If multiple platforms were used in a single study, the platform accession number follows the series accession number and is separated by a dash. The date before the series accession number denotes the date the resource was created.
tuberculosis("GSE103147")
## 2021-09-15.GSE103147
The function will print the names of matching resources as a message and return them invisibly as a character vector. To see all available resources use "."
for the pattern
argument.
To get data, users will also use the tuberculosis
function, but with an additional argument, dryrun = FALSE
. This will either download resources from ExperimentHub or load them from the user’s local cache. If a resource has multiple creation dates, the most recent is selected by default; add a date to override this behavior.
tuberculosis("GSE103147", dryrun = FALSE)
## $`2021-09-15.GSE103147`
## class: SummarizedExperiment
## dim: 24353 1649
## metadata(0):
## assays(1): exprs
## rownames(24353): A1BG A1BG-AS1 ... ZZEF1 ZZZ3
## rowData names(0):
## colnames(1649): SRR5980424 SRR5980425 ... SRR5982072 SRR5982073
## colData names(0):
The function returns a list
of SummarizedExperiment
objects, each with a single assay, exprs
, where the rows are features (genes) and the columns are observations (samples). If multiple resources are requested, multiple resources will be returned, each as a list
element.
tuberculosis("GSE10799.", dryrun = FALSE)
## $`2021-09-15.GSE107991`
## class: SummarizedExperiment
## dim: 24353 54
## metadata(0):
## assays(1): exprs
## rownames(24353): A1BG A1BG-AS1 ... ZZEF1 ZZZ3
## rowData names(0):
## colnames(54): SRR6369879 SRR6369880 ... SRR6369931 SRR6369932
## colData names(0):
##
## $`2021-09-15.GSE107992`
## class: SummarizedExperiment
## dim: 24353 47
## metadata(0):
## assays(1): exprs
## rownames(24353): A1BG A1BG-AS1 ... ZZEF1 ZZZ3
## rowData names(0):
## colnames(47): SRR6369945 SRR6369946 ... SRR6369990 SRR6369991
## colData names(0):
##
## $`2021-09-15.GSE107993`
## class: SummarizedExperiment
## dim: 24353 138
## metadata(0):
## assays(1): exprs
## rownames(24353): A1BG A1BG-AS1 ... ZZEF1 ZZZ3
## rowData names(0):
## colnames(138): SRR6370167 SRR6370168 ... SRR6370303 SRR6370304
## colData names(0):
##
## $`2021-09-15.GSE107994`
## class: SummarizedExperiment
## dim: 24353 175
## metadata(0):
## assays(1): exprs
## rownames(24353): A1BG A1BG-AS1 ... ZZEF1 ZZZ3
## rowData names(0):
## colnames(175): SRR6369992 SRR6369993 ... SRR6370165 SRR6370166
## colData names(0):
##
## $`2021-09-15.GSE107995`
## class: SummarizedExperiment
## dim: 24353 414
## metadata(0):
## assays(1): exprs
## rownames(24353): A1BG A1BG-AS1 ... ZZEF1 ZZZ3
## rowData names(0):
## colnames(414): SRR6369879 SRR6369880 ... SRR6370303 SRR6370304
## colData names(0):
The assay
of each SummarizedExperiment
object is named exprs
rather than counts
because it can come from either a microarray or a sequencing platform. If colnames
begin with GSE
, data comes from a microarray platform; if colnames
begin with SRR
, data comes from a sequencing platform.
The SummarizedExperiment
objects do not have sample metadata as colData
, and this limits their use to unsupervised analyses for the time being. Sample metadata are currently undergoing manual curation, with the same level of diligence that was applied in data processing, and will be included in the package when they are ready.
No Bioconductor package is complete without at least a miniature demonstration analysis, but it is difficult to provide any substantial machine learning analysis without the necessary labels. Therefore, a only a dimension reduction, that is by no means machine learning, is provided here for example with the expectation that it will be replaced in the future.
The largest resource available in the tuberculosis package comes from GEO series accession GSE103147
, data that was originally published by Zak et al. in 2016.1 Zak, D. E. et al. A blood RNA signature for tuberculosis disease risk: a prospective cohort study. Lancet 387, 2312–2322 (2016) To download this data for use in dimension reduction, the tuberculosis
function is used; then, magrittr::use_series
is used to select the SummarizedExperiment
object from the list
that was returned.
zak_data <-
tuberculosis("GSE103147", dryrun = FALSE) |>
magrittr::use_series("2021-09-15.GSE103147")
Even though they are not used, the sample identifiers (i.e. column names) of the zak_data
will become the row names of the UMAP data.frame
, and they are serialized below for use in setting row names later.
row_names <-
base::colnames(zak_data)
Serialization is also done for column names, only they are created using purrr::map_chr
instead. The embedding will be in two dimensions, therefore axis labels, UMAP1
and UMAP2
, are created.
col_names <-
purrr::map_chr(1:2, ~ base::paste("UMAP", .x, sep = ""))
The scater package is used to calculate UMAP coordinates, which are piped to magrittr to set the row and column names. Once the matrix
returned by scater::calculateUMAP
is coerced to a data.frame
, ggplot2 is used to plot the embedding and hrbrthemes is used for theming.
scater::calculateUMAP(zak_data, exprs_values = "exprs") |>
magrittr::set_rownames(row_names) |>
magrittr::set_colnames(col_names) |>
base::as.data.frame() |>
ggplot2::ggplot(mapping = ggplot2::aes(UMAP1, UMAP2)) +
ggplot2::geom_point() +
hrbrthemes::theme_ipsum()
The embedding displays four distinct clusters, perhaps pertaining to stages of progression of tuberculosis infection as distinct classes; although, definitive conclusions are difficult to make without sufficient labeling of clinical sequelae. Again, as stated above, such labels are currently being curated, and will be included in the package when they are ready.
utils::sessionInfo()
## R Under development (unstable) (2024-10-21 r87258)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.21-bioc/R/lib/libRblas.so
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_GB 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: America/New_York
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] tuberculosis_1.13.0 SummarizedExperiment_1.37.0
## [3] Biobase_2.67.0 GenomicRanges_1.59.0
## [5] GenomeInfoDb_1.43.0 IRanges_2.41.0
## [7] S4Vectors_0.45.0 BiocGenerics_0.53.1
## [9] generics_0.1.3 MatrixGenerics_1.19.0
## [11] matrixStats_1.4.1 BiocStyle_2.35.0
##
## loaded via a namespace (and not attached):
## [1] DBI_1.2.3 gridExtra_2.3
## [3] rlang_1.1.4 magrittr_2.0.3
## [5] hrbrthemes_0.8.7 scater_1.35.0
## [7] compiler_4.5.0 RSQLite_2.3.7
## [9] systemfonts_1.1.0 png_0.1-8
## [11] vctrs_0.6.5 stringr_1.5.1
## [13] pkgconfig_2.0.3 crayon_1.5.3
## [15] fastmap_1.2.0 magick_2.8.5
## [17] dbplyr_2.5.0 XVector_0.47.0
## [19] labeling_0.4.3 scuttle_1.17.0
## [21] utf8_1.2.4 rmarkdown_2.29
## [23] UCSC.utils_1.3.0 ggbeeswarm_0.7.2
## [25] tinytex_0.54 purrr_1.0.2
## [27] bit_4.5.0 xfun_0.49
## [29] zlibbioc_1.53.0 cachem_1.1.0
## [31] beachmat_2.23.0 jsonlite_1.8.9
## [33] blob_1.2.4 highr_0.11
## [35] DelayedArray_0.33.1 BiocParallel_1.41.0
## [37] irlba_2.3.5.1 parallel_4.5.0
## [39] R6_2.5.1 bslib_0.8.0
## [41] stringi_1.8.4 extrafontdb_1.0
## [43] jquerylib_0.1.4 Rcpp_1.0.13-1
## [45] bookdown_0.41 knitr_1.48
## [47] extrafont_0.19 FNN_1.1.4.1
## [49] Matrix_1.7-1 tidyselect_1.2.1
## [51] abind_1.4-8 yaml_2.3.10
## [53] viridis_0.6.5 codetools_0.2-20
## [55] curl_5.2.3 lattice_0.22-6
## [57] tibble_3.2.1 withr_3.0.2
## [59] KEGGREST_1.47.0 evaluate_1.0.1
## [61] BiocFileCache_2.15.0 ExperimentHub_2.15.0
## [63] Biostrings_2.75.0 pillar_1.9.0
## [65] BiocManager_1.30.25 filelock_1.0.3
## [67] BiocVersion_3.21.1 ggplot2_3.5.1
## [69] munsell_0.5.1 scales_1.3.0
## [71] glue_1.8.0 gdtools_0.4.1
## [73] tools_4.5.0 AnnotationHub_3.15.0
## [75] BiocNeighbors_2.1.0 ScaledMatrix_1.15.0
## [77] grid_4.5.0 tidyr_1.3.1
## [79] Rttf2pt1_1.3.12 AnnotationDbi_1.69.0
## [81] colorspace_2.1-1 SingleCellExperiment_1.29.0
## [83] GenomeInfoDbData_1.2.13 beeswarm_0.4.0
## [85] BiocSingular_1.23.0 vipor_0.4.7
## [87] cli_3.6.3 rsvd_1.0.5
## [89] rappdirs_0.3.3 fontBitstreamVera_0.1.1
## [91] fansi_1.0.6 viridisLite_0.4.2
## [93] S4Arrays_1.7.1 dplyr_1.1.4
## [95] uwot_0.2.2 gtable_0.3.6
## [97] fontquiver_0.2.1 sass_0.4.9
## [99] digest_0.6.37 SparseArray_1.7.0
## [101] ggrepel_0.9.6 farver_2.1.2
## [103] memoise_2.0.1 htmltools_0.5.8.1
## [105] lifecycle_1.0.4 httr_1.4.7
## [107] mime_0.12 fontLiberation_0.1.0
## [109] bit64_4.5.2