peach.tl.conditional_associations#
- peach.tl.conditional_associations(adata, *, obs_column, archetype_assignments=None, obs_key='archetypes', test_method='hypergeometric', fdr_method='benjamini_hochberg', min_cells=5, verbose=True, **kwargs)[source]#
Test associations between archetypes and categorical metadata.
Performs hypergeometric tests to identify significant enrichment of archetypes within different categorical conditions (samples, treatments, cell types, etc.).
- Parameters:
adata (AnnData) β
Annotated data object with:
obs[obs_key]: Archetype assignmentsobs[obs_column]: Categorical variable to test
obs_column (str) β Column name in adata.obs containing categorical variable.
archetype_assignments (None, optional) β Deprecated. Archetype assignments now read from adata.obs[obs_key].
obs_key (str, default: "archetypes") β Column in adata.obs containing archetypal assignments.
test_method (str, default: "hypergeometric") β Statistical test method (currently only βhypergeometricβ).
fdr_method (str, default: "benjamini_hochberg") β FDR correction method.
min_cells (int, default: 5) β Minimum cells required per archetype-condition combination.
verbose (bool, default: True) β Whether to print progress.
- Returns:
Results with columns:
archetype: str - Archetype identifiercondition: str - Condition value from obs_columnobserved: int - Observed count in overlapexpected: float - Expected count under nulltotal_archetype: int - Total cells in archetypetotal_condition: int - Total cells in conditionodds_ratio: float - Enrichment measure (>1 = enriched)ci_lower: float - Lower 95% CI for odds ratioci_upper: float - Upper 95% CI for odds ratiopvalue: float - Hypergeometric p-valuefdr_pvalue: float - FDR-corrected p-valuesignificant: bool - Whether significant
- Return type:
pd.DataFrame
Examples
>>> # Test sample associations >>> results = pc.tl.conditional_associations(adata, obs_column="sample") >>> # Find enriched archetypes per condition >>> enriched = results[(results["significant"]) & (results["odds_ratio"] > 2)] >>> # Test treatment effects >>> treatment_results = pc.tl.conditional_associations(adata, obs_column="treatment")
See also
peach._core.types.ConditionalAssociationResultResult row structure