-
Notifications
You must be signed in to change notification settings - Fork 50
Description
Hi, when I run this code below:
import sys
import cellrank as cr
import scanpy as sc
import pandas as pd
sc.settings.set_figure_params(frameon=False, dpi=100)
import numpy as np
cr.settings.verbosity = 2
import warnings
warnings.simplefilter("ignore", category=UserWarning)
Load data
adata=sc.read_h5ad('data.h5ad')
sc.pl.embedding(adata, basis='velocity_umap', color=['celltype','leiden_velocity'],
legend_loc='on data')
Prepare Cellrank
sc.tl.pca(adata, n_comps=50, svd_solver = 'arpack')
sc.pp.neighbors(adata, n_neighbors=15, n_pcs=40)
sc.tl.diffmap(adata)
root = adata.obs.index.get_loc(adata[adata.obs['celltype']=='C13'].obs.index[np.argmin(adata[adata.obs['celltype']=='C13'].obsm['X_umap'][:, 1])])
adata.uns['iroot'] = root
sc.tl.dpt(adata)
adata.obs['root'] = np.nan
adata.obs['root'][root] = 1
sc.pl.embedding(adata, basis='velocity_umap', color=['dpt_pseudotime','celltype'],vmax=0.5)
Computing fate probability
from cellrank.kernels import PseudotimeKernel
pk = PseudotimeKernel(adata,time_key="dpt_pseudotime")
pk.compute_transition_matrix(threshold_scheme='soft',nu=0.01, b=20.0)
ck = cr.kernels.ConnectivityKernel(adata)
ck.compute_transition_matrix()
kernel = 0.3ck + 0.7pk
from cellrank.estimators import GPCCA
g_fwd = GPCCA(kernel)
print(g_fwd)
g_fwd.fit(n_states=3, cluster_key="celltype")
predict_terminal_status
g_fwd.plot_macrostates(which="all")
g_fwd.predict_terminal_states(method="top_n", n_states=5)
g_fwd.plot_macrostates(which="terminal")
CD4_T_cells = (adata[adata.obs['celltype'] == 'CD4 T cells']).obs_names[:30]
CD8_T_cells = (adata[adata.obs['celltype'] == 'CD8 T cells']).obs_names[:30]
Tgd_cells = (adata[adata.obs['celltype'] == 'Tgd cells']).obs_names[:30]
tLable = pd.DataFrame({
'CD4 T cells': CD4_T_cells,
'CD8 T cells': CD8_T_cells,
'Tgd cells': Tgd_cells
})
tLable = tLable.to_dict(orient='list')
g_fwd.set_terminal_states(states=tLable, cluster_key='celltype')
g_fwd.plot_macrostates(which="terminal")
Compute fate probabilities and driver genes
g_fwd.compute_fate_probabilities(preconditioner='ilu', tol=1e-7, solver='direct')
I got this error
Computing fate probabilities
100%
3/3 [19:59<00:00, 398.50s/]
WARNING: 3
solution(s) did not converge
ValueError Traceback (most recent call last)
Cell In[69], line 1
----> 1 g_fwd.compute_fate_probabilities(preconditioner='ilu', tol=1e-7, solver='direct')
File ~/anaconda3/envs/cellrank/lib/python3.10/site-packages/cellrank/estimators/mixins/_fate_probabilities.py:220, in FateProbsMixin.compute_fate_probabilities(self, keys, solver, use_petsc, n_jobs, backend, show_progress_bar, tol, preconditioner)
218 start = logg.info("Computing fate probabilities")
219 data = self._rec_trans_states(keys, ctx="fate_probs")
--> 220 fate_probs = self._compute_fate_probabilities(
221 data.q,
222 data.s,
223 trans_indices=data.trans_indices,
224 term_states=data.term_states,
225 solver=solver,
226 use_petsc=use_petsc,
227 n_jobs=n_jobs,
228 backend=backend,
229 tol=tol,
230 show_progress_bar=show_progress_bar,
231 preconditioner=preconditioner,
232 )
233 fate_probs = Lineage(
234 fate_probs,
235 names=list(data.term_states.cat.categories),
236 colors=data.term_states_colors,
237 )
239 params = self._create_params(remove=["use_petsc", "n_jobs", "backend", "show_progress_bar"])
File ~/anaconda3/envs/cellrank/lib/python3.10/site-packages/cellrank/estimators/mixins/_fate_probabilities.py:494, in FateProbsMixin._compute_fate_probabilities(self, q, s, trans_indices, term_states, solver, use_petsc, n_jobs, backend, tol, show_progress_bar, preconditioner)
492 mask = np.isclose(abs_classes.sum(1), 1.0, rtol=1e-3)
493 if not np.all(mask):
--> 494 raise ValueError(
495 f"{np.sum(~mask)}
value(s) do not sum to 1 (rtol=1e-3). Try decreasing the tolerance as tol=...
, "
496 f"specifying a preconditioner as preconditioner=...
or "
497 f"use a direct solver as solver='direct'
if the matrix is small."
498 )
500 return abs_classes
ValueError: 4791
value(s) do not sum to 1 (rtol=1e-3). Try decreasing the tolerance as tol=...
, specifying a preconditioner as preconditioner=...
or use a direct solver as solver='direct'
if the matrix is small.