3. scVelo: Differential Kinetics

https://scvelo.readthedocs.io/DifferentialKinetics.html

最終更新日: 2023/10/1

重要な懸念事項の一つは、複数の系統やプロセスを表す系を扱うことで、遺伝子が亜集団間で異なる状態を示す可能性があることです。 異なる細胞状態や系統は通常異なる遺伝子制御ネットワークによって支配されており、それゆえ異なるスプライシング動態を示す可能性があります。これにより、位相空間で複数の軌跡を示す遺伝子が発生することになります。

この問題に対処するために、力学モデルを使用して、キネティクスの差分の尤度比検定を実行することができます。こうすることで、全体的なダイナミクスの単一モデルではうまく説明できないような挙動を示すクラスタを検出することができます。細胞種ごとに異なるキネティクスレジームにクラスタリングすることで、各レジームを個別に適合させることができます。

説明のために、歯状回神経新生に微分動力学解析を適用してみる。 例として、複数の異質な部分集団から構成されている歯状回神経新生 (dentate gyrus neurogenesis) に差分キネティクス解析を適用してみましょう。

[1]:
import scvelo as scv
scv.logging.print_version()
scv.settings.verbosity = 3  # show errors(0), warnings(1), info(2), hints(3)
scv.settings.presenter_view = True  # set max width size for presenter view
scv.settings.set_figure_params('scvelo')  # for beautified visualization
Running scvelo 0.2.5 (python 3.8.16) on 2023-10-01 19:08.
ERROR: XMLRPC request failed [code: -32500]
RuntimeError: PyPI no longer supports 'pip search' (or XML-RPC search). Please use https://pypi.org/search (via a browser) instead. See https://warehouse.pypa.io/api-reference/xml-rpc.html#deprecated-methods for more information.

3.1. データの準備

前準備として、HVGの選択、総サイズによる遺伝子発現量の正規化・対数化、速度推定のためのモーメント計算を実行します。 詳しい説明は前のチュートリアルを参照。

[2]:
adata = scv.datasets.dentategyrus()
scv.pp.filter_and_normalize(adata, min_shared_counts=30, n_top_genes=2000)
scv.pp.moments(adata, n_pcs=30, n_neighbors=30)
Filtered out 11019 genes that are detected 30 counts (shared).
Normalized count data: X, spliced, unspliced.
Extracted 2000 highly variable genes.
Logarithmized X.
computing neighbors
    finished (0:00:05) --> added
    'distances' and 'connectivities', weighted adjacency matrices (adata.obsp)
computing moments based on connectivities
    finished (0:00:00) --> added
    'Ms' and 'Mu', moments of un/spliced abundances (adata.layers)

3.2. Basic Velocity Estimation

[3]:
scv.tl.velocity(adata)
scv.tl.velocity_graph(adata)
scv.pl.velocity_embedding_stream(adata, basis='umap')
computing velocities
    finished (0:00:00) --> added
    'velocity', velocity vectors for each individual cell (adata.layers)
computing velocity graph (using 1/40 cores)
    finished (0:00:05) --> added
    'velocity_graph', sparse matrix with cosine correlations (adata.uns)
computing velocity embedding
    finished (0:00:00) --> added
    'velocity_umap', embedded velocity vectors (adata.obsm)
../_images/notebooks_scVelo3_5_3.png

3.3. Differential Kinetic Test

異なる細胞種や系統は異なる遺伝子ネットワークによって支配され得るので、異なるキネティクスレジームを示すことがあります。細胞種や系統が関連していても、alternative splicing、alternative polyadenylation、分解における調節により、キネティクスが異なる場合があります。

力学モデルによって、全体的なキネティクスを表す単一のモデルでは十分に説明できないような動態を示すクラスターを検出するために、キネティクスの差異に関する尤度比検定でこの問題に対処することができる。各細胞種は独立したフィットが有意に改善された尤度をもたらすかどうかについてテストされる。

尤度比は漸近的カイ二乗分布に従い、有意性を検定することができる。効率上の理由から、デフォルトでは、クラスタが全体的な力学によって十分に説明されているか、または異なる力学を示すかをテストするために、完全な位相軌跡の代わりに直交回帰が使用されていることに注意。

[4]:
var_names = ['Tmsb10', 'Fam155a', 'Hn1', 'Rpl6']
scv.tl.differential_kinetic_test(adata, var_names=var_names, groupby='clusters')
recovering dynamics (using 1/40 cores)
    finished (0:00:02) --> added
    'fit_pars', fitted parameters for splicing dynamics (adata.var)

outputs model fit of gene: Rpl6
testing for differential kinetics
    finished (0:00:00) --> added
    'fit_diff_kinetics', clusters displaying differential kinetics (adata.var)
    'fit_pvals_kinetics', p-values of differential kinetics (adata.var)

outputs model fit of gene: Rpl6
[4]:
<scvelo.tools.dynamical_model.DynamicsRecovery at 0x7f4ab5d0b160>
[5]:
scv.get_df(adata[:, var_names], ['fit_diff_kinetics', 'fit_pval_kinetics'], precision=2)
[5]:
fit_diff_kinetics fit_pval_kinetics
index
Tmsb10 Endothelial 6.02e-16
Fam155a Cajal Retzius 8.35e-161
Hn1 Microglia 3.02e-03
Rpl6 Microglia 5.69e-16
[6]:
kwargs = dict(linewidth=2, add_linfit=True, frameon=False)
scv.pl.scatter(adata, basis=var_names, add_outline='fit_diff_kinetics', **kwargs)
../_images/notebooks_scVelo3_9_0.png

例えばTmsb10では、内皮は全体的なダイナミクス(紫色の曲線)ではうまく説明できないような動力学的挙動を示す(縁取られた◯、黒線がフィットされた線)。

