Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Interpret and review results

CyteType proposes a label for each cluster, together with the evidence for it and an independent review. Treat the labels as reviewed proposals: they are most useful when you check the evidence before you rely on them. This page explains each signal, what CyteType cannot tell you, and how to review a run. How CyteType works describes the pipeline that produces them.

What a label is

Identity, levels and state

The reference hierarchy runs from L1, the broadest level (a lineage), to L5, the most specific. The report shows the path as the Annotation hierarchy in Justification, the CSV export has L1 to L4, and the raw results have all five levels (see Raw results). Not every cluster has every level: placement stops where the evidence stops, and some branches of the hierarchy are shallower than others.

Why not deeper?

When CyteType stops at a level, the report explains why under Why this level was retained, in the Selection Rounds of the Justification section. The usual reasons:

Reason given in the report (shortened)What it means for you
More specific descendants were investigated, but their evidence was not strong enough.The data does not separate the subtypes. More informative markers, a finer clustering or a more specific study context can help.
The identity is already the most specific one in the reference hierarchy.There is nothing narrower to test.
The evidence consistently supported this identity, and no narrower distinction was needed.A confident stop.
The evidence did not support a narrower label reliably within the permitted rounds.Treat the depth of the label as uncertain.
The identity did not map reliably to a reference identity.It was kept outside the hierarchy (see Classification).
The evidence supported a combined identity, but its components share no reliable deeper reference category.The cluster appears to contain two identities; check its heterogeneity and consider subclustering.

Cell state

The cell state describes what the cells are doing rather than what they are, for example proliferation, exhaustion or senescence. It is supported by the gene sets under Cell State Evidence in the report. An unexpected state, such as proliferation in a cell type that is usually quiescent in your tissue, deserves a look: it can be real biology or a sign that the cluster mixes populations.

Display groups

The report’s Biological Order and the CSV’s coarse_cell_type group clusters at one level of the hierarchy, chosen for each study so that there is a manageable number of groups. Unresolved clusters form a group of their own, and each identity outside the hierarchy is listed under its own label. Use the groups for orientation; a cluster’s own label and levels are what count.

Classification

Each label has a classification that relates it to the reference hierarchy. It is in the raw results as classification (see Raw results), and the report shows a chip in the Justification header for some values. Current jobs use three values:

ValueIn the reportMeaningWhat to do
catalogueNo chipThe identity was placed on an entry of the reference hierarchy.Review the evidence as usual.
outOfCatalogNo chip; the hierarchy shows only the identityA coherent identity with no matching entry in the hierarchy. The Justification section names the broader biological group it was placed in.Read the evidence closely and confirm the identity with known markers or the literature. Make sure it is not an artifact, such as a population of doublets.
unresolvedUnresolvedNo identity could be assigned, and the label is Unknown. The reviewer does not run, so the confidence is Low.Check the cluster’s quality (counts, mitochondrial fraction, doublets) and its marker genes, and consider merging, splitting or removing it.

Reports of older jobs can also show these values:

ValueChipMeaningWhat to do
broaderParentBroader parentOnly a broader entry of the hierarchy is supported.Treat the label as a parent-level call, and subcluster if you need more detail.
mixedDoubletMixed / doubletSignals of more than one cell type, such as doublets or a mixed population.Check for doublets and subcluster (see Heterogeneity).
malignantAberrantMalignant / aberrantMalignant or otherwise aberrant cells.Confirm with independent evidence, such as copy-number inference or clinical annotations.

In current jobs, a mixed population shows up as a heterogeneity flag, or as a combined identity in the Justification section.

Reviewer confidence

After annotation, an independent reviewer assesses each final label. A panel of expert perspectives generated by CyteType’s models examines the marker evidence. The reviewer weighs their agreement together with the cell classifier and the genes that set the cluster apart from its neighbors, and assigns one of three levels with a short rationale:

LevelThe reviewer’s criterion
HighStrong agreement across the panel, with compelling evidence.
ModerateMixed assessments or notable concerns.
LowFundamental problems identified by most of the panel.

Read the confidence as a categorical triage signal:

reviewerConfidence is missing (None in Python, NA in the R results table) when a stored result has no confidence at all, for example results saved by cytetype 0.7.0 and older. The cell-level confidence column shows Unknown for cells whose cluster has no confidence, including clusters without a result.

What to do with each level:

To list the clusters that need a closer look:

Python
R
import pandas as pd

