Gene Correlation Analysis E14.5 Mouse Cortex

Prologue

library(COTAN)
library(ComplexHeatmap)
library(circlize)
library(dplyr)
library(Hmisc)
library(Seurat)
library(patchwork)
library(Rfast)
library(parallel)
library(doParallel)
library(HiClimR)
library(stringr)
library(fst)

options(parallelly.fork.enable = TRUE)

dataSetFile <- "Data/MouseCortex/MouseCortex_E14.5.cotan.RDS"
name <- str_split(dataSetFile,pattern = "/",simplify = T)[3]
name <- str_remove(name,pattern = ".RDS")

project = "E14.5"


setLoggingLevel(1)
outDir <- "CoexData/"
setLoggingFile(paste0(outDir, "Logs/",name,".log"))

obj <- readRDS(dataSetFile)
file_code = getMetadataElement(obj, datasetTags()[["cond"]])
source("src/Functions.R")

To compare the ability of COTAN to asses the real correlation between genes we define some pools of genes:

  1. Constitutive genes
  2. Neural progenitor genes
  3. Pan neuronal genes
  4. Some layer marker genes
genesList <- list(
  "NPGs"= 
    c("Nes", "Vim", "Sox2", "Sox1", "Notch1", "Hes1", "Hes5", "Pax6"),
  "PNGs"= 
    c("Map2", "Tubb3", "Neurod1", "Nefm", "Nefl", "Dcx", "Tbr1"),
  "hk"= 
    c("Calm1", "Cox6b1", "Ppia", "Rpl18", "Cox7c", "Erh", "H3f3a",
      "Taf1", "Taf2", "Gapdh", "Actb", "Golph3", "Zfr", "Sub1",
      "Tars", "Amacr"),
  "layers" = 
    c("Reln","Lhx5","Cux1","Satb2","Tle1","Mef2c","Rorb","Sox5","Bcl11b","Fezf2","Foxp2","Ntf3","Rasgrf2","Pvrl3", "Cux2","Slc17a6", "Sema3c","Thsd7a", "Sulf2", "Kcnk2","Grik3", "Etv1", "Tle4", "Tmem200a", "Glra2", "Etv1","Htr1f", "Sulf1","Rxfp1", "Syt6") 
  # From https://www.science.org/doi/10.1126/science.aam8999
)

COTAN

genesFromListExpressed <- unlist(genesList)[unlist(genesList) %in% getGenes(obj)]
int.genes <-getGenes(obj)
coexMat.big <- getGenesCoex(obj)[genesFromListExpressed,genesFromListExpressed]

coexMat <- getGenesCoex(obj)[c(genesList$NPGs,genesList$hk,genesList$PNGs),c(genesList$NPGs,genesList$hk,genesList$PNGs)]

f1 = colorRamp2(seq(-0.5,0.5, length = 3), c("#DC0000B2", "white","#3C5488B2" ))

split.genes <- base::factor(c(rep("NPGs",length(genesList[["NPGs"]])),
                         rep("HK",length(genesList[["hk"]])),
                         rep("PNGs",length(genesList[["PNGs"]]))
                        ),
                         levels = c("NPGs","HK","PNGs"))

lgd = Legend(col_fun = f1, title = "COTAN coex")

htmp <- Heatmap(as.matrix(coexMat),
        #width = ncol(coexMat)*unit(2.5, "mm"), 
        height = nrow(coexMat)*unit(3, "mm"),
        cluster_rows = FALSE,
        cluster_columns = FALSE,
        col = f1,
        row_names_side = "left",
        row_names_gp = gpar(fontsize = 11),
        column_names_gp  = gpar(fontsize = 11),
        column_split = split.genes,
        row_split = split.genes,
        cluster_row_slices = FALSE, 
    cluster_column_slices = FALSE,
    heatmap_legend_param = list(
        title = "COTAN coex", at = c(-0.5, 0, 0.5),
        direction = "horizontal",
        labels = c("-0.5", "0", "0.5")
    )
   )
draw(htmp, heatmap_legend_side="right")

GDI_DF <- calculateGDI(obj)
GDI_DF$geneType <- NA
for (cat in names(genesList)) {
  GDI_DF[rownames(GDI_DF) %in% genesList[[cat]],]$geneType <- cat
}

GDI_DF$GDI_centered <- scale(GDI_DF$GDI,center = T,scale = T)

GDI_DF[genesFromListExpressed,]
         sum.raw.norm      GDI  exp.cells geneType GDI_centered
