Temporally unified RNA velocity for single cell trajectory inference (UniTVelo) is implementated on Python 3 and TensorFlow 2. The model estimates velocity of each gene and updates cell time based on phase portraits concurrently.
The major features of UniTVelo are,
Unified-time mode
) across whole transcriptome to incorporate stably and monotonically changed genesIndependent mode
) for complex datasetsUniTVelo has proved its robustness in 10 different datasets. Details can be found via our manuscript in bioRxiv which is currently under review (UniTVelo).
UniTVelo is designed based on TensorFlow's automatic differentiation architecture. Please make sure TensorFlow 2 and relative CUDA dependencies are correctly installed.
Use the following scripts to confirm TensorFlow is using the GPU.
import tensorflow as tf
print ("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
If GPU is not available, UniTVelo will automatically switch to CPU for model fitting or it can be spcified in config.py
(see Getting Started
below).
(Optional) Create a separate conda environment for version control and to avoid potential conflicts.
conda create -n unitvelo python=3.7
conda activate unitvelo
UniTVelo package can be conveniently installed via PyPI or directly from GitHub repository.
pip install unitvelo
or
pip install git+https://github.com/StatBiomed/UniTVelo
Examples of UniTVelo and steps for reproducible results are provided in Jupyter Notebook under notebooks
folder. Specifically, please refer to records analyzing Mouse Erythroid and Human Bone Marrow datasets.
UniTVelo has proved its performance through 10 different datasets and 4 of them have been incorporated within scVelo package, see datasets. Others can be obtained via link.
UniTVelo provides an integrated function for velocity analysis by default whilst specific configurations might need to be adjusted accordingly.
import unitvelo as utv
config.py
for detailed arguments.velo = utv.config.Configuration()
velo.R2_ADJUST = True
velo.IROOT = None
velo.FIT_OPTION = '1'
velo.GPU = 0
velo.R2_ADJUST
(bool), linear regression R-squared on extreme quantile (default) or full data (adjusted)velo.IROOT
(str), specify root cell cluster would enable diffusion map based time initialization, default Nonevelo.FIT_OPTION
(str), '1' Unified-time mode (default), '2' Independent modevelo.GPU
(int), specify the GPU card used for fitting, -1 will switch to CPU mode, default 0.adata = utv.run_model(path_to_adata, label, config_file=velo)
scv.pl.velocity_embedding_stream(adata, color=label, dpi=100, title='')
# Cross Boundary Direction Correctness
# Ground truth should be given via `cluster_edges`
metrics = {}
metrics = utv.evaluate(adata, cluster_edges, label, 'velocity')
# Latent time estimation
scv.pl.scatter(adata, color='latent_time', color_map='gnuplot', size=20)
# Phase portraits for individual genes (experimental)
utv.pl.plot_range(gene_name, adata, velo, show_ax=True, time_metric='latent_time')