AspleniaDataExploration

Introduction

Here we will explore the asplenia data.

The goal is to make a UMAP chart of the data. It will be compared to PCA and t-SNE projections.

Source code: https://github.com/markziemann/asplenia

library("readxl")
library("tsne")
library("umap")
library("plotly")
Loading required package: ggplot2

Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout
library("gplots")

Attaching package: 'gplots'
The following object is masked from 'package:stats':

    lowess

Load data

Using ReadXL to read from Excel spreadsheet.

There are 3095 rows and 823 columns. That’s a lot of data.

x <- read_xlsx("Khoury_Clean_Asplenia_COVID study_18102023.xlsx")
Warning: Expecting logical in HI1996 / R1996C217: got 'Yes'
Warning: Expecting logical in HJ1996 / R1996C218: got 'Yes'
Warning: Expecting logical in HK1996 / R1996C219: got 'No'
Warning: Expecting logical in HL2267 / R2267C220: got 'No'
Warning: Expecting logical in HQ2267 / R2267C225: got 'Yes'
Warning: Expecting logical in IZ2267 / R2267C260: got 'No'
Warning: Expecting logical in JO2267 / R2267C275: got 'No'
New names:
• `` -> `...7`
• `` -> `...10`
• `` -> `...88`
• `Other side-effects` -> `Other side-effects...97`
• `` -> `...147`
• `Other side-effects` -> `Other side-effects...156`
• `` -> `...206`
• `Other side-effects` -> `Other side-effects...215`
• `` -> `...265`
• `Other side-effects` -> `Other side-effects...274`
• `` -> `...324`
• `Other side-effects` -> `Other side-effects...333`
• `` -> `...805`
• `The other vaccine that I received:` -> `The other vaccine that I
  received:...808`
• `The other vaccine that I received:` -> `The other vaccine that I
  received:...810`
• `The other vaccine that I received:` -> `The other vaccine that I
  received:...812`
• `The other vaccine that I received:` -> `The other vaccine that I
  received:...814`
• `The other vaccine that I received:` -> `The other vaccine that I
  received:...816`
• `` -> `...817`
dim(x)
[1] 3095  823

Look at some simple data visualisation

Gender

Here we will do a simple analysis of the gender composition of this group.

par(mar=c(3,15,2,1))
vals <- table(x$`What is your gender?`)
vals <- vals[order(vals)]
barplot(vals,xlim=c(0,2000),main="gender breakdown",xlab="no. participants",cex.names=0.8,las=1,horiz = TRUE)
text(vals+150,((1:length(vals)-0.4)*1.2),labels = vals)

Asplenia in gender groups

Now we will look at the spleen status in these gender groups.

par(mar=c(3,15,25,1))

woman <- subset(x,`What is your gender?`=="Woman")
man <- subset(x,`What is your gender?`=="Man")
womanvals <- table(woman$`Have you ever been diagnosed with a spleen that doesn't work OR had it surgically removed?`)
womanvals <- womanvals[order(womanvals)]
names(womanvals) <- paste("(W)",names(womanvals))
manvals <- table(man$`Have you ever been diagnosed with a spleen that doesn't work OR had it surgically removed?`)
manvals <- manvals[order(manvals)]
names(manvals) <- paste("(M)",names(manvals))
catnames <- names(table(x$`Have you ever been diagnosed with a spleen that doesn't work OR had it surgically removed?`))

vals <- cbind("men"=manvals,"women"=womanvals)
par(mar=c(5,5,5,1))
barplot(vals,horiz = TRUE,las=1,main="spleen status by gender",xlab="no. participants",col=c("white","lightgray","darkgray"))
legend("right",legend=catnames,fill = c("white","lightgray","darkgray"),title="spleen status")
text(c(15,70,700,40,160,800),1.2*(c(0.9,1.1,1,1.9,2.1,2)-0.4),labels = vals,col="black",cex=1)