Nes          8.839957 4.678500 27.7337997     NPGs   3.63695691
Vim         10.246463 4.534465 51.0309278     NPGs   3.42694609
Sox2         9.124228 4.566666 31.4709131     NPGs   3.47389659
Sox1         7.368458 3.455731  9.5636966     NPGs   1.85409012
Notch1       7.469284 4.355698 11.6623711     NPGs   3.16629269
Hes1         7.698079 4.634264 10.5946244     NPGs   3.57245806
Hes5         9.405265 4.812530 22.7908689     NPGs   3.83238101
Pax6         8.144613 4.367938 17.3877025     NPGs   3.18413945
Map2        10.172685 3.768818 72.7172312     PNGs   2.31058907
Tubb3       11.537925 4.586213 88.3836524     PNGs   3.50239807
Neurod1      8.881391 3.388955 22.9657585     PNGs   1.75672703
Nefm         8.288330 3.346732 17.5441826     PNGs   1.69516332
Nefl         7.678477 3.544436  8.6340206     PNGs   1.98342736
Dcx         10.120356 4.821636 66.9090574     PNGs   3.84565720
Tbr1         8.472723 3.926272 24.1715758     PNGs   2.54016525
Calm1       11.491577 1.857652 96.5114138       hk  -0.47600225
Cox6b1      10.398257 1.992891 84.6833579       hk  -0.27881530
Ppia         7.666735 2.386108 17.4797496       hk   0.29451755
Rpl18        9.176712 2.575898 51.5187776       hk   0.57124278
Cox7c        8.439961 1.902976 31.8206922       hk  -0.40991709
Erh          6.593118 2.307720  6.5721649       hk   0.18022355
H3f3a        9.388420 1.886267 58.1093520       hk  -0.43428010
Taf1         8.315368 2.138643 26.8869661       hk  -0.06630076
Taf2         8.017975 1.861938 21.1432253       hk  -0.46975224
Gapdh        5.018736 1.853094  1.5648012       hk  -0.48264772
Actb        12.609181 1.492016 99.6778351       hk  -1.00911996
Golph3       7.150183 1.851371 10.8891753       hk  -0.48515921
Zfr          9.269238 2.273001 50.7916053       hk   0.12960056
Sub1        10.018254 2.583820 74.7238586       hk   0.58279347
Tars         8.056910 2.487556 22.8645066       hk   0.44243393
Amacr        5.492910 1.714319  2.2551546       hk  -0.68499008
Reln         7.095360 3.011725  4.5563328   layers   1.20670295
Lhx5         6.037778 2.901306  2.0434462   layers   1.04570542
Cux1         8.597262 3.026589 31.3512518   layers   1.22837610
Satb2        7.603191 3.121471 11.0916789   layers   1.36671855
Tle1         7.891909 2.322600 17.8111193   layers   0.20191897
Mef2c        8.776162 4.057560 23.6377025   layers   2.73159053
Rorb         6.523092 1.943768  4.6023564   layers  -0.35043950
Sox5         9.301863 3.584350 38.2639912   layers   2.04162343
Bcl11b       9.860621 4.189936 53.4057437   layers   2.92460213
Fezf2        8.804060 3.630239 28.8751841   layers   2.10853283
Foxp2        7.474618 2.254280  8.4867452   layers   0.10230519
Ntf3         4.673267 2.314479  0.8560383   layers   0.19007802
Pvrl3        7.255727 3.417288 10.6866716   layers   1.79803751
Cux2         7.652690 3.088322 11.2573638   layers   1.31838644
Slc17a6      7.901396 2.998305 14.0648012   layers   1.18713575
Sema3c       7.222013 2.481806  7.6307069   layers   0.43405122
Thsd7a       7.472372 3.054089  8.0449190   layers   1.26847311
Sulf2        6.491056 2.379550  4.6759941   layers   0.28495572
Kcnk2        7.151877 1.901258  9.0390280   layers  -0.41242163
Grik3        6.673233 2.781234  5.3019146   layers   0.87063375
Etv1         6.743118 2.264998  4.8232695   layers   0.11793173
Tle4         7.880978 2.635418 15.0405007   layers   0.65802538
Tmem200a     6.188517 2.926026  3.8751841   layers   1.08174899
Glra2        7.057638 3.858495  8.1369661   layers   2.44134235
Etv1.1       6.743118 2.264998  4.8232695   layers   0.11793173
Sulf1        5.465717 2.461515  1.0125184   layers   0.40446505
Syt6         7.555334 3.052113  8.8457290   layers   1.26559064
GDIPlot(obj,GDIIn = GDI_DF, genes = genesList,GDIThreshold = 1.4)

