Single-cell batch integration (scIB)
single-cellLeaderboard
Cell-type ASW (trained from scratch)
The same cell-type ASW on the latent space a model with no pretrained weights (scVI) learns from 500 train cells of the same four donors and embeds the 500 test cells in.
Best in the catalogue: 0.610 (the best visible result here, not a state of the art). Ranks are the server's: ties share a rank. A ≠ marks a row whose n differs from the board's usual n (500). Floors are trivial baselines scored on the same items, shown unranked.
| # | Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|---|
| 1 | single-cell/scvi-tools | 0.610 best | [0.604, 0.615] | 500 | reproduced | unknown |
Secondary metrics (9) · supervised · context, not ranked
NMI, k-means (trained from scratch)
scib-metrics NMI between the cell types and a k-means clustering (k = the number of cell types, n_init 10, seed 0) of the latent space learned from scratch.
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.773 best | [0.759, 0.802] | 500 | reproduced | unknown |
ARI, k-means (trained from scratch)
Adjusted Rand index between the cell types and the same k-means clustering of the latent space learned from scratch.
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.611 best | [0.583, 0.648] | 500 | reproduced | unknown |
Isolated-label ASW (trained from scratch)
scIB isolated-label silhouette of the latent space learned from scratch: (silhouette + 1) / 2 over the cells of the cell types seen in the fewest donors, per type, then the mean.
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.691 best | [0.681, 0.699] | 500 | reproduced | unknown |
cLISI (trained from scratch)
scIB cell-type LISI of the latent space learned from scratch, scaled: (L - median cLISI) / (L - 1) on a 90-nearest-neighbour graph, L the number of cell types; 1 means pure neighbourhoods.
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.942 best | [0.931, 0.950] | 500 | reproduced | unknown |
iLISI (trained from scratch)
scIB donor LISI of the latent space learned from scratch, scaled: (median iLISI - 1) / (B - 1) on a 90-nearest-neighbour graph, B = 4 donors; 1 means donors perfectly mixed.
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.319 best | [0.293, 0.344] | 500 | reproduced | unknown |
kBET acceptance (trained from scratch)
kBET per cell type of the latent space learned from scratch: the share of cells whose nearest same-type neighbourhood has the type's donor mix (chi-square, alpha 0.05), then the mean over cell types.
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.761 best | [0.727, 0.794] | 500 | reproduced | unknown |
scIB batch correction, unscaled, without PCR (trained from scratch)
Unweighted mean of four scIB batch-correction metrics of the latent space learned from scratch (batch ASW, iLISI, kBET, graph connectivity); PCR comparison left out (pcr: false), the batch score of the cells scored before the frames held the unintegrated PCA (batch_correction_with_pcr_supervised has all five).
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.719 best | [0.706, 0.730] | 500 | reproduced | unknown |
scIB total, unscaled, without PCR (trained from scratch)
0.6 x bio conservation + 0.4 x batch correction (without PCR) of the latent space learned from scratch, both unscaled (scib_total_with_pcr_supervised includes PCR comparison).
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.723 best | [0.714, 0.734] | 500 | reproduced | unknown |
PCR comparison (trained from scratch)
scIB principal-component regression comparison: (PCR before - PCR after) / PCR before, 0 when the representation holds more donor variance than the unintegrated data; PCR before is on the first 50 principal components of the log-normalised counts of the same 500 test cells (scanpy's normalize_total defaults: each cell scaled to the median of the cells' non-zero total counts, then log1p, every gene), PCR after on every component of the latent space learned from scratch.
| Model | Value | 95% CI | n | Source | Overlap |
|---|---|---|---|---|---|
| single-cell/scvi-tools | 0.529 best | [0.454, 0.574] | 500 | reproduced | unknown |
Protocol
What is measured. Whether a cell representation keeps cell types
apart while mixing donors: the batch-integration task of scIB (Luecken et
al., Nat. Methods 2022), with donor as the batch, on Tabula Sapiens liver
(CELLxGENE dataset version a4b3a49e, the file of
cell-type-annotation-macro-f1; four donors TSP6, TSP14, TSP17, TSP19).
Cells (subset rule). 10x 3' v3 cells only. Cell types with at least 30 cells in at least 3 donors (12 types: CD8-positive alpha-beta T cell, classical monocyte, endothelial cell, erythrocyte, hepatocyte, intermediate monocyte, intrahepatic cholangiocyte, macrophage, mature NK T cell, monocyte, natural killer cell, neutrophil); for each (type, donor) the 30 top-ranked cells by seed-hash rank (seed 20261006), fewer when the donor has fewer: 1,342 candidate cells. The subset draws 500 test cells and 500 train cells from them, disjoint by cell, both stratified by cell type; every donor is on both sides (integration corrects batches the model has seen). (exc) n_test is 500, not 100: a silhouette over 100 cells of 12 types and 4 donors leaves 2 to 3 cells per (type, donor) and is noise.
Input. As for cell-type-annotation-macro-f1: a derived, label-free
h5ad of the candidate cells (raw UMI counts, Ensembl ids and
feature_name, cell id, donor); each item carries h5ad_path,
cell_index and batch (the donor).
Zero-shot (*_zero_shot). The frozen mean-pooled embedding of each
test cell is the integrated representation, with no correction step.
Supervised (*_supervised). Integration models with no pretrained
weights (scVI; fit.batch_integration) are fit on the 500 train cells
with their donor as batch key (their cell types are in the fit table too,
for semi-supervised methods such as scANVI) and return a latent vector for
each of the 500 test cells.
Metrics (scIB definitions, euclidean). Cell-type ASW = (mean silhouette w.r.t. cell type + 1) / 2; batch ASW = per cell type, the mean of 1 - |silhouette w.r.t. donor| over its cells, then the mean over types (types seen in one donor only are skipped); graph connectivity = per cell type, the fraction of its cells in the largest connected component of the symmetrised 15-nearest-neighbour graph restricted to that type, then the mean. No overall score is formed: ADR 17 keeps one scalar per metric.
Uncertainty. 95 % bootstrap interval over test cells (1,000 resamples, stratified by cell type), conditional on the geometry: each cell's silhouette and component membership are computed once on all 500 cells and resamples reweight them (resampling cells would put duplicates into every neighbourhood).
Caveats. Batch ASW rewards mixing even where biology differs between donors (the four donors differ in age and sex), and a representation that collapses everything mixes perfectly: read it together with cell-type ASW. Erythrocytes and neutrophils are missing from some donors. The cells are in the CELLxGENE Census, the pretraining corpus of several single-cell foundation models (cell identity seen, not these labels).
scIB bio and batch sets (metrics review). The scib-metrics
Benchmarker defaults on the same embeddings: bio conservation =
isolated-label ASW, k-means NMI and ARI (k = the number of cell types,
seed 0), cell-type ASW, cLISI; batch correction = batch ASW (scIB's, not
BRAS), iLISI, kBET per cell type, graph connectivity and PCR comparison;
total = 0.6 bio + 0.4 batch. Two departures, both stated in the keys'
descriptions: the composites are unscaled means (the Benchmarker's min-max
scaling over the compared methods would make a value depend on which
models are in the table), and the unintegrated representation PCR
comparison needs is computed here: the raw counts of the same test cells
log-normalised with scanpy's normalize_total defaults (each cell scaled to
the median of the cells' non-zero total counts, not to 10,000), log1p, every
gene, first 50 principal components (scanpy's defaults, the PCA scib-metrics
computes when given no pre-integration embedding; no gene selection), in the
frames as
embedding_pre. The first composites
(batch_correction_*, scib_total_*, pcr: false) leave PCR out, as
the frames scored before held no unintegrated PCA; they keep their keys
and values and are secondary. The full ones (pcr_comparison_*,
batch_correction_with_pcr_*, scib_total_with_pcr_*) are the
scib-metrics set. kBET tests
every cell (R kBET samples 10 %) without a diffusion-map distance. The
k-means clusterings, LISI neighbourhoods and kBET verdicts are fixed on
the full data; resamples re-weight them, as for the silhouettes. Keys:
nmi_kmeans_zero_shot, ari_kmeans_zero_shot,
isolated_label_asw_zero_shot, clisi_zero_shot, ilisi_zero_shot,
kbet_zero_shot, bio_conservation_zero_shot,
batch_correction_zero_shot, scib_total_zero_shot,
nmi_kmeans_supervised, ari_kmeans_supervised,
isolated_label_asw_supervised, clisi_supervised, ilisi_supervised,
kbet_supervised, bio_conservation_supervised,
batch_correction_supervised, scib_total_supervised,
pcr_comparison_zero_shot, batch_correction_with_pcr_zero_shot,
scib_total_with_pcr_zero_shot, pcr_comparison_supervised,
batch_correction_with_pcr_supervised, scib_total_with_pcr_supervised.
Data
cellxgene: urlhttps://datasets.cellxgene.cziscience.com/a4b3a49e-062b-4e3f-8915-02f40607651f.h5ad, licence cc-by-4.0, catalogued assingle-cell/cellxgene-census
Subset
- seed 20261006
- test: 500 item(s), stratified by label
- train: 500 item(s), stratified by label
- results at
atlas-n500-v1use subset2dcecb1aacb26f56
Metrics
asw_celltype_zero_shot— Cell-type ASW (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueasw_batch_zero_shot— Batch ASW (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truegraph_connectivity_zero_shot— Graph connectivity (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueasw_celltype_supervised— Cell-type ASW (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueasw_batch_supervised— Batch ASW (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truegraph_connectivity_supervised— Graph connectivity (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truenmi_kmeans_zero_shot— NMI, k-means (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueari_kmeans_zero_shot— ARI, k-means (zero-shot); protocol zero_shot; higher is better; range [-0.5, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueisolated_label_asw_zero_shot— Isolated-label ASW (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueclisi_zero_shot— cLISI (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueilisi_zero_shot— iLISI (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truekbet_zero_shot— kBET acceptance (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truebio_conservation_zero_shot— scIB bio conservation, unscaled (zero-shot); protocol zero_shot; higher is better; range [-0.1, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truebatch_correction_zero_shot— scIB batch correction, unscaled, without PCR (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truescib_total_zero_shot— scIB total, unscaled, without PCR (zero-shot); protocol zero_shot; higher is better; range [-0.06, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truepcr_comparison_zero_shot— PCR comparison (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truebatch_correction_with_pcr_zero_shot— scIB batch correction, unscaled (zero-shot); protocol zero_shot; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truescib_total_with_pcr_zero_shot— scIB total, unscaled (zero-shot); protocol zero_shot; higher is better; range [-0.06, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truenmi_kmeans_supervised— NMI, k-means (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueari_kmeans_supervised— ARI, k-means (trained from scratch); protocol supervised; higher is better; range [-0.5, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueisolated_label_asw_supervised— Isolated-label ASW (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueclisi_supervised— cLISI (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_trueilisi_supervised— iLISI (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truekbet_supervised— kBET acceptance (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truebio_conservation_supervised— scIB bio conservation, unscaled (trained from scratch); protocol supervised; higher is better; range [-0.1, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truebatch_correction_supervised— scIB batch correction, unscaled, without PCR (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truescib_total_supervised— scIB total, unscaled, without PCR (trained from scratch); protocol supervised; higher is better; range [-0.06, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truepcr_comparison_supervised— PCR comparison (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truebatch_correction_with_pcr_supervised— scIB batch correction, unscaled (trained from scratch); protocol supervised; higher is better; range [0.0, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_truescib_total_with_pcr_supervised— scIB total, unscaled (trained from scratch); protocol supervised; higher is better; range [-0.06, 1.0]; 95% bootstrap CI, 1000 resamples, stratified by y_true
Sample
Two training cells of the frozen subset (input: the cell's raw counts and its donor; expected output: an embedding in which cells of one type sit together whatever their donor):
| item_id | batch (donor) | total UMIs | top genes (counts) | label |
|---|---|---|---|---|
TSP14_Liver_NA_10X_1_1_AACCATGCATAGACTC | TSP14 | 5,329 | HBB 2042, HBA2 216, HBA1 156, CA1 66, HBD 63 | erythrocyte (CL:0000232) |
TSP14_Liver_NA_10X_1_1_AAGGTAAAGCCTCAAT | TSP14 | 7,638 | S100A9 116, MALAT1 90, MT-RNR2 72, S100A8 64, MT-CO1 61 | classical monocyte (CL:0000860) |
Data: Tabula Sapiens Consortium, CZ CELLxGENE Discover, CC BY 4.0.