pc <- cbind("man"=manvals/sum(manvals)*100,"woman"=womanvals/sum(womanvals)*100)
barplot(pc,horiz = TRUE,las=1,main="spleen status by gender",xlab="proportion participants (%)",col = c("white","lightgray","darkgray","white","lightgray","darkgray"))
legend("right",legend=catnames,fill = c("white","lightgray","darkgray"),title="spleen status")
pcr <- signif(pc,digits = 2)
text(c(1.5,6,45,2.5,10,45),1.2*(c(0.9,1.1,1,1.9,2.1,2)-0.4),labels = pcr,col="black",cex=1)

#plot(0,type='n',axes=FALSE,ann=FALSE)

legend("right",legend=catnames,fill = c("white","lightgray","darkgray"),title="spleen status")

Clean NA

Need to check for NA values. Then convert responses to factors and then to numerical values.

x2 <- as.data.frame(x)
rownames(x2) <- x2$`Participant ID`
x2 <- x2[,-c(1,2)]
x2[1:4,1:5]
  I am willing to participate in this project
1                                         Yes
2                                         Yes
3                                         Yes
4                                         Yes
  Have you ever been diagnosed with a spleen that doesn't work OR had it surgically removed?
1                                                                 Yes, mine has been removed
2                                                                 Yes, mine has been removed
3                                                                 Yes, mine has been removed
4                                                                 Yes, mine has been removed
  Please select your age range What is your gender? ...7
1                        41-50                Woman <NA>
2                        41-50                  Man <NA>
3                        51-60                Woman <NA>
4                        61-70                Woman <NA>
hist(apply(x2,1,function(y) { length(which(is.na(y))) } ),main="NAs per row",xlab="NA count")

hist(apply(x2,2,function(y) { length(which(is.na(y))) } ),main="NAs per column",xlab="NA count")

x2f <- x2[,which (apply(x2,2,function(y) { length(which(is.na(y))) } ) < 50 )]
dim(x2)
[1] 3095  821
dim(x2f)
[1] 3095  673
x2fn <- apply(x2f,2, function(j) { as.numeric(factor(j))} )
rownames(x2fn) <- rownames(x2)

PCA

mds <- cmdscale(dist(x2fn))
plot(mds, xlab="Coordinate 1", ylab="Coordinate 2", type = "n",main="PCA") 
text(mds, labels=rownames(x2fn) ) 

t-SNE

#mytsne <- tsne(mtcars)
#plot(mytsne,pch=19,col="gray",cex=2)
#text(mytsne,labels = rownames(mtcars))

mytsne <- tsne(x2fn)
plot(mytsne,pch=1,cex=0.5,xlab="t-SNE1",ylab="t-SNE2",main="t-SNE")
grid()
#text(mytsne,labels = rownames(x2fn))

UMAP

First do a UMAP, then label groups

#set.seed(100) ; x2fn.umap <- umap(x2fn,preserve.seed = 100)
#saveRDS(x2fn.umap,"umap.rds")

x2fn.umap <- readRDS("umap.rds")
str(x2fn.umap)
List of 4
 $ layout: num [1:3095, 1:2] 2.74 5.97 1.99 1.68 -15.09 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3095] "1" "2" "3" "4" ...
  .. ..$ : NULL
 $ data  : num [1:3095, 1:673] 1 2 2 1 2 1 2 2 2 2 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3095] "1" "2" "3" "4" ...
  .. ..$ : chr [1:673] "PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)" "PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)" "PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)" "PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)" ...
 $ knn   :List of 2
  ..$ indexes  : num [1:3095, 1:15] 1 2 3 4 5 6 7 8 9 10 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:3095] "1" "2" "3" "4" ...
  .. .. ..$ : NULL
  ..$ distances: num [1:3095, 1:15] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:3095] "1" "2" "3" "4" ...
  .. .. ..$ : NULL
  ..- attr(*, "class")= chr "umap.knn"
 $ config:List of 24
  ..$ n_neighbors         : int 15
  ..$ n_components        : int 2
  ..$ metric              : chr "euclidean"
  ..$ n_epochs            : int 200
  ..$ input               : chr "data"
  ..$ init                : chr "spectral"
  ..$ min_dist            : num 0.1
  ..$ set_op_mix_ratio    : num 1
  ..$ local_connectivity  : num 1
  ..$ bandwidth           : num 1
  ..$ alpha               : num 1
  ..$ gamma               : num 1
  ..$ negative_sample_rate: int 5
  ..$ a                   : num 1.58
  ..$ b                   : num 0.895
  ..$ spread              : num 1
  ..$ random_state        : int 330461345
  ..$ transform_state     : int NA
  ..$ knn                 : logi NA
  ..$ knn_repeats         : num 1
  ..$ verbose             : logi FALSE
  ..$ umap_learn_args     : logi NA
  ..$ method              : chr "naive"
  ..$ metric.function     :function (m, origin, targets)  
  ..- attr(*, "class")= chr "umap.config"
 - attr(*, "class")= chr "umap"