Seurat correlation

srat<- CreateSeuratObject(counts = getRawData(obj), 
                          project = project, 
                          min.cells = 3, 
                          min.features = 200)
srat[["percent.mt"]] <- PercentageFeatureSet(srat, pattern = "^mt-")
srat <- NormalizeData(srat)
srat <- FindVariableFeatures(srat, selection.method = "vst", nfeatures = 2000)

# plot variable features with and without labels
plot1 <- VariableFeaturePlot(srat)

plot1$data$centered_variance <- scale(plot1$data$variance.standardized,
                                      center = T,scale = F)

write.csv(plot1$data,paste0("CoexData/",
                            "Variance_Seurat_genes",
                            getMetadataElement(obj, 
                                               datasetTags()[["cond"]]),".csv"))

LabelPoints(plot = plot1, points = c(genesList$NPGs,genesList$PNGs,genesList$layers), repel = TRUE)

LabelPoints(plot = plot1, points = c(genesList$hk), repel = TRUE)

all.genes <- rownames(srat)
srat <- ScaleData(srat, features = all.genes)
seurat.data = GetAssayData(srat[["RNA"]],layer = "data")
corr.pval.list <- correlation_pvalues(data = seurat.data,
                                      genesFromListExpressed,
                                      n.cells = getNumCells(obj))

seurat.data.cor.big <- as.matrix(Matrix::forceSymmetric(corr.pval.list$data.cor, uplo = "U"))

htmp <- correlation_plot(seurat.data.cor.big, 
                         genesList, title="Seurat corr")


p_values.fromSeurat <- corr.pval.list$p_values
seurat.data.cor.big <- corr.pval.list$data.cor

rm(corr.pval.list)
gc()
            used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells  10156112  542.4   17749498  948.0  17749498  948.0
Vcells 386493768 2948.8  717720243 5475.8 740876735 5652.5
draw(htmp, heatmap_legend_side="right")

rm(seurat.data.cor.big)
rm(p_values.fromSeurat)

Seurat SC Transform

srat <-  SCTransform(srat, 
                     method = "glmGamPoi", 
                     vars.to.regress = "percent.mt", 
                     verbose = FALSE)

seurat.data <- GetAssayData(srat[["SCT"]],layer = "data")

#Remove genes with all zeros
seurat.data <-seurat.data[rowSums(seurat.data) > 0,]


corr.pval.list <- correlation_pvalues(seurat.data,
                                      genesFromListExpressed,
                                      n.cells = getNumCells(obj))



seurat.data.cor.big <- as.matrix(Matrix::forceSymmetric(corr.pval.list$data.cor, uplo = "U"))

htmp <- correlation_plot(seurat.data.cor.big, 
                         genesList, title="Seurat corr SCT")



p_values.fromSeurat <- corr.pval.list$p_values
seurat.data.cor.big <- corr.pval.list$data.cor

rm(corr.pval.list)
gc()
            used   (Mb) gc trigger   (Mb)   max used   (Mb)
Ncells  10484557  560.0   17749498  948.0   17749498  948.0
Vcells 474103212 3617.2 1240511778 9464.4 1240500358 9464.3
draw(htmp, heatmap_legend_side="right")

plot1 <- VariableFeaturePlot(srat)

plot1$data$centered_variance <- scale(plot1$data$residual_variance,
                                      center = T,scale = F)
write.csv(plot1$data,paste0("CoexData/",
                            "Variance_SeuratSCT_genes",
                            getMetadataElement(obj, 
                                               datasetTags()[["cond"]]),".csv"))

write_fst(as.data.frame(seurat.data.cor.big),path = paste0("CoexData/SeuratCorrSCT_",file_code,".fst"), compress = 100)

write_fst(as.data.frame(p_values.fromSeurat),path =  paste0("CoexData/SeuratPValuesSCT_", file_code,".fst"))
write.csv(as.data.frame(p_values.fromSeurat),paste0("CoexData/SeuratPValuesSCT_", file_code,".csv"))
rm(seurat.data.cor.big)
rm(p_values.fromSeurat)

Monocle

library(monocle3)
cds <- new_cell_data_set(getRawData(obj),
                         cell_metadata = getMetadataCells(obj),
                         gene_metadata = getMetadataGenes(obj)
                         )
