Source: https://github.com/markziemann/SurveyEnrichmentMethods

Intro

Here we are performing the analysis that is described in Figure 3 of the manuscript. This involves calculating an analysis score for a 1500 articles from 2019. We then identify the best/worst journals, and correlate analysis scores with journal and article level metrics.

knitr::opts_chunk$set(fig.width=7, fig.height=5) 

library("wordcloud")
library("vioplot")

Overview of included and excluded analyses

x <- read.table("../data/PMC_2019-analysis.tsv",header=TRUE,fill=TRUE,sep="\t")
y <- read.table("../data/QC-analysis2.tsv",header=TRUE,fill=TRUE,sep="\t")
y <- y[,1:16]
x <- x[which(! x$Pubmed.Central.ID %in% y$Pubmed.Central.ID),]
x <- rbind(x,y)

head(x)
##   Pubmed.Central.ID Article.number Allocated          Journal
## 2        PMC6317219              2      Mark     J Transl Med
## 4        PMC6318897              4      Mark     BMC Genomics
## 5        PMC6322516              5      Mark Cancer Manag Res
## 6        PMC6323737              6      Mark   BMC Plant Biol
## 8        PMC6325784              8      Mark       Respir Res
## 9        PMC6325795              9      Mark       BMC Cancer
##              Omics.type                Organism         Gene.set.library
## 2 Gene expression array            Homo sapiens                 GO, KEGG
## 4               RNA-seq Gymnocypris przewalskii                     KEGG
## 5 Gene expression array            Homo sapiens Ingenuity Knowledge Base
## 6 Gene expression array             Arabidopsis                       GO
## 8 Gene expression array            Homo sapiens                     KEGG
## 9             miRNA-seq            Homo sapiens                     KEGG
##   GS.version Statistical.test.used FDR.Correction                   App.used
## 2         No            Not stated             No                      DAVID
## 4         No            Not stated            Yes                      KOBAS
## 5         No            Not stated             No Ingenuity Pathway Analysis
## 6        Yes            Not stated             No                      topGO
## 8         No        Hypergeometric            Yes                GeneAnswers
## 9         No                Fisher             No              DIANA-miRPath
##   App.Version Code.availability Background.gene.set Assumptions.violated
## 2          No              <NA>          Not stated      Background, FDR
## 4          No              <NA>          Not stated           Background
## 5          No              <NA>          Not stated      Background, FDR
## 6         Yes                No          Not stated      Background, FDR
## 8          No                No          Not stated           Background
## 9         Yes              <NA>          Not stated           Background
##   Gene.lists.provided
## 2                  No
## 4                 Yes
## 5                  No
## 6                 Yes
## 8                 Yes
## 9                 Yes
colnames(x)
##  [1] "Pubmed.Central.ID"     "Article.number"        "Allocated"            
##  [4] "Journal"               "Omics.type"            "Organism"             
##  [7] "Gene.set.library"      "GS.version"            "Statistical.test.used"
## [10] "FDR.Correction"        "App.used"              "App.Version"          
## [13] "Code.availability"     "Background.gene.set"   "Assumptions.violated" 
## [16] "Gene.lists.provided"
dim(x)
## [1] 1766   16
exclude <- subset(x,x$GS.version=="EXCLUDE")
nrow(exclude)
## [1] 132
length(unique(exclude$Pubmed.Central.ID))
## [1] 132
x <- subset(x,x$GS.version!="EXCLUDE")
nrow(x)
## [1] 1630
length(unique(x$Pubmed.Central.ID))
## [1] 1365
write.table(x,file="TableS2.tsv",quote=FALSE,sep="\t",col.names = TRUE,row.names = FALSE)

Score

Here I am proposing a scoring scheme. If there is information missing from the article, or basic mistakes are made, then a point is deducted. If the article goes over and above the basic reproducibility, then they are awarded a point.

Gene set library origin not stated = -1

Gene set library version not stated = -1

Stat test not stated = -1

No stat test conducted = -1

No FDR correction conducted = -1

App used not stated = -1

App version not stated = -1

Background list not defined = -1

Inappropriate background list used = -1

Code availability = +1

Gene lists provided = +1