par(mar = c(5.1, 4.1, 4.1, 2.1) )
plot(x2fn.umap$layout,cex=0.5,xlab="UMAP1",ylab="UMAP2",main="UMAP") ;grid()

xco <- c(-14.5, 14, 6.5, 3.5,-3.5,-2.5,1)
yco <- c( 5.5, 18,-6,-11,-8, -4.5, 5)
labs <- c("A","B","C","D","E","F","G")
text(xco,yco,labels=labs,col="red")

rect(-16,2,-13,6.5,border = "red") #A
rect(13,16,16.5,20,border = "red") #B
rect(5.5,-10,8,-5,border = "red") #C
rect(2.5,-15,5,-10,border = "red") #D
rect(-4,-10.5,1,-7,border = "red") #E
rect(-3,-6,2.5,-2.5,border = "red") #F
rect(-1.5,-2,4,6,border = "red") #G

Understand UMAP clustering.

head(x2fn.umap$layout)
          [,1]       [,2]
1   2.73868076  1.9709873
2   5.97274339 -7.1771966
3   1.98603866 -0.5288591
4   1.67703032  0.2138904
5 -15.08640343  3.8437682
8  -0.05341738 -4.3158785
A <- rownames(x2fn.umap$layout[which(x2fn.umap$layout[,1] < -10),])
B <- rownames(x2fn.umap$layout[which(x2fn.umap$layout[,2] > 10),])
C <- rownames(x2fn.umap$layout[which(x2fn.umap$layout[,1] > 5  & x2fn.umap$layout[,2] < -5),])
D <- rownames(x2fn.umap$layout[which(x2fn.umap$layout[,2] < -11 ),])
E <- rownames(x2fn.umap$layout[which(x2fn.umap$layout[,1] < 1  & x2fn.umap$layout[,2] < -7),])
F <- rownames(x2fn.umap$layout[which(x2fn.umap$layout[,1] < 2.5  & x2fn.umap$layout[,2] > -6  & x2fn.umap$layout[,2] < -2.5),])
G <- rownames(x2fn.umap$layout[which(x2fn.umap$layout[,1] > -1.5 & x2fn.umap$layout[,1] < 4  & x2fn.umap$layout[,2] > -2),])

groups <- list(A,B,C,D,E,F,G)
len <- sapply(groups,length) 
names(len) <- c("A","B","C","D","E","F","G")
len
   A    B    C    D    E    F    G 
 507  242  151  189  317  326 1358 

Distinguishing features of groups.

dfa <- x2fn[A,]
dfb <- x2fn[B,]
dfc <- x2fn[C,]
dfd <- x2fn[D,]
dfe <- x2fn[E,]
dff <- x2fn[F,]
dfg <- x2fn[G,]

ma <- colMeans(dfa)
mb <- colMeans(dfb)
mc <- colMeans(dfc)
md <- colMeans(dfd)
me <- colMeans(dfe)
mf <- colMeans(dff)
mg <- colMeans(dfg)