cds <- preprocess_cds(cds, num_dim = 100)

normalized_counts <- normalized_counts(cds)
#Remove genes with all zeros
normalized_counts <- normalized_counts[rowSums(normalized_counts) > 0,]


corr.pval.list <- correlation_pvalues(normalized_counts,
                                      genesFromListExpressed,
                                      n.cells = getNumCells(obj))

rm(normalized_counts)

monocle.data.cor.big <- as.matrix(Matrix::forceSymmetric(corr.pval.list$data.cor, uplo = "U"))

htmp <- correlation_plot(data.cor.big = monocle.data.cor.big,
                         genesList,
                         title = "Monocle corr")


p_values.from.monocle <- corr.pval.list$p_values
monocle.data.cor.big <- corr.pval.list$data.cor

rm(corr.pval.list)
gc()
            used   (Mb) gc trigger   (Mb)   max used   (Mb)
Ncells  10670810  569.9   17749498  948.0   17749498  948.0
Vcells 476917692 3638.6 1240511778 9464.4 1240500358 9464.3
draw(htmp, heatmap_legend_side="right")

Cs-Core

library(CSCORE)

Convert to Seurat obj

sceObj <- convertToSingleCellExperiment(obj)

# Correct: assay=NULL (or omit), data=NULL (since no logcounts)
seuratObj <- as.Seurat(
  x       = sceObj,
  counts  = "counts",
  data    = NULL,
  assay   = NULL,      # IMPORTANT: do NOT set to "RNA" here
  project = "COTAN"
)

# as.Seurat(SCE) creates assay "originalexp" by default; rename it to RNA
seuratObj <- RenameAssays(seuratObj, originalexp = "RNA", verbose = FALSE)
DefaultAssay(seuratObj) <- "RNA"

# Optional: keep COTAN payload
seuratObj@misc$COTAN <- S4Vectors::metadata(sceObj)

Extract CS_CORE corr matrix

#seuratObj@assays$RNA@counts <- ceiling(seuratObj@assays$RNA@counts)
csCoreRes <- CSCORE(seuratObj, genes = genesFromListExpressed)
[INFO] IRLS converged after 3 iterations.
[INFO] Starting WLS for covariance at Wed Jan 21 11:27:26 2026
[INFO] 1 among 58 genes have invalid variance estimates. Their co-expressions with other genes were set to 0.
[INFO] 0.0605% co-expression estimates were greater than 1 and were set to 1.
[INFO] 0.0000% co-expression estimates were smaller than -1 and were set to -1.
[INFO] Finished WLS. Elapsed time: 0.3003 seconds.
mat <- as.matrix(csCoreRes$est)
diag(mat) <- 0

split.genes <- base::factor(c(rep("NPGs",sum(genesList[["NPGs"]] %in% genesFromListExpressed)),
                         rep("HK",sum(genesList[["hk"]] %in% genesFromListExpressed)),
                         rep("PNGs",sum(genesList[["PNGs"]] %in% genesFromListExpressed))
                        ),
                         levels = c("NPGs","HK","PNGs"))

f1 = colorRamp2(seq(-0.5,0.5, length = 3), c("#DC0000B2", "white","#3C5488B2" ))

htmp <- Heatmap(as.matrix(mat[c(genesList$NPGs,genesList$hk,genesList$PNGs),c(genesList$NPGs,genesList$hk,genesList$PNGs)]),
        #width = ncol(coexMat)*unit(2.5, "mm"), 
        height = nrow(mat)*unit(3, "mm"),
        cluster_rows = FALSE,
        cluster_columns = FALSE,
        col = f1,
        row_names_side = "left",
        row_names_gp = gpar(fontsize = 11),
        column_names_gp  = gpar(fontsize = 11),
        column_split = split.genes,
        row_split = split.genes,
        cluster_row_slices = FALSE, 
    cluster_column_slices = FALSE,
    heatmap_legend_param = list(
         title = "CS-CORE", at = c(-0.5, 0, 0.5),
         direction = "horizontal",
         labels = c("-0.5", "0", "0.5")
     )
   )

draw(htmp, heatmap_legend_side="right")

Save CS_CORE matrix

write_fst(as.data.frame(csCoreRes$est), path = paste0("CoexData/CS_CORECorr_", file_code,".fst"),compress = 100)
write_fst(as.data.frame(csCoreRes$p_value), path = paste0("CoexData/CS_COREPValues_", file_code,".fst"),compress = 100)
write.csv(as.data.frame(csCoreRes$p_value), paste0("CoexData/CS_COREPValues_", file_code,".csv"))

