cellrank.external.kernels.StationaryOTKernel#
- class cellrank.external.kernels.StationaryOTKernel(adata, g, terminal_states=None, **kwargs)[source]#
Stationary optimal transport (OT) kernel from [Zhang et al., 2021].
This kernel requires the statOT package, which can be installed as
pip install statot POT
. In short, this kernel computes cell-cell transition probabilites by solving an OT problem [Peyré et al., 2019] for a cellular system in steady state, e.g. a system like adult hematopoiesis for which a single time point is enough to capture the entire dynamical landscape. This requires you to have some knowledge about sources and sinks in your dataset, e.g., cellular growth- and death rates, as well as potential entry- or exit points.Please refer to the Stationary OT documentation to learn more.
- Parameters:
adata (
anndata.AnnData
) – Annotated data object.terminal_states (
Union
[str
,Series
,None
]) – Key inanndata.AnnData.obs
or a categoricalpandas.Series
where non-NaN values mark the terminal states. If None, terminal states are assumed to be present inanndata.AnnData.obs
['terminal_states']
.g (
Union
[str
,ndarray
]) – Key inanndata.AnnData.obs
containing relative growth rates for cells or the array itself.kwargs (
Any
) – Keyword arguments for the parent class.
Attributes table#
Methods table#
|
Compute transition matrix using stationary OT [Zhang et al., 2021]. |
|
Not implemented. |
|
Read kernel object saved using |
|
Plot |
|
Plot random walks in an embedding. |
|
Visualize outgoing flow from a cluster of cells [Mittnenzweig et al., 2021]. |
|
De-serialize self from a file. |
|
Serialize self to a file. |
|
Write the transition matrix and parameters used for computation to the underlying |
Attributes#
adata#
- StationaryOTKernel.adata#
Annotated data object.
backward#
- StationaryOTKernel.backward#
None.
kernels#
- StationaryOTKernel.kernels#
Underlying base kernels.
params#
- StationaryOTKernel.params#
Parameters which are used to compute the transition matrix.
shape#
- StationaryOTKernel.shape#
(n_cells, n_cells)
.
transition_matrix#
- StationaryOTKernel.transition_matrix#
Row-normalized transition matrix.
Methods#
compute_transition_matrix#
- StationaryOTKernel.compute_transition_matrix(eps, dt, basis='X_pca', cost_norm_method=None, method='ent', tol=0.0, thresh=0.0, maxiter=5000, C=None, verbose=False, **kwargs)[source]#
Compute transition matrix using stationary OT [Zhang et al., 2021].
- Parameters:
eps (
float
) – Regularization parameter.dt (
float
) – Choice of the time step over which to fit the model.basis (
str
) – Key inanndata.AnnData.obsm
where the basis is stored.cost_norm_method (
Optional
[str
]) – Cost normalization method to use. Use “mean” to ensuremean(C) = 1
or refer toot.utils.cost_normalization()
for more information.method (
Literal
['ent'
,'quad'
,'unbal'
]) –Choice of regularization. Valid options are:
’ent’ - entropy.
’quad’ - L2-norm.
’unbal’ - unbalanced transport (not yet implemented).
tol (
float
) – Relative tolerance for OT solver convergence.thresh (
float
) – Threshold for output transition probabilities.maxiter (
int
) – Maximum number of iterations for OT solver.C (
Optional
[ndarray
]) – Cost matrix for optimal transport problem.verbose (
bool
) – Detailed output on convergence of OT solver.kwargs (
Any
) – Additional keyword arguments.
- Return type:
- Returns:
: Self and updates
transition_matrix
andparams
.
copy#
- StationaryOTKernel.copy(deep=False)#
Not implemented.
- Return type:
ErroredKernel
from_adata#
- classmethod StationaryOTKernel.from_adata(adata, key, copy=False)#
Read kernel object saved using
write_to_adata()
.- Parameters:
adata (
anndata.AnnData
) – Annotated data object.key (
str
) – Key inanndata.AnnData.obsp
where the transition matrix is stored. The parameters should be stored inanndata.AnnData.uns
['{key}_params']
.copy (
bool
) – Whether to copy the transition matrix.
- Return type:
Kernel
- Returns:
: The kernel with explicitly initialized properties:
transition_matrix
- the transition matrix.params
- parameters used for computation.
plot_projection#
- StationaryOTKernel.plot_projection(basis='umap', key_added=None, recompute=False, stream=True, connectivities=None, **kwargs)#
Plot
transition_matrix
as a stream or a grid plot.- Parameters:
basis (
str
) – Key inanndata.AnnData.obsm
containing the basis.key_added (
Optional
[str
]) – If not None, save the result toanndata.AnnData.obsm
['{key_added}']
. Otherwise, save the result to ‘T_fwd_{basis}’ or T_bwd_{basis}, depending on the direction.recompute (
bool
) – Whether to recompute the projection if it already exists.stream (
bool
) – IfTrue
, usescvelo.pl.velocity_embedding_stream()
. Otherwise, usescvelo.pl.velocity_embedding_grid()
.connectivities (
Optional
[spmatrix
]) – Connectivity matrix to use for projection. IfNone
, use ones from the underlying kernel, is possible.kwargs (
Any
) – Keyword argument for the chosen plotting function.
- Return type:
- Returns:
: Nothing, just plots and modifies
anndata.AnnData.obsm
with a key based onkey_added
.
plot_random_walks#
- StationaryOTKernel.plot_random_walks(n_sims=100, max_iter=0.25, seed=None, successive_hits=0, start_ixs=None, stop_ixs=None, basis='umap', cmap='gnuplot', linewidth=1.0, linealpha=0.3, ixs_legend_loc=None, n_jobs=None, backend='loky', show_progress_bar=True, figsize=None, dpi=None, save=None, **kwargs)#
Plot random walks in an embedding.
This method simulates random walks on the Markov chain defined though the corresponding transition matrix. The method is intended to give qualitative rather than quantitative insights into the transition matrix. Random walks are simulated by iteratively choosing the next cell based on the current cell’s transition probabilities.
- Parameters:
n_sims (
int
) – Number of random walks to simulate.max_iter (
Union
[int
,float
]) – Maximum number of steps of a random walk. If afloat
, it can be specified as a fraction of the number of cells.successive_hits (
int
) – Number of successive hits in thestop_ixs
required to stop prematurely.start_ixs (
Union
[Sequence
[str
],Mapping
[str
,Union
[str
,Sequence
[str
],Tuple
[float
,float
]]],None
]) –Cells from which to sample the starting points. If None, use all cells. Can be specified as:
dict
- dictionary with 1 key inanndata.AnnData.obs
with values corresponding to either 1 or more clusters (if the column is categorical) or atuple
specifying [min, max] interval from which to select the indices.typing.Sequence
- sequence of cell ids inanndata.AnnData.obs_names
.
For example
{'dpt_pseudotime': [0, 0.1]}
means that starting points for random walks will be sampled uniformly from cells whose pseudotime is in [0, 0.1].stop_ixs (
Union
[Sequence
[str
],Mapping
[str
,Union
[str
,Sequence
[str
],Tuple
[float
,float
]]],None
]) –Cells which when hit, the random walk is terminated. If None, terminate after
max_iters
. Can be specified as:dict
- dictionary with 1 key inanndata.AnnData.obs
with values corresponding to either 1 or more clusters (if the column is categorical) or atuple
specifying [min, max] interval from which to select the indices.typing.Sequence
- sequence of cell ids inanndata.AnnData.obs_names
.
For example
{'clusters': ['Alpha', 'Beta']}
andsuccessive_hits = 3
means that the random walk will stop prematurely after cells in the above specified clusters have been visited successively 3 times in a row.basis (
str
) – Basis inanndata.AnnData.obsm
to use as an embedding.cmap (
Union
[str
,LinearSegmentedColormap
]) – Colormap for the random walk lines.linewidth (
float
) – Width of the random walk lines.linealpha (
float
) – Alpha value of the random walk lines.ixs_legend_loc (
Optional
[str
]) – Legend location for the start/top indices.show_progress_bar (
bool
) – Whether to show a progress bar. Disabling it may slightly improve performance.n_jobs (
Optional
[int
]) – Number of parallel jobs. If -1, use all available cores. If None or 1, the execution is sequential.backend (
str
) – Which backend to use for parallelization. Seejoblib.Parallel
for valid options.figsize (
Optional
[Tuple
[float
,float
]]) – Size of the figure.save (
Union
[str
,Path
,None
]) – Filename where to save the plot.kwargs (
Any
) – Keyword arguments forscvelo.pl.scatter()
.
- Return type:
- Returns:
: Nothing, just plots the figure. Optionally saves it based on
save
. For each random walk, the first/last cell is marked by the start/end colors ofcmap
.
plot_single_flow#
- StationaryOTKernel.plot_single_flow(cluster, cluster_key, time_key, clusters=None, time_points=None, min_flow=0, remove_empty_clusters=True, ascending=False, legend_loc='upper right out', alpha=0.8, xticks_step_size=1, figsize=None, dpi=None, save=None, show=True)#
Visualize outgoing flow from a cluster of cells [Mittnenzweig et al., 2021].
- Parameters:
cluster (
str
) – Cluster for which to visualize outgoing flow.cluster_key (
str
) – Key inanndata.AnnData.obs
where clustering is stored.time_key (
str
) – Key inanndata.AnnData.obs
where experimental time is stored.clusters (
Optional
[Sequence
[Any
]]) – Visualize flow only for these clusters. If None, use all clusters.time_points (
Optional
[Sequence
[Union
[float
,int
]]]) – Visualize flow only for these time points. If None, use all time points.min_flow (
float
) – Only show flow edges with flow greater than this value. Flow values are always in [0, 1].remove_empty_clusters (
bool
) – Whether to remove clusters with no incoming flow edges.ascending (
Optional
[bool
]) – Whether to sort the cluster by ascending or descending incoming flow. If None, use the order as in defined byclusters
.xticks_step_size (
Optional
[int
]) – Show only every other n-th tick on the x-axis. If None, don’t show any ticks.legend_loc (
Optional
[str
]) – Position of the legend. If None, do not show the legend.figsize (
Optional
[Tuple
[float
,float
]]) – Size of the figure.save (
Union
[str
,Path
,None
]) – Filename where to save the plot.show (
bool
) – If False, returnmatplotlib.pyplot.Axes
.
- Return type:
- Returns:
: The axes object, if
show = False
. Nothing, just plots the figure. Optionally saves it based onsave
.
Notes
This function is a Python re-implementation of the following original R function with some minor stylistic differences. This function will not recreate the results from [Mittnenzweig et al., 2021], because there, the Metacell model [Baran et al., 2019] was used to compute the flow, whereas here the transition matrix is used.
read#
- static StationaryOTKernel.read(fname, adata=None, copy=False)#
De-serialize self from a file.
- Parameters:
fname (
Union
[str
,Path
]) – Filename from which to read the object.adata (
Optional
[AnnData
]) –anndata.AnnData
object to assign to the saved object. Only used when the saved object hasadata
and it was saved without it.copy (
bool
) – Whether to copyadata
before assigning it or not. Ifadata
is a view, it is always copied.
- Return type:
IOMixin
- Returns:
: The de-serialized object.
write#
write_to_adata#
- StationaryOTKernel.write_to_adata(key=None, copy=False)#
Write the transition matrix and parameters used for computation to the underlying
adata
object.- Parameters:
key (
Optional
[str
]) – Key used when writing transition matrix toadata
. If None, the key will be determined automatically.- Return type:
- Returns:
: Updates the
adata
with the following fields:.obsp['{key}']
- the transition matrix..uns['{key}_params']
- parameters used for the calculation.