score <- function(r){
  r[is.na(r)] <- 0
  SCORE=0
  # gene set lib
  if(r["Gene.set.library"]=="Not stated"){
    SCORE=SCORE-1
  }
  # GS version
  if(r["GS.version"]=="No"){
    SCORE=SCORE-1
  }
  # stat test
  if(r["Statistical.test.used"]=="No test"){
    SCORE=SCORE-1
  }
  if(r["Statistical.test.used"]=="Not stated"){
    SCORE=SCORE-1
  }
  # FDR
  if(r["FDR.Correction"]!="Yes"){
    SCORE=SCORE-1
  }
  # app used
  if(r["App.used"]=="Not stated"){
    SCORE=SCORE-1
  }
  # App version
  if(r["App.Version"]=="No"){
    SCORE=SCORE-1
  }
  # Code availability
  if(r["Code.availability"]=="Yes"){
    SCORE=SCORE+1
  }
  # Background
  if(r["Background.gene.set"]=="Not stated"){
    SCORE=SCORE-1
  }
  if(r["Background.gene.set"]=="No"){
    SCORE=SCORE-1
  }
  if(r["Background.gene.set"]=="Stated, but incorrect"){
    SCORE=SCORE-1
  }
  # gene list
  if(r["Gene.lists.provided"]=="Yes"){
    SCORE=SCORE+1
  }
  return(SCORE)
}

scores <- apply(X = x,MARGIN = 1, FUN = score)
barplot(table(scores), xlab="analysis score",ylab="frequency")

x$scores <- scores
length(which(scores>0))
## [1] 2
mean(x$scores)
## [1] -3.529448
sd(x$scores)
## [1] 1.361599
median(x$scores)
## [1] -4
length(scores)
## [1] 1630
which(scores>0)
##  349 5910 
##  278 1450
table(scores)
## scores
##  -7  -6  -5  -4  -3  -2  -1   0   1 
##   1  67 351 492 360 216 111  30   2
dir.create("images")
## Warning in dir.create("images"): 'images' already exists
png("images/hist1.png",width=300,height=200)
par(mar=c(5,5,2,1))
barplot(table(scores), xlab="analysis score",ylab="frequency",ylim=c(0,600))
text(x= 1:length(table(scores))* 1.2 -0.5, y = table(scores), label = table(scores), pos = 3, cex = 1, col = "black")
dev.off()
## png 
##   2
pdf("images/hist1.pdf",width=5,height=4)
par(mar=c(5,5,2,1))
barplot(table(scores), xlab="analysis score",ylab="frequency",ylim=c(0,600))
text(x= 1:length(table(scores))* 1.2 -0.5, y = table(scores), label = table(scores), pos = 3, cex = 1, col = "black")
dev.off()
## png 
##   2
scores2 <- round(table(scores)/sum(table(scores))*100,1)
scores2
## scores
##   -7   -6   -5   -4   -3   -2   -1    0    1 
##  0.1  4.1 21.5 30.2 22.1 13.3  6.8  1.8  0.1
png("images/hist2.png",width=300,height=200)
par(mar=c(5,5,2,1))
barplot(scores2, xlab="analysis score",ylab="frequency",ylim=c(0,50))
text(x= 1:length(scores2)* 1.2 -0.5, y = scores2, label = scores2, pos = 3, cex = 0.9, col = "black")
dev.off()
## png 
##   2
pdf("images/hist2.pdf",width=5,height=4)
par(mar=c(5,5,2,1))
barplot(scores2, xlab="analysis score",ylab="frequency",ylim=c(0,40))
text(x= 1:length(scores2)* 1.2 -0.5, y = scores2, label = scores2, pos = 3, cex = 0.9, col = "black")
dev.off()
## png 
##   2

Journal rank