Baseline: Spearman on UMI counts

corr.pval.list <- correlation_pvaluesSpearman(data = getRawData(obj),
                                      genesFromListExpressed,
                                      n.cells = getNumCells(obj))

data.cor.big <- as.matrix(Matrix::forceSymmetric(corr.pval.list$data.cor, uplo = "U"))

htmp <- correlation_plot(data.cor.big, 
                         genesList, title="UMI baseline S. corr")


p_values.fromSp.C <- corr.pval.list$p_values
data.cor.bigSp.C <- corr.pval.list$data.cor

rm(corr.pval.list)
gc()
            used   (Mb) gc trigger   (Mb)   max used   (Mb)
Ncells  10679205  570.4   17749498  948.0   17749498  948.0
Vcells 477099407 3640.0 1240511778 9464.4 1240500358 9464.3
draw(htmp, heatmap_legend_side="right")

write.csv(as.data.frame(p_values.fromSp.C), paste0("CoexData/BaselineUMISpCorrPValues_", file_code,".csv"))

Baseline: Pearson on binarized counts

corr.pval.list <- correlation_pvalues(data = getZeroOneProj(obj),
                                      genesFromListExpressed,
                                      n.cells = getNumCells(obj))

data.cor.big <- as.matrix(Matrix::forceSymmetric(corr.pval.list$data.cor, uplo = "U"))

htmp <- correlation_plot(data.cor.big, 
                         genesList, title="Zero-one P. corr")


p_values.fromSp.C <- corr.pval.list$p_values
data.cor.bigSp.C <- corr.pval.list$data.cor

rm(corr.pval.list)
gc()
            used   (Mb) gc trigger   (Mb)   max used   (Mb)
Ncells  10679332  570.4   17749498  948.0   17749498  948.0
Vcells 477099664 3640.0 1240511778 9464.4 1240500358 9464.3
draw(htmp, heatmap_legend_side="right")

write.csv(as.data.frame(p_values.fromSp.C), paste0("CoexData/ZeroOnePCorrPValues_", file_code,".csv"))

