delnx.tl.groupedΒΆ
- delnx.tl.grouped(func, adata, group_key, min_samples=2, multitest_method='fdr_bh', verbose=True, **kwargs)[source]ΒΆ
Run a DE function separately for each group and combine results.
Thin orchestrator that subsets
adataby each unique value ofadata.obs[group_key], callsfuncon each subset, and re-corrects p-values across all groups.- Parameters:
func (
Callable[...,DataFrame]) β DE function with signaturefunc(adata, **kwargs) -> pd.DataFrame. The returned DataFrame must contain apvalcolumn. Works withde(),rank_de(), or any custom function (e.g., a lambda wrappingnb_fit()+nb_test()).adata (
AnnData) β Annotated data object.group_key (
str) β Column inadata.obsdefining groups (e.g.,"cell_type").min_samples (
int(default:2)) β Minimum observations per group to run the analysis. Groups with fewer observations are skipped with a warning.multitest_method (
str(default:'fdr_bh')) β Method for multiple testing correction across all groups (seestatsmodels.stats.multipletests()).verbose (
bool(default:True)) β Whether to print progress messages.**kwargs β Passed through to
func.
- Return type:
DataFrame- Returns:
pd.DataFrame Combined results with an additional
groupcolumn. Thepadjcolumn is re-computed across all groups.
Examples
Per-cell-type logistic regression:
>>> results = dx.tl.grouped(dx.tl.de, adata, group_key="cell_type", ... condition_key="treatment", reference="control", ... contrast="treatment[T.drugA]")
Per-cell-type rank-based markers:
>>> results = dx.tl.grouped(dx.tl.rank_de, adata, group_key="cell_type", condition_key="treatment")
Per-cell-type negative binomial DE:
>>> def nb_de(adata, **kw): ... fit = dx.tl.nb_fit(adata, **kw) ... return dx.tl.nb_test(adata, fit) >>> results = dx.tl.grouped(nb_de, adata, group_key="cell_type", condition_key="treatment")