j <- data.frame(ma,mb,mc,md,me,mf,mg)
head(j)
                                                                                                                                                                                ma
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)                                              1.998028
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)                                                2.000000
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)                                              2.000000
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)                                                 1.996055
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus)) 2.000000
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Bronchiectasis (damage to the airways in the lung))     1.998028
                                                                                                                                                                                mb
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)                                              1.991736
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)                                                2.000000
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)                                              1.995868
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)                                                 1.995868
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus)) 2.000000
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Bronchiectasis (damage to the airways in the lung))     2.000000
                                                                                                                                                                                mc
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)                                              1.728477
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)                                                1.000000
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)                                              1.695364
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)                                                 1.781457
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus)) 1.841060
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Bronchiectasis (damage to the airways in the lung))     1.933775
                                                                                                                                                                                md
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)                                              1.936508
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)                                                1.984127
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)                                              1.878307
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)                                                 1.962963
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus)) 1.936508
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Bronchiectasis (damage to the airways in the lung))     1.984127
                                                                                                                                                                                me
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)                                              1.848580
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)                                                1.940063
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)                                              1.700315
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)                                                 1.899054
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus)) 1.946372
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Bronchiectasis (damage to the airways in the lung))     1.971609
                                                                                                                                                                                mf
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)                                              1.536810
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)                                                1.779141
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)                                              1.631902
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)                                                 1.723926
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus)) 1.748466
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Bronchiectasis (damage to the airways in the lung))     1.975460
                                                                                                                                                                                mg
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Allergies)                                              1.827688
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Anxiety)                                                1.848306
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Arthritis)                                              1.864507
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Asthma)                                                 1.871870
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus)) 1.891016
PRIOR TO THE PANDEMIC, did you have any of the below medical conditions?Please tick the one(s) that apply (choice=Bronchiectasis (damage to the airways in the lung))     1.988218

Selecting rows with some coefficient of variation.

cv <- function(x) { sd(x)/mean(x) }

#hist(apply(j,1,cv))

j2 <- j[which(apply(j,1,cv)>0),]

dim(j2)
[1] 392   7
#hist(apply(j2,1,cv))

j3 <- j[which(apply(j,1,cv)>0.03),]

dim(j3)
[1] 34  7
#hist(apply(j3,1,cv))

Plot the results.

rn <- gsub("TO THE PANDEMIC, did you have any of the below medical conditions\\?Please tick the one\\(s\\) that apply","symptoms:",rownames(j3))

rn <- gsub("Which test did confirm your diagnosis\\?Please tick the one\\(s\\) that apply ","test:",rn)

rn <- gsub("Which test did confirm your diagnosis\\? Pleas tick the one\\(s\\) that apply","test:",rn)

rn <- gsub("During the FIRST TWO WEEKS of your confirmed COVID diagnosis, did you experience any of the below COVID related-symptoms Please tick the one\\(s\\) that apply","symptoms:",rn)

rn <- gsub("If YES, which treatment\\(s\\) did you receive\\? Please tick the one\\(s\\) that apply","teatment:",rn)

rn <- gsub("Did you experience any side effects from the treatment\\(s\\)\\? Please tick the one\\(s\\) that apply","side effects:",rn)

rn
 [1] "PRIOR symptoms: (choice=Allergies)"                                             
 [2] "PRIOR symptoms: (choice=Anxiety)"                                               
 [3] "PRIOR symptoms: (choice=Arthritis)"                                             
 [4] "PRIOR symptoms: (choice=Asthma)"                                                
 [5] "PRIOR symptoms: (choice=Autoimmune diseases (e.g. Rheumatoid arthritis, Lupus))"
 [6] "PRIOR symptoms: (choice=Cancer)"                                                
 [7] "PRIOR symptoms: (choice=Depression)"                                            
 [8] "PRIOR symptoms: (choice=High blood pressure)"                                   
 [9] "PRIOR symptoms: (choice=Overweight/obesity)"                                    
