In this report we establish a new method for generating simulated data with known ground truth. This will be used to test different gene methylation enrichment approaches systematically.
The general steps are:
Import GSE158422 data corresponding to control (non-tumour tissue).
From the 37 samples, create two groups of 18 samples. One of these will be considered “control” and the other “case”.
Create random gene sets that have similar sized to Reactome pathways.
Some gene sets will be selected to be differentially methylated. Half of these will be hypermethylated and the others will be hypomethylated.
The changes will be incorporated into the “case” samples.
The enrichment analysis will be conducted.
The accuracy will be calculated.
suppressPackageStartupMessages({
library("stringi")
library("limma")
library("missMethyl")
library("IlluminaHumanMethylation450kmanifest")
library("IlluminaHumanMethylationEPICanno.ilm10b4.hg19")
library("HGNChelper")
library('org.Hs.eg.db')
library("psych")
library("mitch")
library("kableExtra")
library("rslurm")
})
source("GSE158422_simulate_functions.R")
# optimised for 128 GB sever with 32 threads
CORES=6
annotations
probe sets
gene sets
design matrix
mval matrix
# get probe-gene mapping
anno <- getAnnotation(IlluminaHumanMethylationEPICanno.ilm10b4.hg19)
myann <- data.frame(anno[,c("UCSC_RefGene_Name","UCSC_RefGene_Group","Islands_Name","Relation_to_Island")])
gp <- myann[,"UCSC_RefGene_Name",drop=FALSE]
gp2 <- strsplit(gp$UCSC_RefGene_Name,";")
names(gp2) <- rownames(gp)
gp2 <- lapply(gp2,unique)
gt <- stack(gp2)
colnames(gt) <- c("gene","probe")
dim(gt)
## [1] 684970 2
str(gt)
## 'data.frame': 684970 obs. of 2 variables:
## $ gene : chr "YTHDF1" "EIF2S3" "PKN3" "CCDC57" ...
## $ probe: Factor w/ 865859 levels "cg18478105","cg09835024",..: 1 2 3 4 5 6 7 8 8 9 ...
head(gt)
## gene probe
## 1 YTHDF1 cg18478105
## 2 EIF2S3 cg09835024
## 3 PKN3 cg14361672
## 4 CCDC57 cg01763666
## 5 INF2 cg12950382
## 6 CDC16 cg02115394
#new.hgnc.table <- getCurrentHumanMap()
#new.hgnc.table <- readRDS("new.hgnc.table.rds")
#fix <- checkGeneSymbols(gt$gene,map=new.hgnc.table)
#fix2 <- fix[which(fix$x != fix$Suggested.Symbol),]
#length(unique(fix2$x))
#gt$gene <- fix$Suggested.Symbol
if (!file.exists("GSE158422_design.rds")) {
download.file("https://ziemann-lab.net/public/gmea_prototype/GSE158422_design.rds", "GSE158422_design.rds")
}
design <- readRDS("GSE158422_design.rds")
if (!file.exists("GSE158422_design.rds")) {
options(timeout=10000000000000)
download.file("https://ziemann-lab.net/public/gmea_prototype/GSE158422_mx.rds","GSE158422_mx.rds")
}
mval <- readRDS("GSE158422_mx.rds")
We could use Reactome pathways, however these have a lot of overlapping sets, which could cause inflated false positives. After some testing, I found that the gene set size strongly impacts the accuracy.
For reference, Reactome sets have a mean of 48 and median of 15, while MSigDB has a median of 47 and mean of 116.
Therefore, a reasonable analysis would include small (20), medium (50) and large (100) sets.
To reflect coverage of Reactome and other pathway databases, only half the genes will be included in sets.
gene_catalog <- unique(gt$gene)
# set gene set size here
lengths <- rep(20,1000)
gsets <- randomGeneSets(gene_catalog,lengths,seed=100)
TODO: to incorporate changes to case samples.
Need to figure out what magnitude to change. Will refer to the cancer/normal comparison.
Select genes and probes to alter.
seed=100
frac_genes=0.5
frac_probes=0.5
delta=1
nsamples=10
normal_mval <- mval[,(1:(ncol(mval)/2)*2)]
Set assumptions.
num_dm_sets=50
sims=100
#groupsizes=c(3,5,8,12)
#deltas=c(0.1,0.2,0.3,0.4,0.5)
groupsizes=12
deltas=0.5
params <- expand.grid("groupsizes"=groupsizes,"deltas"=deltas,"seed"=seq(100,sims*100,100))
colnames(params) <- c("groupsize","delta","seed")
params %>% kbl(caption="Parameters to test") %>% kable_paper("hover", full_width = F)
groupsize | delta | seed |
---|---|---|
12 | 0.5 | 100 |
12 | 0.5 | 200 |
12 | 0.5 | 300 |
12 | 0.5 | 400 |
12 | 0.5 | 500 |
12 | 0.5 | 600 |
12 | 0.5 | 700 |
12 | 0.5 | 800 |
12 | 0.5 | 900 |
12 | 0.5 | 1000 |
12 | 0.5 | 1100 |
12 | 0.5 | 1200 |
12 | 0.5 | 1300 |
12 | 0.5 | 1400 |
12 | 0.5 | 1500 |
12 | 0.5 | 1600 |
12 | 0.5 | 1700 |
12 | 0.5 | 1800 |
12 | 0.5 | 1900 |
12 | 0.5 | 2000 |
12 | 0.5 | 2100 |
12 | 0.5 | 2200 |
12 | 0.5 | 2300 |
12 | 0.5 | 2400 |
12 | 0.5 | 2500 |
12 | 0.5 | 2600 |
12 | 0.5 | 2700 |
12 | 0.5 | 2800 |
12 | 0.5 | 2900 |
12 | 0.5 | 3000 |
12 | 0.5 | 3100 |
12 | 0.5 | 3200 |
12 | 0.5 | 3300 |
12 | 0.5 | 3400 |
12 | 0.5 | 3500 |
12 | 0.5 | 3600 |
12 | 0.5 | 3700 |
12 | 0.5 | 3800 |
12 | 0.5 | 3900 |
12 | 0.5 | 4000 |
12 | 0.5 | 4100 |
12 | 0.5 | 4200 |
12 | 0.5 | 4300 |
12 | 0.5 | 4400 |
12 | 0.5 | 4500 |
12 | 0.5 | 4600 |
12 | 0.5 | 4700 |
12 | 0.5 | 4800 |
12 | 0.5 | 4900 |
12 | 0.5 | 5000 |
12 | 0.5 | 5100 |
12 | 0.5 | 5200 |
12 | 0.5 | 5300 |
12 | 0.5 | 5400 |
12 | 0.5 | 5500 |
12 | 0.5 | 5600 |
12 | 0.5 | 5700 |
12 | 0.5 | 5800 |
12 | 0.5 | 5900 |
12 | 0.5 | 6000 |
12 | 0.5 | 6100 |
12 | 0.5 | 6200 |
12 | 0.5 | 6300 |
12 | 0.5 | 6400 |
12 | 0.5 | 6500 |
12 | 0.5 | 6600 |
12 | 0.5 | 6700 |
12 | 0.5 | 6800 |
12 | 0.5 | 6900 |
12 | 0.5 | 7000 |
12 | 0.5 | 7100 |
12 | 0.5 | 7200 |
12 | 0.5 | 7300 |
12 | 0.5 | 7400 |
12 | 0.5 | 7500 |
12 | 0.5 | 7600 |
12 | 0.5 | 7700 |
12 | 0.5 | 7800 |
12 | 0.5 | 7900 |
12 | 0.5 | 8000 |
12 | 0.5 | 8100 |
12 | 0.5 | 8200 |
12 | 0.5 | 8300 |
12 | 0.5 | 8400 |
12 | 0.5 | 8500 |
12 | 0.5 | 8600 |
12 | 0.5 | 8700 |
12 | 0.5 | 8800 |
12 | 0.5 | 8900 |
12 | 0.5 | 9000 |
12 | 0.5 | 9100 |
12 | 0.5 | 9200 |
12 | 0.5 | 9300 |
12 | 0.5 | 9400 |
12 | 0.5 | 9500 |
12 | 0.5 | 9600 |
12 | 0.5 | 9700 |
12 | 0.5 | 9800 |
12 | 0.5 | 9900 |
12 | 0.5 | 10000 |
Using GSAmeth of significant probes.
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simgsa, params, jobname = 'gsa',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "F1", "gsets") )
## Submitted batch job 3060
gres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
gres <- do.call(rbind,gres)
gres <- data.frame(params,gres)
str(gres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 16 21 28 18 31 30 32 25 26 27 ...
## $ FP : num 0 1 1 0 2 1 0 2 0 2 ...
## $ FN : num 34 29 22 32 19 20 18 25 24 23 ...
## $ TN : num 950 949 949 950 948 949 950 948 950 948 ...
## $ PREC : num 1 0.955 0.966 1 0.939 ...
## $ REC : num 0.32 0.42 0.56 0.36 0.62 0.6 0.64 0.5 0.52 0.54 ...
Limma Average t-test.
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simlac, params, jobname = 'lat',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "ttenrich","F1", "gsets","gt") )
## Submitted batch job 3113
latres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
latres <- do.call(rbind,latres)
latres <- data.frame(params,latres)
str(latres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 0 1 0 0 0 0 0 0 0 0 ...
## $ FP : num 0 0 0 0 0 0 0 0 0 0 ...
## $ FN : num 50 49 50 50 50 50 50 50 50 50 ...
## $ TN : num 950 950 950 950 950 950 950 950 950 950 ...
## $ PREC : num NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ REC : num 0 0.02 0 0 0 0 0 0 0 0 ...
Limma top t-test.
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simlactop, params, jobname = 'ltt',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "ttenrich","F1", "gsets","gt") )
## Submitted batch job 3164
lttres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
lttres <- do.call(rbind,lttres)
lttres <- data.frame(params,lttres)
str(lttres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 2 1 0 0 1 1 3 3 3 0 ...
## $ FP : num 0 0 0 1 0 0 1 3 3 0 ...
## $ FN : num 48 49 50 50 49 49 47 47 47 50 ...
## $ TN : num 950 950 950 949 950 950 949 947 947 950 ...
## $ PREC : num 1 1 NaN 0 1 1 0.75 0.5 0.5 NaN ...
## $ REC : num 0.04 0.02 0 0 0.02 0.02 0.06 0.06 0.06 0 ...
Limma average wilcox.
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simnlac, params, jobname = 'law',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "wtenrich","F1", "gsets","gt") )
## Submitted batch job 3216
lawres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
lawres <- do.call(rbind,lawres)
lawres <- data.frame(params,lawres)
str(lawres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 1 4 2 3 1 9 9 2 0 7 ...
## $ FP : num 0 1 0 0 0 1 0 0 0 0 ...
## $ FN : num 49 46 48 47 49 41 41 48 50 43 ...
## $ TN : num 950 949 950 950 950 949 950 950 950 950 ...
## $ PREC : num 1 0.8 1 1 1 0.9 1 1 NaN 1 ...
## $ REC : num 0.02 0.08 0.04 0.06 0.02 0.18 0.18 0.04 0 0.14 ...
Limma average mitch.
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simlacm, params, jobname = 'lam',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "runmitch","F1", "gsets","gt") )
## Submitted batch job 3267
lamres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
lamres <- do.call(rbind,lamres)
lamres <- data.frame(params,lamres)
str(lamres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 1 4 2 3 1 9 9 2 0 7 ...
## $ FP : num 0 1 0 0 0 1 0 0 0 0 ...
## $ FN : num 49 46 48 47 49 41 41 48 50 43 ...
## $ TN : num 950 949 950 950 950 949 950 950 950 950 ...
## $ PREC : num 1 0.8 1 1 1 0.9 1 1 NaN 1 ...
## $ REC : num 0.02 0.08 0.04 0.06 0.02 0.18 0.18 0.04 0 0.14 ...
Limma rank mitch.
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simlrm, params, jobname = 'lrm',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "runmitch","F1", "gsets","gt") )
## Submitted batch job 3318
lrmres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
lrmres <- do.call(rbind,lrmres)
lrmres <- data.frame(params,lrmres)
str(lrmres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 0 2 0 0 0 1 2 0 0 4 ...
## $ FP : num 0 0 0 0 0 0 0 0 0 0 ...
## $ FN : num 50 48 50 50 50 49 48 50 50 46 ...
## $ TN : num 950 950 950 950 950 950 950 950 950 950 ...
## $ PREC : num NaN 1 NaN NaN NaN 1 1 NaN NaN 1 ...
## $ REC : num 0 0.04 0 0 0 0.02 0.04 0 0 0.08 ...
Aggregate limma t-test
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simalc, params, jobname = 'alt',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "ttenrich","F1", "gsets","gt") )
## Submitted batch job 3369
altres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
altres <- do.call(rbind,altres)
altres <- data.frame(params,altres)
str(altres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 0 1 0 0 0 0 0 0 0 0 ...
## $ FP : num 0 0 0 0 0 0 0 0 0 0 ...
## $ FN : num 50 49 50 50 50 50 50 50 50 50 ...
## $ TN : num 950 950 950 950 950 950 950 950 950 950 ...
## $ PREC : num NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ REC : num 0 0.02 0 0 0 0 0 0 0 0 ...
Aggregate limma wilcox test
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simnalc, params, jobname = 'alw',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "wtenrich","F1", "gsets","gt") )
## Submitted batch job 3420
alwres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
alwres <- do.call(rbind,alwres)
alwres <- data.frame(params,alwres)
str(alwres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 2 3 2 3 1 7 7 2 0 7 ...
## $ FP : num 0 1 0 0 0 0 0 0 0 1 ...
## $ FN : num 48 47 48 47 49 43 43 48 50 43 ...
## $ TN : num 950 949 950 950 950 950 950 950 950 949 ...
## $ PREC : num 1 0.75 1 1 1 1 1 1 NaN 0.875 ...
## $ REC : num 0.04 0.06 0.04 0.06 0.02 0.14 0.14 0.04 0 0.14 ...
Aggregate limma mitch
sopt1 <- list(time = '1:00:00', mem="20G")
sjob <- slurm_apply(simalm, params, jobname = 'alm',
nodes = 50, cpus_per_node = 2, submit = TRUE, slurm_options = sopt1,
genesetdatabase=gsets, myann=myann, mval=normal_mval, frac_genes=0.5,
frac_probes=0.5, num_dm_sets=num_dm_sets,
pkgs = rev(.packages()),
global_objects = c("randomGeneSets", "runlimma","incorp_dm", "runmitch","F1", "gsets","gt") )
## Submitted batch job 3471
almres <- get_slurm_out(sjob, outtype = 'raw', wait = TRUE)
almres <- do.call(rbind,almres)
almres <- data.frame(params,almres)
str(almres)
## 'data.frame': 100 obs. of 9 variables:
## $ groupsize: num 12 12 12 12 12 12 12 12 12 12 ...
## $ delta : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ seed : num 100 200 300 400 500 600 700 800 900 1000 ...
## $ TP : num 2 3 2 3 1 7 7 2 0 7 ...
## $ FP : num 0 1 0 0 0 0 0 0 0 1 ...
## $ FN : num 48 47 48 47 49 43 43 48 50 43 ...
## $ TN : num 950 949 950 950 950 950 950 950 950 949 ...
## $ PREC : num 1 0.75 1 1 1 1 1 1 NaN 0.875 ...
## $ REC : num 0.04 0.06 0.04 0.06 0.02 0.14 0.14 0.04 0 0.14 ...
save.image("GSE158422_simulate020_rslurm.Rdata")
sessionInfo()
## R version 4.2.3 (2023-03-15)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.3 LTS
##
## Matrix products: default
## BLAS: /software/R/4.2.3/lib/R/lib/libRblas.so
## LAPACK: /software/R/4.2.3/lib/R/lib/libRlapack.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [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
##
## attached base packages:
## [1] parallel stats4 stats graphics grDevices utils datasets
## [8] methods base
##
## other attached packages:
## [1] rslurm_0.6.2
## [2] kableExtra_1.3.4
## [3] mitch_1.15.0
## [4] psych_2.3.12
## [5] org.Hs.eg.db_3.16.0
## [6] AnnotationDbi_1.60.2
## [7] HGNChelper_0.8.1
## [8] IlluminaHumanMethylation450kmanifest_0.4.0
## [9] missMethyl_1.32.1
## [10] IlluminaHumanMethylationEPICanno.ilm10b4.hg19_0.6.0
## [11] IlluminaHumanMethylation450kanno.ilmn12.hg19_0.6.1
## [12] minfi_1.44.0
## [13] bumphunter_1.40.0
## [14] locfit_1.5-9.8
## [15] iterators_1.0.14
## [16] foreach_1.5.2
## [17] Biostrings_2.66.0
## [18] XVector_0.38.0
## [19] SummarizedExperiment_1.28.0
## [20] Biobase_2.58.0
## [21] MatrixGenerics_1.10.0
## [22] matrixStats_1.2.0
## [23] GenomicRanges_1.50.2
## [24] GenomeInfoDb_1.34.9
## [25] IRanges_2.32.0
## [26] S4Vectors_0.36.2
## [27] BiocGenerics_0.44.0
## [28] limma_3.54.2
## [29] stringi_1.7.12
##
## loaded via a namespace (and not attached):
## [1] systemfonts_1.0.5 BiocFileCache_2.6.1
## [3] plyr_1.8.8 splines_4.2.3
## [5] BiocParallel_1.32.6 ggplot2_3.4.3
## [7] digest_0.6.33 htmltools_0.5.6
## [9] fansi_1.0.4 magrittr_2.0.3
## [11] memoise_2.0.1 tzdb_0.4.0
## [13] readr_2.1.4 annotate_1.76.0
## [15] svglite_2.1.3 askpass_1.2.0
## [17] siggenes_1.72.0 prettyunits_1.1.1
## [19] colorspace_2.1-0 rvest_1.0.3
## [21] blob_1.2.4 rappdirs_0.3.3
## [23] xfun_0.40 dplyr_1.1.3
## [25] crayon_1.5.2 RCurl_1.98-1.13
## [27] jsonlite_1.8.7 genefilter_1.80.3
## [29] GEOquery_2.66.0 survival_3.5-3
## [31] glue_1.6.2 gtable_0.3.4
## [33] zlibbioc_1.44.0 webshot_0.5.5
## [35] DelayedArray_0.24.0 Rhdf5lib_1.20.0
## [37] HDF5Array_1.26.0 scales_1.2.1
## [39] GGally_2.1.2 DBI_1.2.0
## [41] rngtools_1.5.2 Rcpp_1.0.11
## [43] viridisLite_0.4.2 xtable_1.8-4
## [45] progress_1.2.2 bit_4.0.5
## [47] mclust_6.0.1 preprocessCore_1.60.2
## [49] htmlwidgets_1.6.2 httr_1.4.7
## [51] gplots_3.1.3 RColorBrewer_1.1-3
## [53] ellipsis_0.3.2 pkgconfig_2.0.3
## [55] reshape_0.8.9 XML_3.99-0.16
## [57] sass_0.4.7 dbplyr_2.4.0
## [59] utf8_1.2.3 reshape2_1.4.4
## [61] later_1.3.1 tidyselect_1.2.0
## [63] rlang_1.1.1 munsell_0.5.0
## [65] tools_4.2.3 cachem_1.0.8
## [67] cli_3.6.1 generics_0.1.3
## [69] RSQLite_2.3.4 evaluate_0.21
## [71] stringr_1.5.0 fastmap_1.1.1
## [73] yaml_2.3.7 knitr_1.44
## [75] bit64_4.0.5 beanplot_1.3.1
## [77] caTools_1.18.2 scrime_1.3.5
## [79] purrr_1.0.2 KEGGREST_1.38.0
## [81] nlme_3.1-162 doRNG_1.8.6
## [83] sparseMatrixStats_1.10.0 whisker_0.4.1
## [85] mime_0.12 nor1mix_1.3-2
## [87] xml2_1.3.6 biomaRt_2.54.1
## [89] rstudioapi_0.15.0 compiler_4.2.3
## [91] beeswarm_0.4.0 filelock_1.0.3
## [93] curl_5.2.0 png_0.1-8
## [95] tibble_3.2.1 statmod_1.5.0
## [97] bslib_0.5.1 highr_0.10
## [99] GenomicFeatures_1.50.4 lattice_0.20-45
## [101] Matrix_1.5-3 multtest_2.54.0
## [103] vctrs_0.6.3 pillar_1.9.0
## [105] lifecycle_1.0.3 rhdf5filters_1.10.1
## [107] jquerylib_0.1.4 data.table_1.14.10
## [109] bitops_1.0-7 httpuv_1.6.11
## [111] rtracklayer_1.58.0 R6_2.5.1
## [113] BiocIO_1.8.0 promises_1.2.1
## [115] KernSmooth_2.23-20 gridExtra_2.3
## [117] echarts4r_0.4.5 codetools_0.2-19
## [119] gtools_3.9.4 MASS_7.3-58.2
## [121] rhdf5_2.42.1 openssl_2.1.1
## [123] rjson_0.2.21 GenomicAlignments_1.34.1
## [125] Rsamtools_2.14.0 mnormt_2.1.1
## [127] GenomeInfoDbData_1.2.9 hms_1.1.3
## [129] quadprog_1.5-8 grid_4.2.3
## [131] tidyr_1.3.0 base64_2.0.1
## [133] rmarkdown_2.24 DelayedMatrixStats_1.20.0
## [135] illuminaio_0.40.0 shiny_1.7.5
## [137] restfulr_0.0.15