1 Introduction

In this document, a typical analysis using the groupProbPlot function is shown. The indention with this function is to display differences between groups, tissues, stimulations or similar, with a single-cell resolution. The idea is that a cell that comes from a cell type that is specific for one of the two investigated groups will be surrounded exclusively by euclidean nearest neighbors that come from the same group. This is the basis for the analysis: in the standard case, the individual cell is given a number between -1 and 1 that reflects which fraction of the 100 closest neighbors in the euclidean space created by all the input markers that come from one group (-1) or the other (1). The scale is tweaked to reflect that the middle in this case corresponds to a likelihood of a perfect mix with 50% of the cells from each group. For an introduction to the package and example data description, see the general DepecheR package vinjette.

2 Installation

This is how to install the package, if that has not already been done:

if(!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("DepecheR")

3 Preparations of example data

For visualization purposes, some 2-dimensional representation of the data is necessary. This could just be two of the variables used to construct the probability vector, but it is more informative to include data on all variables, aided by e.g. tSNE or UMAP. In this case, we will display the data with tSNE.

library(DepecheR)
data("testData")
data("testDataSNE")

4 Group probability plotting

This function differs from the other group differentiation functions in the DepecheR package in that no clustering output from the depeche function or any other clustering algorithm is needed as input. Instead, all the indata that the euclidean nearest neighbors should be identified from needs to be added, together with a group identity vector and the 2D data used to display the data. Optionally, the resulting group probability vector can be returned, which will be the case in this example.

dataTrans <-
  testData[, c("SYK", "CD16", "CD57", "EAT.2", "CD8", "NKG2C", "CD2", "CD56")]

testData$groupProb <- groupProbPlot(xYData = testDataSNE$Y, 
                                    groupVector = testData$label, 
                                    groupName1 = "Group_1",
                                    groupName2 = "Group_2",
                                    dataTrans = dataTrans)
## [1] "Done with k-means"
## [1] "Now the first bit is done, and the iterative part takes off"
## [1] "Clusters 1 to 7 smoothed in 2.9159369468689 . Now, 13 clusters are 
## [1] left."
## [1] "Clusters 8 to 14 smoothed in 0.925199031829834 . Now, 6 clusters are 
## [1] left."
## [1] "Clusters 15 to 20 smoothed in 0.905373096466064 . Now, 0 clusters are 
## [1] left."

When running this function, the output is a high-resolution plot saved to disc. A low resolution variant of the result (made small for BioConductor size constraint reasons) is shown here. In this case, the groups are so separated, that almost all cells show a 100% probability of belonging to one of the groups or the other. This is unusual with real data, so the white fields are generally larger.

Group probaility plot

5 Session information

sessionInfo()
## R version 4.3.1 (2023-06-16)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.3 LTS
## 
## Matrix products: default
## BLAS:   /home/biocbuild/bbs-3.18-bioc/R/lib/libRblas.so 
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_GB              LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: America/New_York
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] DepecheR_1.18.0  knitr_1.44       BiocStyle_2.30.0
## 
## loaded via a namespace (and not attached):
##  [1] gtable_0.3.4        ellipse_0.5.0       xfun_0.40          
##  [4] bslib_0.5.1         ggplot2_3.4.4       gmodels_2.18.1.1   
##  [7] caTools_1.18.2      ggrepel_0.9.4       collapse_2.0.3     
## [10] lattice_0.22-5      vctrs_0.6.4         tools_4.3.1        
## [13] doSNOW_1.0.20       bitops_1.0-7        generics_0.1.3     
## [16] parallel_4.3.1      tibble_3.2.1        fansi_1.0.5        
## [19] DEoptimR_1.1-3      rARPACK_0.11-0      pkgconfig_2.0.3    
## [22] Matrix_1.6-1.1      KernSmooth_2.23-22  RColorBrewer_1.1-3 
## [25] mixOmics_6.26.0     lifecycle_1.0.3     stringr_1.5.0      
## [28] compiler_4.3.1      FNN_1.1.3.2         gplots_3.1.3       
## [31] munsell_0.5.0       codetools_0.2-19    snow_0.4-4         
## [34] htmltools_0.5.6.1   sass_0.4.7          yaml_2.3.7         
## [37] beanplot_1.3.1      tidyr_1.3.0         pillar_1.9.0       
## [40] jquerylib_0.1.4     MASS_7.3-60         BiocParallel_1.36.0
## [43] gdata_3.0.0         cachem_1.0.8        viridis_0.6.4      
## [46] iterators_1.0.14    foreach_1.5.2       robustbase_0.99-0  
## [49] RSpectra_0.16-1     gtools_3.9.4        tidyselect_1.2.0   
## [52] digest_0.6.33       stringi_1.7.12      purrr_1.0.2        
## [55] dplyr_1.1.3         reshape2_1.4.4      bookdown_0.36      
## [58] fastmap_1.1.1       grid_4.3.1          colorspace_2.1-0   
## [61] cli_3.6.1           magrittr_2.0.3      utf8_1.2.4         
## [64] corpcor_1.6.10      scales_1.2.1        rmarkdown_2.25     
## [67] matrixStats_1.0.0   igraph_1.5.1        gridExtra_2.3      
## [70] moments_0.14.1      evaluate_0.22       viridisLite_0.4.2  
## [73] rlang_1.1.1         Rcpp_1.0.11         glue_1.6.2         
## [76] BiocManager_1.30.22 jsonlite_1.8.7      R6_2.5.1           
## [79] plyr_1.8.9