jmetrics <- read.table("../data/scimagojr_2020.csv",sep=";",header=TRUE,dec = ",")
jmetrics$Title <- toupper(jmetrics$Title)
head(jmetrics,3)
##   Rank Sourceid                                 Title    Type
## 1    1    28773    CA-A CANCER JOURNAL FOR CLINICIANS journal
## 2    2    19434      MMWR RECOMMENDATIONS AND REPORTS journal
## 3    3    20315 NATURE REVIEWS MOLECULAR CELL BIOLOGY journal
##                 Issn    SJR SJR.Best.Quartile H.index Total.Docs...2020.
## 1 15424863, 00079235 62.937                Q1     168                 47
## 2 10575987, 15458601 40.949                Q1     143                 10
## 3 14710072, 14710080 37.461                Q1     431                115
##   Total.Docs...3years. Total.Refs. Total.Cites..3years. Citable.Docs...3years.
## 1                  119        3452                15499                     80
## 2                    9        1292                  492                      9
## 3                  338        8439                10844                    167
##   Cites...Doc...2years. Ref....Doc.        Country           Region
## 1                126.34       73.45  United States Northern America
## 2                 50.00      129.20  United States Northern America
## 3                 32.83       73.38 United Kingdom   Western Europe
##                                          Publisher  Coverage
## 1                                  Wiley-Blackwell 1950-2020
## 2 Centers for Disease Control and Prevention (CDC) 1990-2020
## 3                          Nature Publishing Group 2000-2020
##                                                                                                                                                    Categories
## 1                                                                                                                              Hematology (Q1); Oncology (Q1)
## 2 Epidemiology (Q1); Health Information Management (Q1); Health (social science) (Q1); Health, Toxicology and Mutagenesis (Q1); Medicine (miscellaneous) (Q1)
## 3                                                                                                                   Cell Biology (Q1); Molecular Biology (Q1)
dim(jmetrics)
## [1] 32952    20
nlmcat <- readLines("../data/nlmcatalog_result.txt")
journaltitle <- nlmcat[grep("Title\\(s\\):",nlmcat)]
journaltitle <- gsub("Title\\(s\\): ","",journaltitle)
journaltitle <- gsub("\\.$","",journaltitle)
journaltitle <- toupper(journaltitle) 
journalabbrev <- nlmcat[grep("Title Abbreviation:",nlmcat)]
journalabbrev <- sapply(strsplit(journalabbrev,":"),"[[",2)
journalabbrev <- gsub(" $","",journalabbrev)
journalabbrev <- gsub("^ ","",journalabbrev)
jdf <- data.frame(journalabbrev,journaltitle)

mjdf <- merge(jdf,jmetrics,by.x="journaltitle",by.y="Title")

xm <- merge(x,mjdf,by.x="Journal",by.y="journalabbrev",all.x = TRUE)

Analysis scores vs Journal rank

tail(xm$Journal)
## [1] "World J Gastroenterol"      "World J Gastrointest Oncol"
## [3] "World J Gastrointest Oncol" "World J Surg Oncol"        
## [5] "World J Surg Oncol"         "World J Surg Oncol"
hist(xm$SJR,xlab="SJR",main="SJR distribution")

mylm1 <- lm (xm$scores ~ xm$SJR)
plot(xm$SJR,xm$scores, col = rgb(red=0,blue=0,green=0,alpha=0.2), pch=19, bty="n",
  xlab="SJR",ylab="score",main="Analysis scores vs. journal metrics")
abline(mylm1,col="red")