Sys.time()
[1] "2026-01-21 11:27:31 CET"
sessionInfo()
R version 4.5.2 (2025-10-31)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.5 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  LAPACK version 3.10.0

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
 [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
 [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
[10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

time zone: Europe/Rome
tzcode source: system (glibc)

attached base packages:
 [1] stats4    parallel  grid      stats     graphics  grDevices utils    
 [8] datasets  methods   base     

other attached packages:
 [1] CSCORE_1.0.2                monocle3_1.3.7             
 [3] SingleCellExperiment_1.32.0 SummarizedExperiment_1.38.1
 [5] GenomicRanges_1.62.1        Seqinfo_1.0.0              
 [7] IRanges_2.44.0              S4Vectors_0.48.0           
 [9] MatrixGenerics_1.22.0       matrixStats_1.5.0          
[11] Biobase_2.70.0              BiocGenerics_0.56.0        
[13] generics_0.1.3              fstcore_0.10.0             
[15] fst_0.9.8                   stringr_1.6.0              
[17] HiClimR_2.2.1               doParallel_1.0.17          
[19] iterators_1.0.14            foreach_1.5.2              
[21] Rfast_2.1.5.1               RcppParallel_5.1.10        
[23] zigg_0.0.2                  Rcpp_1.1.0                 
[25] patchwork_1.3.2             Seurat_5.4.0               
[27] SeuratObject_5.3.0          sp_2.2-0                   
[29] Hmisc_5.2-3                 dplyr_1.1.4                
[31] circlize_0.4.16             ComplexHeatmap_2.26.0      
[33] COTAN_2.11.1               

loaded via a namespace (and not attached):
  [1] RcppAnnoy_0.0.22          splines_4.5.2            
  [3] later_1.4.2               tibble_3.3.0             
  [5] polyclip_1.10-7           rpart_4.1.24             
  [7] fastDummies_1.7.5         lifecycle_1.0.4          
  [9] Rdpack_2.6.4              globals_0.18.0           
 [11] lattice_0.22-7            MASS_7.3-65              
 [13] backports_1.5.0           ggdist_3.3.3             
 [15] dendextend_1.19.0         magrittr_2.0.4           
 [17] plotly_4.11.0             rmarkdown_2.29           
 [19] yaml_2.3.10               httpuv_1.6.16            
 [21] otel_0.2.0                glmGamPoi_1.20.0         
 [23] sctransform_0.4.2         spam_2.11-1              
 [25] spatstat.sparse_3.1-0     reticulate_1.44.1        
 [27] minqa_1.2.8               cowplot_1.2.0            
 [29] pbapply_1.7-2             RColorBrewer_1.1-3       
 [31] abind_1.4-8               Rtsne_0.17               
 [33] purrr_1.2.0               nnet_7.3-20              
 [35] GenomeInfoDbData_1.2.14   ggrepel_0.9.6            
 [37] irlba_2.3.5.1             listenv_0.10.0           
 [39] spatstat.utils_3.2-1      goftest_1.2-3            
 [41] RSpectra_0.16-2           spatstat.random_3.4-3    
 [43] fitdistrplus_1.2-2        parallelly_1.46.0        
 [45] DelayedMatrixStats_1.30.0 ncdf4_1.24               
 [47] codetools_0.2-20          DelayedArray_0.36.0      
 [49] tidyselect_1.2.1          shape_1.4.6.1            
 [51] UCSC.utils_1.4.0          farver_2.1.2             
 [53] lme4_1.1-37               ScaledMatrix_1.16.0      
 [55] viridis_0.6.5             base64enc_0.1-3          
 [57] spatstat.explore_3.6-0    jsonlite_2.0.0           
 [59] GetoptLong_1.1.0          Formula_1.2-5            
 [61] progressr_0.18.0          ggridges_0.5.6           
 [63] survival_3.8-3            tools_4.5.2              
 [65] ica_1.0-3                 glue_1.8.0               
 [67] gridExtra_2.3             SparseArray_1.10.8       
 [69] xfun_0.52                 distributional_0.6.0     
 [71] ggthemes_5.2.0            GenomeInfoDb_1.44.0      
 [73] withr_3.0.2               fastmap_1.2.0            
 [75] boot_1.3-32               digest_0.6.37            
 [77] rsvd_1.0.5                parallelDist_0.2.6       
 [79] R6_2.6.1                  mime_0.13                
 [81] colorspace_2.1-1          Cairo_1.7-0              
 [83] scattermore_1.2           tensor_1.5               
 [85] spatstat.data_3.1-9       tidyr_1.3.1              
 [87] data.table_1.18.0         httr_1.4.7               
 [89] htmlwidgets_1.6.4         S4Arrays_1.10.1          
 [91] uwot_0.2.3                pkgconfig_2.0.3          
 [93] gtable_0.3.6              lmtest_0.9-40            
 [95] S7_0.2.1                  XVector_0.50.0           
 [97] htmltools_0.5.8.1         dotCall64_1.2            
 [99] clue_0.3-66               scales_1.4.0             
[101] png_0.1-8                 reformulas_0.4.1         
[103] spatstat.univar_3.1-6     rstudioapi_0.18.0        
[105] knitr_1.50                reshape2_1.4.4           
[107] rjson_0.2.23              nloptr_2.2.1             
[109] checkmate_2.3.2           nlme_3.1-168             
[111] proxy_0.4-29              zoo_1.8-14               
[113] GlobalOptions_0.1.2       KernSmooth_2.23-26       
[115] miniUI_0.1.2              foreign_0.8-90           
[117] pillar_1.11.1             vctrs_0.7.0              
[119] RANN_2.6.2                promises_1.5.0           
[121] BiocSingular_1.26.1       beachmat_2.26.0          
[123] xtable_1.8-4              cluster_2.1.8.1          
[125] htmlTable_2.4.3           evaluate_1.0.5           
[127] magick_2.9.0              zeallot_0.2.0            
[129] cli_3.6.5                 compiler_4.5.2           
[131] rlang_1.1.7               crayon_1.5.3             
[133] future.apply_1.20.0       labeling_0.4.3           
[135] plyr_1.8.9                stringi_1.8.7            
[137] viridisLite_0.4.2         deldir_2.0-4             
[139] BiocParallel_1.44.0       assertthat_0.2.1         
[141] lazyeval_0.2.2            spatstat.geom_3.6-1      
[143] Matrix_1.7-4              RcppHNSW_0.6.0           
[145] sparseMatrixStats_1.20.0  future_1.69.0            
[147] ggplot2_4.0.1             shiny_1.12.1             
[149] rbibutils_2.3             ROCR_1.0-11              
[151] igraph_2.2.1