[7]:
diff_clusters=list(adata[:, var_names].var['fit_diff_kinetics'])
scv.pl.scatter(adata, legend_loc='right', size=60, title='diff kinetics',
               add_outline=diff_clusters, outline_width=(.8, .2))
../_images/notebooks_scVelo3_11_0.png

3.4. Testing top-likelihood genes

尤度の高い遺伝子をスクリーニングすると、複数のキネティックレジームを示す遺伝子単位のダイナミクスがいくつか見つかります。

[8]:
scv.tl.recover_dynamics(adata)
top_genes = adata.var['fit_likelihood'].sort_values(ascending=False).index[:100]
scv.tl.differential_kinetic_test(adata, var_names=top_genes, groupby='clusters')
recovering dynamics (using 1/40 cores)
    finished (0:03:33) --> added
    'fit_pars', fitted parameters for splicing dynamics (adata.var)
testing for differential kinetics
    finished (0:00:20) --> added
    'fit_diff_kinetics', clusters displaying differential kinetics (adata.var)
    'fit_pvals_kinetics', p-values of differential kinetics (adata.var)

特に、Cck/Tox、GABA、内皮、ミクログリアなど、主顆粒とは異なる細胞タイプが頻繁に出現する。

[13]:
scv.pl.scatter(adata, basis=top_genes[:15], ncols=5, add_outline='fit_diff_kinetics', **kwargs)
../_images/notebooks_scVelo3_15_0.png
[10]:
scv.pl.scatter(adata, basis=top_genes[15:30], ncols=5, add_outline='fit_diff_kinetics', **kwargs)
../_images/notebooks_scVelo3_16_0.png

3.5. Recompute velocities

最終的に、複数の競合するキネティクスレジームの情報を利用して速度を再計算することができます。

[11]:
scv.tl.velocity(adata, diff_kinetics=True)
scv.tl.velocity_graph(adata)
scv.pl.velocity_embedding(adata, dpi=120, arrow_size=2, arrow_length=2)
computing velocities
    finished (0:00:02) --> added
    'velocity', velocity vectors for each individual cell (adata.layers)
computing velocity graph (using 1/40 cores)
    finished (0:00:05) --> added
    'velocity_graph', sparse matrix with cosine correlations (adata.uns)
computing velocity embedding
    finished (0:00:00) --> added
    'velocity_umap', embedded velocity vectors (adata.obsm)
../_images/notebooks_scVelo3_18_3.png
[12]:
import session_info
session_info.show()
[12]:
Click to view session information
-----
anndata             0.9.1
pandas              1.5.3
scvelo              0.2.5
session_info        1.0.0
-----
Click to view modules imported as dependencies
PIL                         9.4.0
asciitree                   NA
asttokens                   NA
backcall                    0.2.0
beta_ufunc                  NA
binom_ufunc                 NA
bottleneck                  1.3.5
cffi                        1.15.1
cloudpickle                 2.2.1
colorama                    0.4.6
comm                        0.1.2
cycler                      0.10.0
cython_runtime              NA
dask                        2023.5.0
dateutil                    2.8.2
debugpy                     1.5.1
decorator                   5.1.1
defusedxml                  0.7.1
entrypoints                 0.4
executing                   0.8.3
fasteners                   0.18
h5py                        3.8.0
hypergeom_ufunc             NA
igraph                      0.10.4
importlib_metadata          NA
importlib_resources         NA
ipykernel                   6.19.2
ipython_genutils            0.2.0
ipywidgets                  8.0.4
jedi                        0.18.1
jinja2                      3.1.2
joblib                      1.2.0
jupyter_server              1.23.4
kiwisolver                  1.4.4
leidenalg                   0.9.1
llvmlite                    0.39.1
louvain                     0.8.0
markupsafe                  2.1.1
matplotlib                  3.7.1
matplotlib_inline           0.1.6
mpl_toolkits                NA
msgpack                     1.0.5
natsort                     8.3.1
nbinom_ufunc                NA
ncf_ufunc                   NA
numba                       0.56.4
numcodecs                   0.11.0
numexpr                     2.8.4
numpy                       1.23.5
packaging                   23.0
parso                       0.8.3
pexpect                     4.8.0
pickleshare                 0.7.5
pkg_resources               NA
platformdirs                2.5.2
plotly                      5.14.1
prompt_toolkit              3.0.36
psutil                      5.9.0
ptyprocess                  0.7.0
pure_eval                   0.2.2
pycparser                   2.21
pydev_ipython               NA
pydevconsole                NA
pydevd                      2.6.0
pydevd_concurrency_analyser NA
pydevd_file_utils           NA
pydevd_plugins              NA
pydevd_tracing              NA
pygments                    2.15.1
pynndescent                 0.5.10
pyparsing                   3.0.9
pytz                        2022.7
scanpy                      1.9.3
scipy                       1.9.1
setuptools                  66.0.0
six                         1.16.0
sklearn                     1.2.2
stack_data                  0.2.0
texttable                   1.6.7
threadpoolctl               3.1.0
tlz                         0.12.0
toolz                       0.12.0
tornado                     6.2
tqdm                        4.65.0
traitlets                   5.7.1
typing_extensions           NA
umap                        0.5.3
wcwidth                     0.2.5
yaml                        6.0
zarr                        2.14.2
zipp                        NA
zmq                         25.0.2
zope                        NA
-----
IPython             8.12.0
jupyter_client      8.1.0
jupyter_core        5.3.0
jupyterlab          3.5.3
notebook            6.5.4
-----
Python 3.8.16 (default, Mar  2 2023, 03:21:46) [GCC 11.2.0]
Linux-5.15.0-79-generic-x86_64-with-glibc2.17
-----
Session information updated at 2023-10-01 19:13