[10] "PRIOR symptoms: (choice=Sleep disorders)"                                       
[11] "PRIOR symptoms: (choice=Type 2 diabetes)"                                       
[12] "PRIOR symptoms: (choice=I didnt have any medical conditions before COVID)"      
[13] "[Infection 1] test:(choice=RAT)"                                                
[14] "[Infection 1] test:(choice=PCR)"                                                
[15] "[Infection 1] symptoms: (choice=Altered or loss of sense of smell)"             
[16] "[Infection 1] symptoms: (choice=Altered or loss of sense of taste)"             
[17] "[Infection 1] symptoms: (choice=Brain fog)"                                     
[18] "[Infection 1] symptoms: (choice=Chills)"                                        
[19] "[Infection 1] symptoms: (choice=Congestion and/or runny nose)"                  
[20] "[Infection 1] symptoms: (choice=Cough)"                                         
[21] "[Infection 1] symptoms: (choice=Exhaustion/Extreme fatigue)"                    
[22] "[Infection 1] symptoms: (choice=Fever)"                                         
[23] "[Infection 1] symptoms: (choice=Headache)"                                      
[24] "[Infection 1] symptoms: (choice=Joint pain)"                                    
[25] "[Infection 1] symptoms: (choice=Loss of appetite)"                              
[26] "[Infection 1] symptoms: (choice=Muscle aches)"                                  
[27] "[Infection 1] symptoms: (choice=Poor concentration)"                            
[28] "[Infection 1] symptoms: (choice=Shortness of breath)"                           
[29] "[Infection 1] symptoms: (choice=Sleep changes/disturbance)"                     
[30] "[Infection 1] symptoms: (choice=Sneezing)"                                      
[31] "[Infection 1] symptoms: (choice=Sore throat)"                                   
[32] "[Infection 1] teatment: (choice=Antivirals [tablets])"                          
[33] "[Infection 1] side effects: (choice=No side effects)"                           
[34] "[Infection 2] test: (choice=RAT)"                                               
rownames(j3) <- rn

colnames(j3) <- c("A","B","C","D","E","F","G")

heatmap.2(as.matrix(j3),scale="none", margins = c(3,32), trace="none", cexRow = 1, cexCol = 1.2,
  colsep=0:ncol(j3), rowsep=0:nrow(j3), sepwidth=c(0.02, 0.02), sepcolor='black',srtCol=0)

Session information

sessionInfo()
R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.3 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0 
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0

locale:
 [1] LC_CTYPE=en_AU.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_AU.UTF-8        LC_COLLATE=en_AU.UTF-8    
 [5] LC_MONETARY=en_AU.UTF-8    LC_MESSAGES=en_AU.UTF-8   
 [7] LC_PAPER=en_AU.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C       

time zone: Australia/Melbourne
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] gplots_3.1.3  plotly_4.10.2 ggplot2_3.4.3 umap_0.2.10.0 tsne_0.1-3.1 
[6] readxl_1.4.3 

loaded via a namespace (and not attached):
 [1] utf8_1.2.3         generics_0.1.3     tidyr_1.3.0        bitops_1.0-7      
 [5] KernSmooth_2.23-22 gtools_3.9.4       lattice_0.22-5     caTools_1.18.2    
 [9] digest_0.6.33      magrittr_2.0.3     evaluate_0.21      grid_4.3.2        
[13] fastmap_1.1.1      cellranger_1.1.0   jsonlite_1.8.7     Matrix_1.6-1      
[17] RSpectra_0.16-1    httr_1.4.7         purrr_1.0.2        fansi_1.0.4       
[21] viridisLite_0.4.2  scales_1.2.1       lazyeval_0.2.2     cli_3.6.1         
[25] rlang_1.1.1        munsell_0.5.0      withr_2.5.0        yaml_2.3.7        
[29] tools_4.3.2        dplyr_1.1.3        colorspace_2.1-0   reticulate_1.32.0 
[33] vctrs_0.6.3        R6_2.5.1           png_0.1-8          lifecycle_1.0.3   
[37] htmlwidgets_1.6.2  pkgconfig_2.0.3    pillar_1.9.0       gtable_0.3.4      
[41] glue_1.6.2         data.table_1.14.8  Rcpp_1.0.11        xfun_0.40         
[45] tibble_3.2.1       tidyselect_1.2.0   rstudioapi_0.15.0  knitr_1.44        
[49] htmltools_0.5.6    rmarkdown_2.24     compiler_4.3.2     askpass_1.2.0     
[53] openssl_2.1.0