scSimEval evaluates single-cell
simulation methods using an objective, ground-truth-free framework. It
includes 62 distinct evaluation measures organized into
8 core biological and computational categories.
Every metric operates directly on the real biological reference data and the synthetic data generated by single-cell and multiomics simulators (scRNA-seq, scATAC-seq, and paired/unpaired co-assays). All 62 metrics in this catalog match identically with the metric identifiers and labels evaluated within the package functions, exported tables, and the interactive scSimEval Studio Shiny application.
| Category | Domain | Number of Metrics | Primary Focus |
|---|---|---|---|
| I | Distributional Properties | 14 | Statistical distance between real and simulated single-cell count distributions and manifolds |
| II | Correlations & Zero-Inflation | 6 | Biological overdispersion (BCV), dropout curves, cell correlations, and gene co-expression |
| III | Cellular Structure & Concordance | 10 | Unsupervised cluster separation (ASW, Dunn, DB, CH) and supervised cell type preservation (ARI, NMI, AMI, V-measure, purity, precision) |
| IV | Batch Effects & Confounder Mixing | 7 | Technical batch mixing (CellMixS, LISI, Shannon entropy, PCR \(R^2\), Seurat mixing, batch ASW, and ldfDiff) |
| V | Biological Signal & Downstream Fidelity | 15 | Differentially expressed gene (DEG) preservation, fold-change correlation, null uniformity, classifier accuracy, and Shaky Foundations variance |
| VI | Trajectory & Lineage Dynamics | 2 | Inferred developmental pseudotime rank correlation and cell lineage branching tree topology |
| VII | Cross-Modal Coupling & Modularity | 6 | Paired and joint ATAC-RNA regulatory links, FOSCTTM, Match@1, label transfer, and \(R_V\) coefficient |
| VIII | Computational Scalability | 2 | Execution runtime in seconds and peak RAM memory allocation in MiB |
| Total | 62 | Complete single-cell and multiomics simulation evaluation suite |
Below is the definitive cross-reference table mapping each metric’s internal identifier, user-facing display label in the Shiny app and figures, category, evaluation direction, and scope:
| # | Metric ID | Shiny App Display Label | Category | Direction | Description |
|---|---|---|---|---|---|
| 1 | KS |
KS Distance | (I) Distributional Properties | Lower is better | Kolmogorov-Smirnov supremum distance between cumulative distributions |
| 2 | Wasserstein |
Wasserstein Dist. | (I) Distributional Properties | Lower is better | 1D Earth Mover’s Distance measuring work required to transform distributions |
| 3 | MAD |
MAD | (I) Distributional Properties | Lower is better | Median Absolute Deviation discrepancy across cell and gene properties |
| 4 | MAE |
MAE | (I) Distributional Properties | Lower is better | Mean Absolute Error across summary statistics |
| 5 | RMSE |
RMSE | (I) Distributional Properties | Lower is better | Root Mean Squared Error penalizing large deviations in moment statistics |
| 6 | OV |
Overlap Coeff. | (I) Distributional Properties | Higher is better | Kernel density curve area intersection between reference and simulated distributions |
| 7 | Bhattacharyya |
Bhattacharyya Dist. | (I) Distributional Properties | Lower is better | Statistical divergence between discrete count probability distributions |
| 8 | ECDF_DiffArea |
ECDF Diff. Area | (I) Distributional Properties | Lower is better | Integrated area difference between empirical cumulative distribution functions |
| 9 | Runs_Statistic |
Runs Statistic | (I) Distributional Properties | Lower is better | Wald-Wolfowitz runs test absolute \(z\)-score testing random interleaving |
| 10 | Fasano_Franceschini_2D_KS |
Fasano-Franceschini 2D | (I) Distributional Properties | Lower is better | 2D extension of the KS statistic for bivariate feature distributions |
| 11 | Peacock_2D_KS |
Peacock 2D | (I) Distributional Properties | Lower is better | 2D Peacock bivariate distribution test statistic |
| 12 | KDE_Bivariate_zstat |
2D KDE z-stat | (I) Distributional Properties | Lower is better | 2D Kernel Density Estimation divergence \(z\)-statistic between joint distributions |
| 13 | MMD |
MMD | (I) Distributional Properties | Lower is better | Maximum Mean Discrepancy testing multivariate single-cell manifolds in RKHS |
| 14 | Frechet_SingleCell_Distance |
Frechet SC Dist. | (I) Distributional Properties | Lower is better | Fréchet single-cell distance between multivariate Gaussian manifolds in PC space |
| 15 | bcv_discrepancy |
Biological CV (BCV) | (II) Correlations & Zero-Inflation | Lower is better | Biological Coefficient of Variation discrepancy after Poisson noise subtraction |
| 16 | dropout_curve_midpoint_x0 |
Dropout Midpoint (x0) | (II) Correlations & Zero-Inflation | Lower is better | Logistic dropout curve midpoint (\(x_0\)) estimation error |
| 17 | dropout_curve_slope_k |
Dropout Slope (k) | (II) Correlations & Zero-Inflation | Lower is better | Logistic dropout curve slope (\(k\)) steepness error |
| 18 | mean_variance_r2 |
Mean-Variance R2 | (II) Correlations & Zero-Inflation | Higher is better | Mean-variance trend fit (\(R^2\)) and dropout model goodness-of-fit |
| 19 | cell_pearson_cor |
Cell Pearson Corr. | (II) Correlations & Zero-Inflation | Higher is better | Cell-to-cell Pearson correlation matrix concordance |
| 20 | feature_pearson_cor |
Feature Pearson Corr. | (II) Correlations & Zero-Inflation | Higher is better | Gene-to-gene Pearson co-expression network correlation concordance |
| 21 | silhouette_sim |
Silhouette ASW | (III) Cellular Structure & Concordance | Higher is better | Average Silhouette Width (ASW) cluster separation fidelity |
| 22 | dunn_sim |
Dunn Index | (III) Cellular Structure & Concordance | Higher is better | Dunn index measuring ratio of inter-cluster separation to cluster diameter |
| 23 | davies_bouldin_sim |
Davies-Bouldin | (III) Cellular Structure & Concordance | Lower is better | Davies-Bouldin compactness and separation discrepancy |
| 24 | calinski_harabasz_sim |
Calinski-Harabasz | (III) Cellular Structure & Concordance | Higher is better | Calinski-Harabasz variance ratio criterion between and within clusters |
| 25 | ari |
ARI | (III) Cellular Structure & Concordance | Higher is better | Adjusted Rand Index comparing unsupervised clusters against cell type labels |
| 26 | nmi |
NMI | (III) Cellular Structure & Concordance | Higher is better | Normalized Mutual Information between unsupervised clusters and known cell types |
| 27 | ami |
AMI | (III) Cellular Structure & Concordance | Higher is better | Adjusted Mutual Information adjusted for chance cluster overlap |
| 28 | v_measure |
V-Measure | (III) Cellular Structure & Concordance | Higher is better | Harmonic mean of cluster homogeneity and completeness |
| 29 | neighborhood_purity |
Neighborhood Purity | (III) Cellular Structure & Concordance | Higher is better | Proportion of \(k\)-nearest neighbors sharing identical annotated cell type labels |
| 30 | Generative_Precision |
Generative Precision | (III) Cellular Structure & Concordance | Higher is better | Hungarian optimal matching accuracy between simulated and real cell partitions |
| 31 | batch_silhouette |
Batch Silhouette | (IV) Batch Effects & Confounder Mixing | Higher is better | Average Silhouette Width for batch confounders (lower batch clustering is better) |
| 32 | shannon_entropy |
Shannon Entropy | (IV) Batch Effects & Confounder Mixing | Higher is better | Batch Shannon diversity entropy across local cell neighborhoods |
| 33 | pcr_r2 |
PC Regression R2 | (IV) Batch Effects & Confounder Mixing | Lower is better | Principal Component Regression variance explained by technical batch labels (\(R^2_{\text{batch}}\)) |
| 34 | cms |
CMS Score | (IV) Batch Effects & Confounder Mixing | Higher is better | CellMixS cell-specific mixing score testing random batch distributions |
| 35 | isi |
LISI / ISI | (IV) Batch Effects & Confounder Mixing | Higher is better | Local Inverse Simpson Index measuring effective batches per neighborhood |
| 36 | seurat_mixing_metric |
Seurat Mixing | (IV) Batch Effects & Confounder Mixing | Lower is better | Seurat batch mixing metric measuring average rank of same-batch neighbors |
| 37 | ldf_diff |
ldfDiff | (IV) Batch Effects & Confounder Mixing | Lower is better | Local Density Factor discrepancy measuring manifold density distortion |
| 38 | SimBench_SMAPE |
SimBench SMAPE | (V) Biological Signal & Downstream Fidelity | Lower is better | Symmetric Mean Absolute Percentage Error in differentially expressed log2FC |
| 39 | SimBench_DE_Fidelity_Score |
DE Fidelity (1-SMAPE) | (V) Biological Signal & Downstream Fidelity | Higher is better | SimBench composite differential expression fidelity score (\(1 - \text{SMAPE}\)) |
| 40 | Log2FC_Pearson_Corr |
Log2FC Pearson Corr | (V) Biological Signal & Downstream Fidelity | Higher is better | Pearson correlation of estimated log2 fold-changes across marker genes |
| 41 | Log2FC_Spearman_Corr |
Log2FC Spearman Corr | (V) Biological Signal & Downstream Fidelity | Higher is better | Spearman rank correlation of estimated log2 fold-changes |
| 42 | Top_DEG_Jaccard_Overlap |
Top DEG Jaccard | (V) Biological Signal & Downstream Fidelity | Higher is better | Jaccard index overlap of top differentially expressed genes between real and sim |
| 43 | DEG_Ratio |
DEG Ratio (Sim/Real) | (V) Biological Signal & Downstream Fidelity | Matches 1.0 | Ratio of identified DEG count in simulated data vs real reference data |
| 44 | PValue_Uniformity_Chisq |
P-Val Unif. (Chisq) | (V) Biological Signal & Downstream Fidelity | Lower is better | \(\chi^2\) divergence test verifying uniform p-value distribution under the null hypothesis |
| 45 | Distribution_Score |
Distribution Score | (V) Biological Signal & Downstream Fidelity | Higher is better | Composite null p-value distribution preservation score without false positives |
| 46 | Classifier_Accuracy |
Classifier Accuracy | (V) Biological Signal & Downstream Fidelity | Higher is better | Random forest / SVM cell type classification accuracy on marker transcripts |
| 47 | Classifier_Macro_F1 |
Classifier Macro-F1 | (V) Biological Signal & Downstream Fidelity | Higher is better | Macro-averaged F1 classification score across rare and common cell populations |
| 48 | Classifier_Macro_Recall |
Classifier Macro-Recall | (V) Biological Signal & Downstream Fidelity | Higher is better | Macro-averaged recall score across biological cell identities |
| 49 | Silhouette_Sim |
Group Silhouette | (V) Biological Signal & Downstream Fidelity | Higher is better | Shaky Foundations cell-type silhouette similarity in DEG marker space |
| 50 | Silhouette_Discrepancy |
Silhouette Discrepancy | (V) Biological Signal & Downstream Fidelity | Lower is better | Shaky Foundations absolute silhouette width discrepancy relative to reference |
| 51 | PVE_Group_Sim |
Group PVE | (V) Biological Signal & Downstream Fidelity | Higher is better | Shaky Foundations Proportion of Variance Explained (PVE) by cell groups |
| 52 | PVE_Discrepancy |
Group PVE Discrepancy | (V) Biological Signal & Downstream Fidelity | Lower is better | Discrepancy in proportion of variance explained by biological condition |
| 53 | pseudotime_correlation |
Pseudotime Corr. (rho) | (VI) Trajectory & Lineage Dynamics | Higher is better | Spearman rank correlation of inferred developmental pseudotime ordering |
| 54 | tree_height_rmse |
Lineage Tree RMSE | (VI) Trajectory & Lineage Dynamics | Lower is better | Root Mean Squared Error of lineage branching hierarchy tree heights |
| 55 | cross_modal_accuracy |
Cross-Modal Accuracy | (VII) Cross-Modal Coupling & Modularity | Higher is better | Cross-modal cell type label transfer accuracy (RNA \(\rightarrow\) ATAC) |
| 56 | cross_modal_F1 |
Cross-Modal F1 | (VII) Cross-Modal Coupling & Modularity | Higher is better | Macro-averaged F1 score of cross-modal cell type label transfer |
| 57 | FOSCTTM |
FOSCTTM | (VII) Cross-Modal Coupling & Modularity | Lower is better | Fraction of Samples Closer Than The True Match in joint multi-omics space |
| 58 | match_at_1 |
Match@1 | (VII) Cross-Modal Coupling & Modularity | Higher is better | Top-1 cross-modal nearest neighbor exact cell pairing rate |
| 59 | rv_coefficient |
RV Coefficient | (VII) Cross-Modal Coupling & Modularity | Higher is better | Vector correlation coefficient measuring chromatin co-accessibility and expression coupling |
| 60 | module_correlation_r |
Module Corr. (r) | (VII) Cross-Modal Coupling & Modularity | Higher is better | Peak-to-gene linkage and co-regulatory module correlation concordance |
| 61 | elapsed_time_seconds |
Elapsed Time (s) | (VIII) Computational Scalability | Lower is better | Wall-clock execution runtime in seconds required for model training and synthesis |
| 62 | peak_memory_mb |
Peak RAM (MiB) | (VIII) Computational Scalability | Lower is better | Maximum resident set size / peak memory allocated during execution |
Evaluates whether single-cell count distributions (library size, mean expression, gene variance, and zero fraction) and higher-dimensional data manifolds in simulated data match real experimental data.
KS)Wasserstein)MAD)MAE)RMSE)OV)Bhattacharyya)ECDF_DiffArea)Runs_Statistic)Fasano_Franceschini_2D_KS)Peacock_2D_KS)KDE_Bivariate_zstat)MMD)Frechet_SingleCell_Distance)Evaluates whether simulators accurately capture biological overdispersion, zero-inflation dynamics, cell-to-cell dependencies, and gene co-expression networks.
bcv_discrepancy)dropout_curve_midpoint_x0)dropout_curve_slope_k)mean_variance_r2)cell_pearson_cor)feature_pearson_cor)Evaluates whether simulated datasets preserve distinct cell types, cluster separation, and biological partitions without artificial blurring.
silhouette_sim)dunn_sim)davies_bouldin_sim)calinski_harabasz_sim)ari)nmi)ami)v_measure)neighborhood_purity)Generative_Precision)Evaluates whether technical batch variation is realistically synthesized without washing out biological signals.
batch_silhouette)shannon_entropy)pcr_r2)cms)isi)seurat_mixing_metric)ldf_diff)Assesses whether differentially expressed genes (DEGs), fold-changes, null p-value uniformity, and downstream classification models are faithfully preserved across established benchmarking frameworks (SimBench, Simpipe, and Shaky Foundations).
SimBench_SMAPE)SimBench_DE_Fidelity_Score)Log2FC_Pearson_Corr)Log2FC_Spearman_Corr)Top_DEG_Jaccard_Overlap)DEG_Ratio)PValue_Uniformity_Chisq)Distribution_Score)Classifier_Accuracy)Classifier_Macro_F1)Classifier_Macro_Recall)Silhouette_Sim)Silhouette_Discrepancy)PVE_Group_Sim)PVE_Discrepancy)Evaluates whether continuous developmental progressions and branching lineage hierarchies are accurately reconstructed.
pseudotime_correlation)tree_height_rmse)Evaluates the joint regulatory linkage between chromatin accessibility (scATAC-seq) and gene expression (scRNA-seq) in multiomics datasets.
cross_modal_accuracy)cross_modal_F1)FOSCTTM)match_at_1)rv_coefficient)module_correlation_r)Evaluates computational runtime and memory resource consumption across simulators.
elapsed_time_seconds)peak_memory_mb)To compare metrics with completely different units (seconds,
megabytes, p-values, correlation coefficients) fairly on the same scale,
scSimEval executes an automated two-step normalization:
Raw Metric Value
│
▼
Step 1: Direction Inversion (for lower-is-better metrics)
Inverted Value = Maximum - Value
│
▼
Step 2: Min-Max Normalization
Standardized Score = (Value - Minimum) / (Maximum - Minimum)
│
▼
Standardized Score in [0.00, 1.00]
(Higher is always better; 1.00 = Top Performer)
In visual representations (such as
plot_benchmark_bubble_matrix()), standardized scores are
mapped directly to bubble sizes, and top performers (\(\ge 0.96\)) receive bold highlighted square
glyphs.
sessionInfo()
#> R version 4.6.1 (2026-06-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 26.04.1 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/libopenblasp-r0.3.32.so; LAPACK version 3.12.0
#>
#> 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
#>
#> time zone: Etc/UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] scSimEval_0.99.7 rmarkdown_2.32
#>
#> loaded via a namespace (and not attached):
#> [1] RColorBrewer_1.1-3 sys_3.4.3
#> [3] jsonlite_2.0.0 magrittr_2.0.5
#> [5] ggbeeswarm_0.7.3 SuppDists_1.1-9.9
#> [7] modeltools_0.2-25 farver_2.1.2
#> [9] nloptr_2.2.1 provenance_4.4
#> [11] vctrs_0.7.3 memoise_2.0.1
#> [13] minqa_1.2.8 htmltools_0.5.9
#> [15] S4Arrays_1.13.2 curl_8.0.0
#> [17] BiocNeighbors_2.7.3 SparseArray_1.13.4
#> [19] overlapping_2.5 sass_0.4.10
#> [21] bslib_0.12.0 testthat_3.3.2
#> [23] httr2_1.3.0 cachem_1.1.0
#> [25] buildtools_1.0.0 igraph_2.3.4
#> [27] lifecycle_1.0.5 pkgconfig_2.0.3
#> [29] rsvd_1.0.5 Matrix_1.7-6
#> [31] R6_2.6.1 fastmap_1.2.0
#> [33] rbibutils_2.4.1 MatrixGenerics_1.25.0
#> [35] clue_0.3-68 digest_0.6.39
#> [37] S4Vectors_0.51.10 scater_1.41.2
#> [39] irlba_2.4.1 IsoplotR_7.0
#> [41] GenomicRanges_1.65.4 RSQLite_3.53.3
#> [43] beachmat_2.29.3 philentropy_0.10.0
#> [45] filelock_1.0.3 labeling_0.4.3
#> [47] abind_1.4-8 compiler_4.6.1
#> [49] proxy_0.4-29 bit64_4.8.6
#> [51] withr_3.0.3 CellMixS_1.29.0
#> [53] S7_0.2.2 BiocParallel_1.47.0
#> [55] viridis_0.6.5 DBI_1.3.0
#> [57] MASS_7.3-66 DelayedArray_0.39.8
#> [59] bluster_1.23.1 tools_4.6.1
#> [61] vipor_0.4.7 otel_0.2.0
#> [63] beeswarm_0.4.0 prabclus_2.3-5
#> [65] nnet_7.3-21 glue_1.8.1
#> [67] nlme_3.1-171 grid_4.6.1
#> [69] waddR_1.27.0 cluster_2.1.8.3
#> [71] ade4_1.7-24 generics_0.1.4
#> [73] gtable_0.3.6 class_7.3-24
#> [75] tidyr_1.3.2 ScaledMatrix_1.21.0
#> [77] BiocSingular_1.29.2 XVector_0.53.0
#> [79] flexmix_2.3-21 BiocGenerics_0.59.12
#> [81] ggrepel_0.9.8 RANN_2.6.3
#> [83] pillar_1.11.1 limma_3.99.1
#> [85] clValid_0.7 robustbase_0.99-7
#> [87] splines_4.6.1 dplyr_1.2.1
#> [89] BiocFileCache_3.3.0 lattice_0.23-1
#> [91] bit_4.6.0 tidyselect_1.2.1
#> [93] SingleCellExperiment_1.35.2 locfit_1.5-9.12
#> [95] scuttle_1.23.2 maketools_1.3.2
#> [97] clusterSim_0.51-6 knitr_1.52
#> [99] gridExtra_2.3.1 reformulas_0.4.4
#> [101] IRanges_2.47.5 Seqinfo_1.3.2
#> [103] edgeR_4.99.6 SummarizedExperiment_1.43.0
#> [105] stats4_4.6.1 xfun_0.61
#> [107] Biobase_2.73.2 statmod_1.5.2
#> [109] diptest_0.77-2 randtests_1.0.2
#> [111] brio_1.1.5 arm_1.15-3
#> [113] matrixStats_1.5.0 DEoptimR_1.2-2
#> [115] yaml_2.3.12 boot_1.3-32
#> [117] eva_0.2.7 evaluate_1.0.5
#> [119] codetools_0.2-20 MLmetrics_1.1.3
#> [121] kSamples_1.2-12 kernlab_0.9-33
#> [123] tibble_3.3.1 cli_3.6.6
#> [125] RcppParallel_6.2.1 Rdpack_2.6.6
#> [127] jquerylib_0.1.4 Rcpp_1.1.2
#> [129] dbplyr_2.6.0 coda_0.19-4.1
#> [131] parallel_4.6.1 ggplot2_4.0.3
#> [133] blob_1.3.0 mclust_6.1.3
#> [135] lme4_2.0-6 viridisLite_0.4.3
#> [137] ggridges_0.5.7 scales_1.4.0
#> [139] e1071_1.7-17 purrr_1.2.2
#> [141] fpc_2.2-15 rlang_1.3.0
#> [143] cowplot_1.2.0