Source code for spatialtis.spatial.interaction

import pandas as pd
from anndata import AnnData
from spatialtis_core import CellCombs

from spatialtis.abc import AnalysisBase
from spatialtis.utils import doc, options_guard


[docs]@doc def cell_interaction(data: AnnData, method: str = "pval", resample: int = 1000, pval: float = 0.01, export_key: str = "cell_interaction", **kwargs, ): """`Profiling cell-cell interaction <about/implementation.html#profiling-of-cell-cell-interaction>`_ using permutation test Neighborhood analysis tells you the relationship between different type of cells - Association (1) - Avoidance (-1) - No relationship (0) Parameters ---------- data : {adata} method : {'pval', 'zscore'}, default: 'pval' resample : float, default: 1000 Number of times to perform resample. pval : {pval} export_key : {export_key} **kwargs : {analysis_kwargs} See Also -------- :class:`spatialtis.spatial_enrichment` """ method = options_guard(method, ["pval", "zscore"]) display_method = {"pval": "pseudo p-value", "zscore": "z-score"} ab = AnalysisBase(data, method=display_method[method], display_name="Cell interaction", export_key=export_key, **kwargs) cc = CellCombs(ab.cell_types) results_data = [] roi_tracker = [] repeat_time = 0 for roi_name, cell_types, labels, neighbors in ab.iter_roi(fields=['cell_type', 'neighbors']): result = cc.bootstrap( list(cell_types), neighbors, labels, times=resample, pval=pval, method=method, ) results_data += result repeat_time = len(result) roi_tracker += [roi_name for _ in range(repeat_time)] df = pd.DataFrame(data=results_data, columns=["type1", "type2", "value", "relationship"]) ix = pd.DataFrame(data=roi_tracker, columns=ab.exp_obs).reset_index() df = df.set_index(pd.MultiIndex.from_frame(ix)) # df = df.pivot_table(values="value", index=ab.exp_obs, columns=["type1", "type2"]) ab.result = df