deconvR 1.13.0
Recent studies associated the differences of cell-type proportions may be
correlated to certain phenotypes, such as cancer. Therefore, the demand for the
development of computational methods to predict cell type proportions increased.
Hereby, we developed deconvR
, a collection of functions designed for analyzing
deconvolution of the bulk sample(s) using an atlas of reference omic signature
profiles and a user-selected model. We wanted to give users an option to extend
their reference atlas. Users can create new reference atlases using
findSignatures
or extend their atlas by adding more cell types. Additionally, we
included BSMeth2Probe
to make mapping whole-genome bisulfite sequencing data
to their probe IDs easier. So users can map WGBS methylation data (as in
methylKit or GRanges object format) to probe IDs, and the results of
this mapping can be used as the bulk samples in the deconvolution. We also
included a comprehensive DNA methylation atlas of 25 different cell types to use
in the main function deconvolute
. deconvolute
allows the user to specify
their desired deconvolution model (non-negative least squares regression,
support vector regression, quadratic programming, or robust linear regression),
and returns a dataframe which contains predicted cell-type proportions of bulk
methylation profiles, as well as partial R-squared values for each sample.
As an another option, users can generate a simulated table of a desired number
of samples, with either user-specified or random origin proportions using
simulateCellMix
. simulateCellMix
returns a second data frame called
proportions
, which contains the actual cell-type proportions of the simulated
sample. It can be used for testing the accuracy of the deconvolution by
comparing these actual proportions to the proportions predicted by
deconvolute
.
deconvolute
returns partial R-squares, to check if deconvolution brings
advantages on top of the basic bimodal profiles. The reference matrix usually
follows a bimodal distribution in the case of methylation, and taking the
average of the rows of methylation matrix might give a pretty similar profile
to the bulk methylation profile you are trying to deconvolute. If the
deconvolution is advantageous, partial R-squared is expect to be high.
The deconvR package can be installed from Bioconductor with:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("deconvR")
The comprehensive human methylome reference atlas created by Moss et al. 1 Moss,
J. et al. (2018). Comprehensive human cell-type methylation atlas reveals
origins of circulating cell-free DNA in health and disease. Nature
communications, 9(1), 1-12. https://doi.org/10.1038/s41467-018-07466-6 can be
used as the reference atlas parameter for several functions in this package.
This atlas was modified to remove duplicate CpG loci before being included in
the package as the dataframe. The dataframe is composed of 25 human cell types
and roughly 6000 CpG loci, identified by their Illumina Probe ID. For each cell
type and CpG locus, a methylation value between 0 and 1 is provided. This value
represents the fraction of methylated bases of the CpG locus. The atlas
therefore provides a unique methylation pattern for each cell type and can be
directly used as reference
in deconvolute
and simulateCellMix
, and atlas
in findSignatures
. Below is an example dataframe to illustrate the atlas
format.
library(deconvR)
data("HumanCellTypeMethAtlas")
head(HumanCellTypeMethAtlas[,1:5])
## IDs Monocytes_EPIC B.cells_EPIC CD4T.cells_EPIC NK.cells_EPIC
## 1 cg08169020 0.8866 0.2615 0.0149 0.0777
## 2 cg25913761 0.8363 0.2210 0.2816 0.4705
## 3 cg26955540 0.7658 0.0222 0.1492 0.4005
## 4 cg25170017 0.8861 0.5116 0.1021 0.4363
## 5 cg12827637 0.5212 0.3614 0.0227 0.2120
## 6 cg19442545 0.2013 0.1137 0.0608 0.0410
The GRanges object IlluminaMethEpicB5ProbeIDs
contains the Illumina probe
IDs of 400000 genomic loci (identified using the “seqnames”, “ranges”, and
“strand” values). This object is based off of the Infinium MethylationEPIC v1.0
B5 Manifest data. Unnecessary columns were removed and rows were truncated to
reduce file size before converting the file to a GRanges object. It can be
used directly as probe_id_locations
in BSmeth2Probe
.
data("IlluminaMethEpicB5ProbeIDs")
head(IlluminaMethEpicB5ProbeIDs)
## GRanges object with 6 ranges and 1 metadata column:
## seqnames ranges strand | ID
## <Rle> <IRanges> <Rle> | <character>
## [1] chr19 5236005-5236006 + | cg07881041
## [2] chr20 63216298-63216299 + | cg18478105
## [3] chr1 6781065-6781066 + | cg23229610
## [4] chr2 197438742-197438743 - | cg03513874
## [5] chrX 24054523-24054524 + | cg09835024
## [6] chr14 93114794-93114795 - | cg05451842
## -------
## seqinfo: 25 sequences from an unspecified genome; no seqlengths
As mentioned in the introduction section, users can extend their reference atlas
to incorporate new data. Or may combine different reference atlases to construct
a more comprehensive one. This can be done using the findSignatures
function.
In this example, since we don’t have any additional reference atlas, we will add
simulated data as a new cell type to reference atlas for example purposes.
First, ensure that atlas
(the signature matrix to be extended) and samples
(the new data to be added to the signature matrix) are compliant with the
function requirements. Below illustrates the samples
format.
samples <- simulateCellMix(3,reference = HumanCellTypeMethAtlas)$simulated
head(samples)
## IDs Sample 1 Sample 2 Sample 3
## 1 cg08169020 0.14982432 0.07556039 0.20606291
## 2 cg25913761 0.31737098 0.28265831 0.29672757
## 3 cg26955540 0.20533525 0.18092524 0.18983084
## 4 cg25170017 0.20297793 0.17543124 0.28180963
## 5 cg12827637 0.13888065 0.11207662 0.16272229
## 6 cg19442545 0.06333193 0.05279778 0.05962664
sampleMeta
should include all sample names in samples
, and specify the
origins they should be mapped to when added to atlas
.
sampleMeta <- data.table("Experiment_accession" = colnames(samples)[-1],
"Biosample_term_name" = "new cell type")
head(sampleMeta)
## Experiment_accession Biosample_term_name
## <char> <char>
## 1: Sample 1 new cell type
## 2: Sample 2 new cell type
## 3: Sample 3 new cell type
Use findSignatures
to extend the matrix.
extended_matrix <- findSignatures(samples = samples,
sampleMeta = sampleMeta,
atlas = HumanCellTypeMethAtlas,
IDs = "IDs")
## CELL TYPES IN EXTENDED ATLAS:
## new cell type
## Monocytes_EPIC
## B.cells_EPIC
## CD4T.cells_EPIC
## NK.cells_EPIC
## CD8T.cells_EPIC
## Neutrophils_EPIC
## Erythrocyte_progenitors
## Adipocytes
## Cortical_neurons
## Hepatocytes
## Lung_cells
## Pancreatic_beta_cells
## Pancreatic_acinar_cells
## Pancreatic_duct_cells
## Vascular_endothelial_cells
## Colon_epithelial_cells
## Left_atrium
## Bladder
## Breast
## Head_and_neck_larynx
## Kidney
## Prostate
## Thyroid
## Upper_GI
## Uterus_cervix
head(extended_matrix)
## IDs new_cell_type Monocytes_EPIC B.cells_EPIC CD4T.cells_EPIC
## 1 cg08169020 0.14381587 0.8866 0.2615 0.0149
## 2 cg25913761 0.29891896 0.8363 0.2210 0.2816
## 3 cg26955540 0.19203044 0.7658 0.0222 0.1492
## 4 cg25170017 0.22007294 0.8861 0.5116 0.1021
## 5 cg12827637 0.13789318 0.5212 0.3614 0.0227
## 6 cg19442545 0.05858545 0.2013 0.1137 0.0608
## NK.cells_EPIC CD8T.cells_EPIC Neutrophils_EPIC Erythrocyte_progenitors
## 1 0.0777 0.0164 0.8680 0.9509
## 2 0.4705 0.3961 0.8293 0.2385
## 3 0.4005 0.3474 0.7915 0.1374
## 4 0.4363 0.0875 0.7042 0.9447
## 5 0.2120 0.0225 0.5368 0.4667
## 6 0.0410 0.0668 0.1952 0.1601
## Adipocytes Cortical_neurons Hepatocytes Lung_cells Pancreatic_beta_cells
## 1 0.0336 0.0168 0.0340 0.0416 0.038875
## 2 0.3578 0.3104 0.2389 0.2250 0.132000
## 3 0.1965 0.0978 0.0338 0.0768 0.041725
## 4 0.0842 0.2832 0.2259 0.0544 0.111750
## 5 0.0287 0.1368 0.0307 0.1607 0.065975
## 6 0.0364 0.0222 0.1574 0.0122 0.003825
## Pancreatic_acinar_cells Pancreatic_duct_cells Vascular_endothelial_cells
## 1 0.0209 0.0130 0.0323
## 2 0.2249 0.1996 0.3654
## 3 0.0314 0.0139 0.2382
## 4 0.0309 0.0217 0.0972
## 5 0.0370 0.0230 0.0798
## 6 0.0378 0.0347 0.0470
## Colon_epithelial_cells Left_atrium Bladder Breast Head_and_neck_larynx Kidney
## 1 0.0163 0.0386 0.0462 0.0264 0.0470 0.0269
## 2 0.2037 0.2446 0.2054 0.1922 0.2045 0.1596
## 3 0.0193 0.1134 0.1269 0.1651 0.1523 0.1034
## 4 0.0187 0.0674 0.0769 0.0691 0.0704 0.0604
## 5 0.0193 0.0432 0.0459 0.0228 0.0687 0.0234
## 6 0.0193 0.0287 0.0246 0.0081 0.0098 0.0309
## Prostate Thyroid Upper_GI Uterus_cervix
## 1 0.0353 0.0553 0.0701 0.0344
## 2 0.1557 0.1848 0.1680 0.2026
## 3 0.0686 0.0943 0.1298 0.1075
## 4 0.0369 0.0412 0.0924 0.0697
## 5 0.0508 0.0726 0.0759 0.0196
## 6 0.0055 0.0188 0.0090 0.0166
WGBS methylation data first needs to be mapped to probes using BSmeth2Probe
before being deconvoluted. The methylation data WGBS_data
in BSmeth2Probe
may be either a GRanges object or a methylKit object.
Format of WGBS_data
as GRanges object:
load(system.file("extdata", "WGBS_GRanges.rda",
package = "deconvR"))
head(WGBS_GRanges)
## GRanges object with 6 ranges and 1 metadata column:
## seqnames ranges strand | sample1
## <Rle> <IRanges> <Rle> | <numeric>
## [1] chr1 47176 + | 0.833333
## [2] chr1 47177 - | 0.818182
## [3] chr1 47205 + | 0.681818
## [4] chr1 47206 - | 0.583333
## [5] chr1 47362 + | 0.416667
## [6] chr1 49271 + | 0.733333
## -------
## seqinfo: 1 sequence from an unspecified genome; no seqlengths
or as methylKit object:
head(methylKit::methRead(system.file("extdata", "test1.myCpG.txt",
package = "methylKit"),
sample.id="test", assembly="hg18",
treatment=1, context="CpG", mincov = 0))
## chr start end strand coverage numCs numTs
## 1 chr21 9764513 9764513 - 12 0 12
## 2 chr21 9764539 9764539 - 12 3 9
## 3 chr21 9820622 9820622 + 13 0 13
## 4 chr21 9837545 9837545 + 11 0 11
## 5 chr21 9849022 9849022 + 124 90 34
## 6 chr21 9853296 9853296 + 17 10 7
probe_id_locations
contains information needed to map cellular loci to probe IDs
data("IlluminaMethEpicB5ProbeIDs")
head(IlluminaMethEpicB5ProbeIDs)
## GRanges object with 6 ranges and 1 metadata column:
## seqnames ranges strand | ID
## <Rle> <IRanges> <Rle> | <character>
## [1] chr19 5236005-5236006 + | cg07881041
## [2] chr20 63216298-63216299 + | cg18478105
## [3] chr1 6781065-6781066 + | cg23229610
## [4] chr2 197438742-197438743 - | cg03513874
## [5] chrX 24054523-24054524 + | cg09835024
## [6] chr14 93114794-93114795 - | cg05451842
## -------
## seqinfo: 25 sequences from an unspecified genome; no seqlengths
Use BSmeth2Probe
to map WGBS data to probe IDs.
mapped_WGBS_data <- BSmeth2Probe(probe_id_locations = IlluminaMethEpicB5ProbeIDs,
WGBS_data = WGBS_GRanges,
multipleMapping = TRUE,
cutoff = 10)
head(mapped_WGBS_data)
## IDs sample1
## 1 cg00305774 1.0000000
## 2 cg00546078 0.8181818
## 3 cg00546307 0.5454545
## 4 cg00546971 0.5000000
## 5 cg00774867 0.8461538
## 6 cg00830435 0.9166667
This mapped data can now be used in deconvolute
. Here we will deconvolute it
using the previously extended signature matrix as the reference atlas.
deconvolution <- deconvolute(reference = HumanCellTypeMethAtlas,
bulk = mapped_WGBS_data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9963 0.9963 0.9963 0.9963 0.9963 0.9963
deconvolution$proportions
## Monocytes_EPIC B.cells_EPIC CD4T.cells_EPIC NK.cells_EPIC
## sample1 0 0 0 0
## CD8T.cells_EPIC Neutrophils_EPIC Erythrocyte_progenitors Adipocytes
## sample1 0 0 0 0.5011789
## Cortical_neurons Hepatocytes Lung_cells Pancreatic_beta_cells
## sample1 0.2917357 0 0 0
## Pancreatic_acinar_cells Pancreatic_duct_cells
## sample1 0 0
## Vascular_endothelial_cells Colon_epithelial_cells Left_atrium Bladder
## sample1 0 0.001012524 0 0
## Breast Head_and_neck_larynx Kidney Prostate Thyroid Upper_GI
## sample1 0 0.2060729 0 0 0 0
## Uterus_cervix
## sample1 0
Alternatively, users can set tissueSpecCpGs as TRUE to construct tissue based methylation signature matrix by using the reference atlas. Here, we used simulated samples to construct tissue specific signature matrix since we don’t have tissue specific samples.
data("HumanCellTypeMethAtlas")
exampleSamples <- simulateCellMix(1,reference = HumanCellTypeMethAtlas)$simulated
exampleMeta <- data.table("Experiment_accession" = "example_sample",
"Biosample_term_name" = "example_cell_type")
colnames(exampleSamples) <- c("CpGs", "example_sample")
colnames(HumanCellTypeMethAtlas)[1] <- c("CpGs")
signatures <- findSignatures(
samples = exampleSamples,
sampleMeta = exampleMeta,
atlas = HumanCellTypeMethAtlas,
IDs = "CpGs", K = 100, tissueSpecCpGs = TRUE)
## CELL TYPES IN EXTENDED ATLAS:
## example_cell_type
## Monocytes_EPIC
## B.cells_EPIC
## CD4T.cells_EPIC
## NK.cells_EPIC
## CD8T.cells_EPIC
## Neutrophils_EPIC
## Erythrocyte_progenitors
## Adipocytes
## Cortical_neurons
## Hepatocytes
## Lung_cells
## Pancreatic_beta_cells
## Pancreatic_acinar_cells
## Pancreatic_duct_cells
## Vascular_endothelial_cells
## Colon_epithelial_cells
## Left_atrium
## Bladder
## Breast
## Head_and_neck_larynx
## Kidney
## Prostate
## Thyroid
## Upper_GI
## Uterus_cervix
print(head(signatures[[2]]))
## $hyper
## cg08169020 cg26955540 cg25170017 cg12827637 cg15838173 cg04858631 cg19442545
## 0.23057273 0.16712416 0.16502156 0.15938223 0.14555151 0.14539359 0.14209941
## cg10560079 cg00982136 cg22017733 cg26460530 cg24082121 cg13677741 cg09642825
## 0.13849375 0.13344067 0.12773323 0.12715142 0.12362925 0.12360512 0.12252392
## cg01424562 cg15376996 cg14789659 cg19300307 cg11895835 cg14785464 cg06340704
## 0.12162365 0.11870391 0.11654367 0.11527854 0.11497962 0.11492887 0.11476811
## cg12474798 cg18856478 cg27189395 cg05507654 cg26033520 cg05056497 cg06167719
## 0.11464559 0.11441833 0.11392236 0.11354659 0.11333244 0.11224488 0.11173809
## cg05258935 cg20684110 cg00936790 cg25913761 cg24275356 cg23220823 cg08857351
## 0.11154152 0.11130857 0.11130852 0.11111063 0.11086926 0.11076540 0.11073570
## cg08474651 cg27395200 cg14855367 cg10509607 cg22879098 cg22897141 cg23247274
## 0.11072509 0.11027546 0.10980104 0.10960442 0.10915740 0.10907524 0.10895072
## cg03254916 cg08063160 cg08425810 cg09267773 cg27388962 cg08832851 cg02962602
## 0.10876907 0.10873658 0.10820076 0.10816939 0.10797971 0.10777090 0.10771594
## cg03711944 cg10361922 cg26953232 cg26757820 cg04913246 cg08257293 cg16416715
## 0.10759695 0.10724467 0.10717456 0.10714333 0.10713346 0.10690917 0.10675106
## cg26047334 cg14057303 cg25158622 cg11975790 cg14845962 cg08367326 cg16127573
## 0.10670888 0.10612149 0.10575074 0.10575072 0.10510640 0.10472681 0.10460068
## cg27312961 cg05043794 cg15014975 cg16278496 cg19331221 cg09577804 cg18675610
## 0.10458367 0.10402888 0.10392829 0.10385167 0.10338013 0.10331274 0.10330022
## cg08846870 cg04055490 cg22138735 cg07865091 cg03063309 cg16402452 cg11532431
## 0.10314283 0.10268577 0.10263582 0.10232985 0.10231987 0.10200878 0.10190957
## cg17847861 cg10661769 cg24591770 cg06398251 cg02297709 cg04462378 cg21181453
## 0.10177145 0.10176685 0.10161293 0.10145264 0.10143732 0.10122116 0.10119874
## cg06889535 cg01377358 cg15185986 cg07218880 cg11025609 cg00769843 cg01726273
## 0.10067048 0.10057511 0.10048466 0.10044627 0.10040631 0.10040249 0.10003856
## cg12461469 cg15575375 cg16306706 cg16017089 cg07438103 cg13638257 cg08659179
## 0.09992579 0.09991907 0.09972785 0.09972724 0.09961379 0.09958714 0.09957618
## cg16988611 cg15059065
## 0.09932984 0.09925902
##
## $hypo
## cg03663120 cg20942286 cg03963853 cg24788483 cg03126713 cg00828556 cg11186858
## 0.3647839 0.2904565 0.2679906 0.2646604 0.2636601 0.2623347 0.2597966
## cg05612654 cg13931640 cg15871206 cg22528270 cg15310871 cg13500029 cg10480329
## 0.2591584 0.2577184 0.2568701 0.2558215 0.2544935 0.2530777 0.2451328
## cg11231069 cg12655112 cg05923857 cg03549146 cg12458039 cg20610950 cg07737292
## 0.2436842 0.2359248 0.2338497 0.2337499 0.2322780 0.2295462 0.2274177
## cg10456459 cg03313271 cg06988336 cg16636767 cg23952578 cg06517984 cg06297318
## 0.2239767 0.2195886 0.2172033 0.2104531 0.2098169 0.2090327 0.2086161
## cg14976569 cg04851465 cg27334271 cg11597902 cg15633603 cg11327657 cg22259797
## 0.2075189 0.2070666 0.2068188 0.2061543 0.2057623 0.2045773 0.2042910
## cg18990407 cg13403369 cg08425796 cg06373940 cg09322573 cg04354689 cg20107506
## 0.2022223 0.2018829 0.2011033 0.1998676 0.1991416 0.1977969 0.1977118
## cg22185977 cg10718056 cg07033722 cg25517015 cg06125903 cg26538782 cg27366072
## 0.1969515 0.1967400 0.1964561 0.1964339 0.1960628 0.1960238 0.1950675
## cg01879591 cg12866960 cg03310874 cg13093111 cg19502671 cg02796279 cg08538581
## 0.1948740 0.1948602 0.1928330 0.1919512 0.1918209 0.1917390 0.1909640
## cg10967114 cg06978145 cg19380303 cg26923863 cg06721411 cg26783127 cg20429104
## 0.1904297 0.1903406 0.1891560 0.1890362 0.1887831 0.1885530 0.1884945
## cg01024962 cg23403750 cg26305504 cg06585734 cg04664897 cg12555086 cg05445326
## 0.1882124 0.1880279 0.1875673 0.1875515 0.1873298 0.1872701 0.1872304
## cg20966357 cg07918933 cg11153071 cg23755933 cg11802666 cg04217515 cg18835472
## 0.1870078 0.1869022 0.1865839 0.1860653 0.1859938 0.1857296 0.1857163
## cg25596405 cg24250902 cg27340480 cg02244028 cg23334433 cg26298914 cg26889953
## 0.1855043 0.1850989 0.1849683 0.1849024 0.1841725 0.1838050 0.1837933
## cg00009088 cg17117981 cg04836151 cg08428868 cg04586126 cg14189391 cg15288326
## 0.1837197 0.1834312 0.1832349 0.1830330 0.1827989 0.1827975 0.1824597
## cg13980609 cg08400494 cg17086773 cg22875823 cg07417146 cg00235484 cg01622606
## 0.1823558 0.1819777 0.1819723 0.1812224 0.1806862 0.1801643 0.1798444
## cg22662844 cg22666015
## 0.1797449 0.1797152
Alternatively, users can set tissueSpecDMPs as TRUE to obtain tissue based DMPs by using the reference atlas. Here, we used simulated samples since we don’t have tissue specific samples. Note that both tissueSpecCpGs and tissueSpecDMPs can’t be TRUE at the same time.
data("HumanCellTypeMethAtlas")
exampleSamples <- simulateCellMix(1,reference = HumanCellTypeMethAtlas)$simulated
exampleMeta <- data.table("Experiment_accession" = "example_sample",
"Biosample_term_name" = "example_cell_type")
colnames(exampleSamples) <- c("CpGs", "example_sample")
colnames(HumanCellTypeMethAtlas)[1] <- c("CpGs")
signatures <- findSignatures(
samples = exampleSamples,
sampleMeta = exampleMeta,
atlas = HumanCellTypeMethAtlas,
IDs = "CpGs", tissueSpecDMPs = TRUE)
## CELL TYPES IN EXTENDED ATLAS:
## example_cell_type
## Monocytes_EPIC
## B.cells_EPIC
## CD4T.cells_EPIC
## NK.cells_EPIC
## CD8T.cells_EPIC
## Neutrophils_EPIC
## Erythrocyte_progenitors
## Adipocytes
## Cortical_neurons
## Hepatocytes
## Lung_cells
## Pancreatic_beta_cells
## Pancreatic_acinar_cells
## Pancreatic_duct_cells
## Vascular_endothelial_cells
## Colon_epithelial_cells
## Left_atrium
## Bladder
## Breast
## Head_and_neck_larynx
## Kidney
## Prostate
## Thyroid
## Upper_GI
## Uterus_cervix
print(head(signatures[[2]]))
## intercept f pval qval
## cg10480329 -3.287511 216.2322 1.672208e-13 1.008007e-09
## cg06297318 -3.496336 183.0278 1.004833e-12 3.028568e-09
## cg18835472 -3.350244 155.6617 5.558755e-12 1.116939e-08
## cg05923857 -3.515739 148.1186 9.329374e-12 1.405937e-08
## cg27366072 -2.858145 144.8301 1.177646e-11 1.418874e-08
## cg15633603 -1.496293 142.3090 1.412284e-11 1.418874e-08
It is possible to use RNA-seq data for deconvolution via deconvR package.
Beware that you have to set IDs
column that contains Gene names
to run
deconvR functions. Therefore you can simulate bulk RNA-seq data via
simulateCellMix
and, extend RNA-seq reference atlas via findSignatures
.
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] parallel stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] dplyr_1.1.4 doParallel_1.0.17 iterators_1.0.14 foreach_1.5.2
## [5] deconvR_1.13.0 data.table_1.16.2 knitr_1.49 BiocStyle_2.35.0
##
## loaded via a namespace (and not attached):
## [1] splines_4.5.0 BiocIO_1.17.1
## [3] bitops_1.0-9 tibble_3.2.1
## [5] R.oo_1.27.0 preprocessCore_1.69.0
## [7] XML_3.99-0.17 lifecycle_1.0.4
## [9] lattice_0.22-6 MASS_7.3-61
## [11] base64_2.0.2 scrime_1.3.5
## [13] magrittr_2.0.3 minfi_1.53.1
## [15] limma_3.63.2 sass_0.4.9
## [17] rmarkdown_2.29 jquerylib_0.1.4
## [19] yaml_2.3.10 robslopes_1.1.3
## [21] doRNG_1.8.6 askpass_1.2.1
## [23] minqa_1.2.8 DBI_1.2.3
## [25] RColorBrewer_1.1-3 abind_1.4-8
## [27] zlibbioc_1.53.0 quadprog_1.5-8
## [29] GenomicRanges_1.59.1 purrr_1.0.2
## [31] R.utils_2.12.3 BiocGenerics_0.53.3
## [33] RCurl_1.98-1.16 GenomeInfoDbData_1.2.13
## [35] IRanges_2.41.1 S4Vectors_0.45.2
## [37] rentrez_1.2.3 genefilter_1.89.0
## [39] annotate_1.85.0 DelayedMatrixStats_1.29.0
## [41] codetools_0.2-20 DelayedArray_0.33.2
## [43] xml2_1.3.6 tidyselect_1.2.1
## [45] UCSC.utils_1.3.0 lme4_1.1-35.5
## [47] beanplot_1.3.1 matrixStats_1.4.1
## [49] stats4_4.5.0 illuminaio_0.49.0
## [51] GenomicAlignments_1.43.0 jsonlite_1.8.9
## [53] multtest_2.63.0 e1071_1.7-16
## [55] survival_3.7-0 bbmle_1.0.25.1
## [57] tools_4.5.0 rsq_2.7
## [59] Rcpp_1.0.13-1 glue_1.8.0
## [61] SparseArray_1.7.2 xfun_0.49
## [63] qvalue_2.39.0 MatrixGenerics_1.19.0
## [65] GenomeInfoDb_1.43.2 HDF5Array_1.35.1
## [67] numDeriv_2016.8-1.1 BiocManager_1.30.25
## [69] fastmap_1.2.0 boot_1.3-31
## [71] rhdf5filters_1.19.0 fansi_1.0.6
## [73] openssl_2.2.2 digest_0.6.37
## [75] R6_2.5.1 colorspace_2.1-1
## [77] gtools_3.9.5 RSQLite_2.3.8
## [79] R.methodsS3_1.8.2 utf8_1.2.4
## [81] tidyr_1.3.1 generics_0.1.3
## [83] rtracklayer_1.67.0 class_7.3-22
## [85] httr_1.4.7 S4Arrays_1.7.1
## [87] pkgconfig_2.0.3 gtable_0.3.6
## [89] blob_1.2.4 siggenes_1.81.0
## [91] XVector_0.47.0 htmltools_0.5.8.1
## [93] bookdown_0.41 scales_1.3.0
## [95] Biobase_2.67.0 png_0.1-8
## [97] deming_1.4-1 tzdb_0.4.0
## [99] reshape2_1.4.4 rjson_0.2.23
## [101] nloptr_2.1.1 coda_0.19-4.1
## [103] nlme_3.1-166 curl_6.0.1
## [105] bdsmatrix_1.3-7 bumphunter_1.49.0
## [107] proxy_0.4-27 cachem_1.1.0
## [109] rhdf5_2.51.0 stringr_1.5.1
## [111] AnnotationDbi_1.69.0 restfulr_0.0.15
## [113] GEOquery_2.75.0 pillar_1.9.0
## [115] grid_4.5.0 reshape_0.8.9
## [117] vctrs_0.6.5 Deriv_4.1.6
## [119] xtable_1.8-4 evaluate_1.0.1
## [121] readr_2.1.5 GenomicFeatures_1.59.1
## [123] mvtnorm_1.3-2 cli_3.6.3
## [125] locfit_1.5-9.10 compiler_4.5.0
## [127] Rsamtools_2.23.1 rlang_1.1.4
## [129] crayon_1.5.3 rngtools_1.5.2
## [131] nor1mix_1.3-3 mclust_6.1.1
## [133] emdbook_1.3.13 plyr_1.8.9
## [135] stringi_1.8.4 mcr_1.3.3.1
## [137] BiocParallel_1.41.0 nnls_1.6
## [139] assertthat_0.2.1 munsell_0.5.1
## [141] Biostrings_2.75.1 Matrix_1.7-1
## [143] hms_1.1.3 sparseMatrixStats_1.19.0
## [145] bit64_4.5.2 ggplot2_3.5.1
## [147] Rhdf5lib_1.29.0 KEGGREST_1.47.0
## [149] methylKit_1.33.1 statmod_1.5.0
## [151] SummarizedExperiment_1.37.0 fastseg_1.53.2
## [153] memoise_2.0.1 bslib_0.8.0
## [155] bit_4.5.0
stopCluster(cl)