cor.test(xm$scores,xm$SJR,method="pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  xm$scores and xm$SJR
## t = 1.335, df = 1196, p-value = 0.1821
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.01810308  0.09500263
## sample estimates:
##        cor 
## 0.03857333
cor.test(xm$scores,xm$SJR,method="spearman")
## Warning in cor.test.default(xm$scores, xm$SJR, method = "spearman"): Cannot
## compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  xm$scores and xm$SJR
## S = 278554962, p-value = 0.3339
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.0279424
png("images/score_sjr1.png",width=350,height=300)
par(mar=c(5,5,3,1))
plot(xm$SJR,xm$scores, col = rgb(red=0,blue=0,green=0,alpha=0.2), pch=19,bty="n",
  xlab="SJR",ylab="score",main="Analysis scores vs. journal metrics")
abline(mylm1,col="red")
grid()
dev.off()
## png 
##   2
pdf("images/score_sjr1.pdf",width=4,height=3)
par(mar=c(4,4,3,2))
plot(xm$SJR,xm$scores, col = rgb(red=0,blue=0,green=0,alpha=0.2), pch=19,bty="n",
  xlab="SJR",ylab="score",main="Analysis scores vs. journal metrics")
abline(mylm1,col="red")
grid()
dev.off()
## png 
##   2

Best and worst journals

Minimum of 5 analyses.

xmm <-xm[,c("Journal","scores")]
tab <- table(xmm$Journal)
tab <- tab[which(tab>=5)]
xmm <- xmm[which(xmm$Journal %in% names(tab)),]
dim(xmm)
## [1] 1236    2
jres <- aggregate(. ~ Journal, xmm ,mean)
jsd <- aggregate(. ~ Journal, xmm ,sd)
jres$sd <- jsd$scores
jres <- jres[order(jres$scores),]
dim(jres)
## [1] 70  3
head(jres)
##                  Journal    scores        sd
## 65              RNA Biol -5.000000 1.0954451
## 53           Mol Med Rep -4.275000 0.9867715
## 15            Cancer Med -4.272727 0.9045340
## 70 World J Gastroenterol -4.250000 1.3887301
## 18     Cell Death Discov -4.200000 1.3038405
## 39         Int J Med Sci -4.200000 1.3038405
par(mar=c(5,12,3,1))
barplot(tail(jres$scores,20),names.arg = tail(jres$Journal,20),horiz=TRUE,las=1,cex.names = 0.7, xlab="mean score",
        main = "Highest scoring",xlim=c(-4,0))
grid()

png("images/score_highest1.png",width=300,height=350)
par(mar=c(5,12,3,1))
barplot(tail(jres$scores,20),names.arg = tail(jres$Journal,20),horiz=TRUE,las=1,cex.names = 0.7, xlab="mean score",
        main = "Highest scoring",xlim=c(-4,0))
grid()
dev.off()
## png 
##   2
par(mar=c(5,12,3,1))
barplot(head(jres$scores,20),names.arg = head(jres$Journal,20),horiz=TRUE,las=1,cex.names = 0.7, xlab="mean score",
        main = "Lowest scoring journals",xlim=c(-5,0))
grid()

png("images/score_lowest1.png",width=300,height=350)
par(mar=c(5,12,3,1))
barplot(head(jres$scores,20),names.arg = head(jres$Journal,20),horiz=TRUE,las=1,cex.names = 0.7, xlab="mean score",
        main = "Lowest scoring",xlim=c(-5,0))
grid()
dev.off()
## png 
##   2
pdf("images/score_highest1.pdf",width=3,height=4.5)
par(mar=c(5,8,3,1))
barplot(tail(jres$scores,20),names.arg = tail(jres$Journal,20),horiz=TRUE,las=1,cex.names = 0.7, xlab="mean score",
        main = "Highest scoring",xlim=c(-4,0))
grid()
dev.off()
## png 
##   2
pdf("images/score_lowest1.pdf",width=3,height=4.5)
par(mar=c(5,8,3,1))
barplot(head(jres$scores,20),names.arg = head(jres$Journal,20),horiz=TRUE,las=1,cex.names = 0.7, xlab="mean score",
        main = "Lowest scoring",xlim=c(-5,0))
grid()
dev.off()
## png 
##   2
j <- unique(xmm$Journal)
jscores <- sapply(j,function(jj) {
 xmm[which(xmm$Journal == jj ),2]  
})

jscores <- jscores[order(unlist(lapply(jscores,mean)))]

par(mar=c(5,12,3,1))
vioplot(tail(jscores,20),horizontal = TRUE,las=1,cex.axis=0.75,main="Highest scoring journals")

par(mar=c(5,12,3,1))
vioplot(head(jscores,20),horizontal = TRUE,las=1,cex.axis=0.75,main="Lowest scoring journals")

Mean analysis scores vs Journal rank

jjres <- merge(jres,mjdf,by.x="Journal",by.y="journalabbrev",all.x = TRUE)

mylm2 <- lm (jjres$scores ~ jjres$SJR)
plot(jjres$SJR,jjres$scores,col = rgb(red=0,blue=0,green=0,alpha=0.2) , pch=19,bty="n",
  xlab="SJR",ylab="mean score",main="Mean analysis score vs. journal metrics")
abline(mylm2,col="red")

png("images/mean_sjr1.png",width=350,height=300)
par(mar=c(5,5,3,1))
plot(jjres$SJR,jjres$scores,  col = rgb(red=0,blue=0,green=0,alpha=0.2) , pch=19,bty="n",
  xlab="SJR",ylab="mean score",main="Mean analysis score vs. journal metrics")
abline(mylm2,col="red")
dev.off()
## png 
##   2
cor.test(jjres$scores,jjres$SJR,method="pearson")

## 
##  Pearson's product-moment correlation
## 
## data:  jjres$scores and jjres$SJR
## t = -0.051925, df = 54, p-value = 0.9588
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.2694658  0.2563108
## sample estimates:
##          cor 
## -0.007065863
cor.test(jjres$scores,jjres$SJR,method="spearman")
## Warning in cor.test.default(jjres$scores, jjres$SJR, method = "spearman"):
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  jjres$scores and jjres$SJR
## S = 31981, p-value = 0.4954
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##         rho 
## -0.09299186
pdf("images/mean_sjr1.pdf",width=3.5,height=3)
par(mar=c(5,5,3,1))
plot(jjres$SJR,jjres$scores,  col = rgb(red=0,blue=0,green=0,alpha=0.2) , pch=19,bty="n",
  xlab="SJR",ylab="mean score",main="Mean analysis score vs. journal metrics")
abline(mylm2,col="red")
dev.off()
## png 
##   2

Article citations

Get the number of citations per article.

if (file.exists("../data/cites_data.rds") ) {
  cites <- readRDS("../data/cites_data.rds")
} else {
  stop("citation data not found. Please run 'citation_fetching.Rmd' to obtain updated citation info")
}
cites$PMID <- gsub("^","PMID",cites$PMID)
xm <- merge(x,cites,by.x="Pubmed.Central.ID",by.y="PMCID")
dim(xm)
## [1] 1630   20
head(xm)
##   Pubmed.Central.ID Article.number Allocated          Journal
## 1        PMC6317205              1         -     J Transl Med
## 2        PMC6317219              2      Mark     J Transl Med
## 3        PMC6318854              3         - BMC Med Genomics
## 4        PMC6318897              4      Mark     BMC Genomics
## 5        PMC6322516              5      Mark Cancer Manag Res
## 6        PMC6323737              6      Mark   BMC Plant Biol
##              Omics.type                Organism         Gene.set.library
## 1             PCR Array            Homo sapiens               Not stated
## 2 Gene expression array            Homo sapiens                 GO, KEGG
## 3 DNA methylation array            Homo sapiens                       GO
## 4               RNA-seq Gymnocypris przewalskii                     KEGG
## 5 Gene expression array            Homo sapiens Ingenuity Knowledge Base
## 6 Gene expression array             Arabidopsis                       GO
##   GS.version Statistical.test.used FDR.Correction                   App.used
## 1         No               No test        No test                      DAVID
## 2         No            Not stated             No                      DAVID
## 3         No               No test        No test                    PANTHER
## 4         No            Not stated            Yes                      KOBAS
## 5         No            Not stated             No Ingenuity Pathway Analysis
## 6        Yes            Not stated             No                      topGO
##   App.Version Code.availability Background.gene.set
## 1          No              <NA>          Not stated
## 2          No              <NA>          Not stated
## 3         Yes              <NA>          Not stated
## 4          No              <NA>          Not stated
## 5          No              <NA>          Not stated
## 6         Yes                No          Not stated
##                 Assumptions.violated Gene.lists.provided scores         PMID
## 1 Inference without test, Background                 Yes     -5 PMID30602372
## 2                    Background, FDR                  No     -5 PMID30602391
## 3 Inference without test, Background                  No     -4 PMID30606219
## 4                         Background                 Yes     -3 PMID30606119
## 5                    Background, FDR                  No     -5 PMID30655694
## 6                    Background, FDR                 Yes     -2 PMID30616516
##   NumCites    Pubdate
## 1        7 2019-01-03
## 2       39 2019-01-03
## 3       10 2019-01-03
## 4        6 2019-01-03
## 5        1 2019-01-03
## 6        4 2019-01-07

Plot the number of citations against analysis scores

mylm2 <- lm (xm$scores ~ xm$NumCites)
plot(xm$NumCites,xm$scores, col = rgb(red=0,blue=0,green=0,alpha=0.2) , pch=19,bty="n",
  xlab="Num cites",ylab="score",main="Association of analysis scores with number of citations")
abline(mylm2,col="red")

cor.test(xm$scores , xm$NumCites, method="pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  xm$scores and xm$NumCites
## t = 1.8129, df = 1628, p-value = 0.07003
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.003674239  0.093235822
## sample estimates:
##        cor 
## 0.04488639
cor.test(xm$scores , xm$NumCites, method="spearman")
## Warning in cor.test.default(xm$scores, xm$NumCites, method = "spearman"): Cannot
## compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  xm$scores and xm$NumCites
## S = 714237246, p-value = 0.6729
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## 0.01046515
mylm2 <- lm (xm$scores ~ log2(xm$NumCites+1))
plot(log2(xm$NumCites),xm$scores, col = rgb(red=0,blue=0,green=0,alpha=0.2) , pch=19,bty="n",
  xlab="log2(citations)",ylab="score",main="Analysis scores vs. log2(citations)")
abline(mylm2,col="red")

png("images/cites1.png",width=350,height=300)
par(mar=c(5,5,3,1))
plot(log2(xm$NumCites),xm$scores,col = rgb(red=0,blue=0,green=0,alpha=0.2) , pch=19,bty="n",
  xlab="log2(citations)",ylab="score",main="Analysis scores vs. log2(citations)")
abline(mylm2,col="red")
dev.off()
## png 
##   2
cor.test(xm$scores , xm$NumCites, method="pearson")

## 
##  Pearson's product-moment correlation
## 
## data:  xm$scores and xm$NumCites
## t = 1.8129, df = 1628, p-value = 0.07003
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.003674239  0.093235822
## sample estimates:
##        cor 
## 0.04488639
cor.test(xm$scores , xm$NumCites, method="spearman")
## Warning in cor.test.default(xm$scores, xm$NumCites, method = "spearman"): Cannot
## compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  xm$scores and xm$NumCites
## S = 714237246, p-value = 0.6729
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## 0.01046515
pdf("images/cites1.pdf",width=3.5,height=3)
par(mar=c(5,5,3,1))
plot(log2(xm$NumCites),xm$scores,col = rgb(red=0,blue=0,green=0,alpha=0.2) , pch=19,bty="n",
  xlab="log2(citations)",ylab="score",main="Analysis scores vs. log2(citations)")
abline(mylm2,col="red")
dev.off()
## png 
##   2

Session information

sessionInfo()
## R version 4.1.2 (2021-11-01)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.3 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/liblapack.so.3
## 
## 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] rmdformats_1.0.3            beeswarm_0.4.0             
##  [3] eulerr_6.1.1                mitch_1.5.1                
##  [5] clusterProfiler_4.0.5       DESeq2_1.32.0              
##  [7] SummarizedExperiment_1.22.0 Biobase_2.52.0             
##  [9] MatrixGenerics_1.4.3        matrixStats_0.61.0         
## [11] GenomicRanges_1.44.0        GenomeInfoDb_1.28.4        
## [13] IRanges_2.26.0              S4Vectors_0.30.0           
## [15] BiocGenerics_0.38.0         getDEE2_1.2.0              
## [17] anytime_0.3.9               kableExtra_1.3.4           
## [19] XML_3.99-0.8                reutils_0.2.3              
## [21] vioplot_0.3.7               zoo_1.8-9                  
## [23] sm_2.2-5.7                  wordcloud_2.6              
## [25] RColorBrewer_1.1-2          rsvg_2.1.2                 
## [27] DiagrammeRsvg_0.1           DiagrammeR_1.0.6.1         
## [29] forcats_0.5.1               stringr_1.4.0              
## [31] dplyr_1.0.7                 purrr_0.3.4                
## [33] readr_2.0.2                 tidyr_1.1.4                
## [35] tibble_3.1.5                ggplot2_3.3.5              
## [37] tidyverse_1.3.1            
## 
## loaded via a namespace (and not attached):
##   [1] utf8_1.2.2             tidyselect_1.1.1       RSQLite_2.2.8         
##   [4] AnnotationDbi_1.54.1   htmlwidgets_1.5.4      grid_4.1.2            
##   [7] BiocParallel_1.26.2    scatterpie_0.1.7       munsell_0.5.0         
##  [10] withr_2.4.2            colorspace_2.0-2       GOSemSim_2.18.1       
##  [13] highr_0.9              knitr_1.36             rstudioapi_0.13       
##  [16] DOSE_3.18.3            GenomeInfoDbData_1.2.6 polyclip_1.10-0       
##  [19] bit64_4.0.5            farver_2.1.0           downloader_0.4        
##  [22] vctrs_0.3.8            treeio_1.16.2          generics_0.1.0        
##  [25] xfun_0.26              R6_2.5.1               graphlayouts_0.7.2    
##  [28] locfit_1.5-9.4         bitops_1.0-7           cachem_1.0.6          
##  [31] reshape_0.8.8          fgsea_1.18.0           gridGraphics_0.5-1    
##  [34] DelayedArray_0.18.0    assertthat_0.2.1       promises_1.2.0.1      
##  [37] scales_1.1.1           ggraph_2.0.5           enrichplot_1.12.3     
##  [40] gtable_0.3.0           tidygraph_1.2.0        rlang_0.4.11          
##  [43] genefilter_1.74.0      systemfonts_1.0.2      splines_4.1.2         
##  [46] lazyeval_0.2.2         htm2txt_2.1.1          broom_0.7.9           
##  [49] yaml_2.2.1             reshape2_1.4.4         modelr_0.1.8          
##  [52] backports_1.2.1        httpuv_1.6.3           qvalue_2.24.0         
##  [55] tools_4.1.2            bookdown_0.24          ggplotify_0.1.0       
##  [58] gplots_3.1.1           ellipsis_0.3.2         jquerylib_0.1.4       
##  [61] Rcpp_1.0.7             plyr_1.8.6             visNetwork_2.1.0      
##  [64] zlibbioc_1.38.0        RCurl_1.98-1.5         viridis_0.6.1         
##  [67] cowplot_1.1.1          haven_2.4.3            ggrepel_0.9.1         
##  [70] fs_1.5.0               magrittr_2.0.1         data.table_1.14.2     
##  [73] DO.db_2.9              reprex_2.0.1           hms_1.1.1             
##  [76] patchwork_1.1.1        mime_0.12              evaluate_0.14         
##  [79] xtable_1.8-4           readxl_1.3.1           gridExtra_2.3         
##  [82] compiler_4.1.2         KernSmooth_2.23-20     V8_3.6.0              
##  [85] crayon_1.4.1           shadowtext_0.0.9       htmltools_0.5.2       
##  [88] ggfun_0.0.4            later_1.3.0            tzdb_0.1.2            
##  [91] geneplotter_1.70.0     aplot_0.1.1            lubridate_1.8.0       
##  [94] DBI_1.1.1              tweenr_1.0.2           dbplyr_2.1.1          
##  [97] MASS_7.3-54            Matrix_1.3-4           cli_3.0.1             
## [100] igraph_1.2.6           pkgconfig_2.0.3        xml2_1.3.2            
## [103] ggtree_3.0.4           svglite_2.0.0          annotate_1.70.0       
## [106] bslib_0.3.1            webshot_0.5.2          XVector_0.32.0        
## [109] rvest_1.0.1            yulab.utils_0.0.4      digest_0.6.28         
## [112] Biostrings_2.60.2      rmarkdown_2.11         cellranger_1.1.0      
## [115] fastmatch_1.1-3        tidytree_0.3.6         curl_4.3.2            
## [118] gtools_3.9.2           shiny_1.7.1            lifecycle_1.0.1       
## [121] nlme_3.1-153           jsonlite_1.7.2         echarts4r_0.4.2       
## [124] viridisLite_0.4.0      fansi_0.5.0            pillar_1.6.3          
## [127] lattice_0.20-45        GGally_2.1.2           KEGGREST_1.32.0       
## [130] fastmap_1.1.0          httr_1.4.2             survival_3.2-13       
## [133] GO.db_3.13.0           glue_1.4.2             png_0.1-7             
## [136] bit_4.0.4              ggforce_0.3.3          stringi_1.7.5         
## [139] sass_0.4.0             blob_1.2.2             caTools_1.18.2        
## [142] memoise_2.0.0          ape_5.5