Source code for spatialtis.spatial.autocorr

from typing import Optional

import numpy as np
import pandas as pd
from anndata import AnnData
from spatialtis_core import spatial_autocorr as autocorr

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


[docs]@doc class spatial_autocorr(AnalysisBase): """Spatial auto-correlation for every markers This is used measure the correlation of marker expression with spatial locations. Moran's I is more for global spatial autocorrelation, Geary's C is more for local spatial autocorrelation Args: data: {data} method: "moran_i" or "geary_c" (Default: "moran_i") pval: {pval} two_tailed: Whether to use two tailed for p-value layer_key: {layer_key} **kwargs: {analysis_kwargs} .. seealso:: :class:`spatialtis.somde` """ def __init__( self, data: AnnData, method: str = "moran_i", pval: float = 0.05, two_tailed: bool = True, layer_key: Optional[str] = None, **kwargs, ): super().__init__(data, display_name="Spatial auto-correlation", **kwargs) track_ix = [] results_data = [] for roi_name, roi_data, markers, exp in self.roi_exp_iter( layer_key=layer_key, desc=self.display_name ): neighbors = read_neighbors(roi_data, self.neighbors_key) labels = roi_data[self.cell_id_key] results = autocorr( exp.astype(np.float64), neighbors, labels=labels, two_tailed=two_tailed, pval=pval, method=method, ) markers = markers.to_numpy() results = np.hstack([markers.reshape(-1, 1), results]) track_ix += [roi_name for _ in range(len(markers))] results_data.append(results) self.result = pd.concat( [ pd.DataFrame(data=track_ix, columns=self.exp_obs), pd.DataFrame( data=np.concatenate(results_data), columns=["marker", "pattern", "index_value", "pval"], ), ], axis=1, )