Source code for stlearn.embedding.ica

import numpy as np
import pandas as pd
from typing import Optional
from anndata import AnnData
from sklearn.decomposition import FastICA
from scipy.sparse import issparse


[docs]def run_ica( adata: AnnData, n_factors: int = 20, fun: str = "logcosh", tol: float = 0.0001, use_data: str = None, copy: bool = False, ) -> Optional[AnnData]: """\ FastICA: a fast algorithm for Independent Component Analysis. Parameters ---------- adata Annotated data matrix. n_factors Number of components to use. If none is passed, all are used. fun The functional form of the G function used in the approximation to neg-entropy. Could be either 'logcosh', 'exp', or 'cube'. You can also provide your own function. It should return a tuple containing the value of the function, and of its derivative, in the point. Example: def my_g(x): return x ** 3, (3 * x ** 2).mean(axis=-1) tol Tolerance on update at each iteration. use_data if None, then using all the gene expression profile. Else, use the chosen data from adata.obsm. copy Return a copy instead of writing to adata. Returns ------- Depending on `copy`, returns or updates `adata` with the following fields. `X_ica` : :class:`numpy.ndarray` (`adata.obsm`) Independent Component Analysis representation of data. """ if use_data is None: if issparse(adata.X): matrix = adata.X.toarray() else: matrix = adata.X else: matrix = adata.obsm[use_data].values ica = FastICA(n_components=n_factors, fun=fun, tol=tol) latent = ica.fit_transform(matrix) adata.obsm["X_ica"] = latent adata.uns["ica"] = {"params": {"n_factors": n_factors, "fun": fun, "tol": tol}} print( "ICA is done! Generated in adata.obsm['X_ica'] and parameters in adata.uns['ica']" ) return adata if copy else None