table = pd.DataFrame(annotator.get_results()["annotations"])
needs_review = table[(table["reviewerConfidence"] != "High") | table["isHeterogeneous"].eq(True)]
needs_review[["clusterId", "annotation", "reviewerConfidence", "isHeterogeneous", "heterogeneityType"]]

Heterogeneity

The reviewer also judges whether the cluster is one population (Homogeneous) or contains distinct populations (Heterogeneous). It weighs the panel’s assessments, conflicts between lineage markers, the cell classifier’s breakdown of the cluster’s cells and the differences from neighboring clusters. Variation in state within one cell type, such as activation or maturation, does not count as heterogeneity.

When a cluster is heterogeneous and cell-level data was uploaded with the job, a second step classifies the type of heterogeneity from how pairs of conflicting genes are co-expressed in single cells (the Co-expression Evidence in the report):

TypeMeaningWhat to do
distinct_populationsTwo or more identities in separate subsets of cells.Subcluster and annotate the subclusters.
mixed_lineageMarkers of mutually exclusive lineages occur together in the same cells, in a way that doublets do not explain.Check doublet scores, then consider an aberrant or malignant program and validate it independently.
doublet_artifactConflicting markers occur together in the same cells in a pattern that suggests two cells captured in one droplet.Run doublet detection, remove the doublets and recluster.
transitional_stateCells form a continuum along a developmental or activation axis.Consider a trajectory or pseudotime analysis rather than splitting the cluster.
unresolvedThe co-expression evidence is too weak to choose a type.Inspect the Co-expression Evidence, and subcluster to test whether a split holds.

The type is missing (None in Python, NA in R) for homogeneous clusters, and also when it could not be classified, for example because the job ran without uploaded cell-level data (require_artifacts=False). The report shows the heterogeneity call and its reasoning but not the type: both clients return it as heterogeneityType, and the raw results also hold the reasoning for it.

To subcluster a heterogeneous cluster, for example cluster 5:

Python
R
import scanpy as sc

sc.tl.leiden(
    adata,
    restrict_to=("leiden", ["5"]),
    resolution=0.5,
    flavor="igraph",
    n_iterations=2,
    key_added="leiden_sub",
)

Then compute marker genes for the new column and run CyteType on it with a new results_prefix (see Prepare your data and Run, monitor and rerun jobs). For doublets, use a dedicated detector such as Scrublet (sc.pp.scrublet in Scanpy) or scDblFinder in R.

Compare with your existing labels

When the labels in your cluster column are names rather than numbers, the reviewer scores how similar CyteType’s label is to yours, from 0 to 100. The score appears as Match in the report, as author_label_similarity_score in the CSV export and as labelComparisonScore in the raw results.

How to read it:

Known limits

Reproducibility: what to record

The annotation runs on CyteType’s servers, and the server workflow and hosted models can change between runs. Neither the results nor the report record a server release, so record enough to identify each run:

Python
R
import cytetype

details = adata.uns["cytetype_jobDetails"]
print(details["job_id"], details["report_url"], cytetype.__version__)

To cite CyteType and report the version you used, see Cite CyteType and report versions.

Review checklist

Work through the report with this list before you use the labels:

  1. Completeness. The job finished and every cluster has a label. Note any Unresolved clusters.

  2. Overview. In Biological Order, the display groups and their sizes make sense for your tissue. An unexpected lineage, such as hepatocytes in blood, points to contamination, ambient RNA or a wrong study context.

  3. Low and Moderate confidence. Filter the cluster list to them. For each, read the Quality Control rationale; if there is none, the review did not run or failed.

  4. Heterogeneity. For each heterogeneous cluster, read the reasoning and the type, and decide whether to subcluster or remove doublets.

  5. Marker evidence. The supporting genes are ones you would expect for the label, and the missing and unexpected genes have a plausible explanation. Color the embedding by one or two key genes to check.

  6. Depth. Where a label is broader than you need, read Why this level was retained before you assign a finer type yourself.

  7. Outside the hierarchy. Identities outside the reference hierarchy get extra scrutiny.

  8. Cell states. The states are plausible for your tissue and condition.

  9. Your labels. If you compared CyteType with existing labels, read every Low match.

  10. Record and export. Save the job ID, client version, date and query.json, then download the CSV or save your object.

If you change the clustering, the marker genes or the study context, run CyteType again and compare the runs (see Run, monitor and rerun jobs).

See also