FAQ

1. What data types are supported?

Pan-human Azimuth was trained on data from 23 human tissues: adipose, adrenal gland, bladder, blood, bone marrow, brain, breast, eye, gut, heart, kidney, liver, lung, lymph node, ovary, pancreas, placenta, skeletal muscle, skin, spleen, stomach, testis, thymus.

The training dataset encompasses both scRNA-seq and snRNA-seq data and encompasses droplet-based, plate-based, and combinatorial indexing-based technologies. We excluded cancer datasets from the training process.

In general, we find that query datasets that fall within these parameters can be well-annotated using Pan-human Azimuth.

2. What pre-processing steps are required?

  • The Python package takes an AnnData object or the path to an .h5ad file as input.

    • Python users can perform standard normalization of their data prior to annotation, or provide an un-normalized object of integer counts (the package will then perform normalization).

  • The R interface takes a Seurat object as input.

    • R users should perform standard log-normalization with the NormalizeData function prior to annotating, as described in the vignette.

  • Variable gene selection is not required; users should keep all quantified genes in the object prior to annotation.

3. What are the outputs of the package?

  • final_level_labels: The highest-resolution cell type labels available for each cell. The final annotation depth can vary across cells.

  • final_level_confidence: The calibrated confidence value corresponding to each final-level label.

  • We make available a 128-dimensional embedding of cells generated from the encoding layer of the neural network.

    • In Python, this is available as the azimuth_embed attribute of the returned AnnData object.

    • In R, this is available as a dimensional reduction named azimuth_embed in the returned Seurat object.

  • To aid in interpretation, we also post-process the labels to make them shorter/easier to read, and also to normalize their levels of granularity across cells. These categories include azimuth_fine, azimuth_medium, and azimuth_broad.

4. How can I perform QC on my annotations?

  • The final_level_confidence is a helpful QC measure. We often exclude cells with a score of < 0.5.

  • Beginning with model version v1, we also provide a new “Unassigned” label to filter out lower quality data, in particular low-UMI cells and ambient RNA profiles.

However, we emphasize that no QC measure is perfect, and we therefore strongly encourage users to identify/visualize differential expressed genes for each defined cell group as a manual confirmation of annotation accuracy. (For example, in R, we include the make_azimuth_QC_heatmaps function and demonstrate how to use it in our vignette.)

5. Can I use Pan-human Azimuth to annotate disease data?

The Pan-human Azimuth training dataset does not include cancer samples. Tumor cells often undergo substantial molecular transformation and do not resemble normal cells, and therefore may map poorly with Pan-human Azimuth.

However, we routinely use Pan-human Azimuth to annotate non-cancer disease data. Reference-mapping workflows, including Pan-human Azimuth, are widely used to annotate both healthy and diseased cells into a common set of cell types and then to perform within-cell type differential expression to identify malignant shifts. In many, if not most, cases, diseased cells retain a component of their molecular profiles from their normal counterparts.

Given that Pan-human Azimuth reference does not contain disease-specific cell types, diseased cells will be mapped to the most similar normal cell type. The QC measures we discuss above can be helpful to ensure that the annotations for diseased cells are useful for facilitating comparisons with healthy samples and the identification of disease-specific signatures.

6. Are there size limitations to the datasets that can be mapped?

Both the Python and R workflows are highly scalable:

  • The Python workflow on a standard laptop computer (CPU only) processes ~50,000-60,000 cells/minute.

  • The R workflow in the cloud and processes ~50,000-100,000 cells/minute.

Pan-human Azimuth annotates and embeds each cell independently, so it is possible to break massive datasets into chunks (which we do by default in both Python and R) and map them serially or in parallel. We used this strategy to map over 85 million cells from the scBaseCamp repository in under 24 hours.

7. Are future releases planned?

While we do not have any immediate releases planned, we are excited to continue expanding this project.

Our goal is to broaden our training data to more contexts (e.g., new tissues and technologies), add new cell types to refine cell type hierarchies, and extend coverage on disease and developmental lineages.