peach.tl.pattern_analysis#
- peach.tl.pattern_analysis(adata, *, data_obsm_key='pathway_scores', obs_key='archetypes', include_individual_tests=True, include_pattern_tests=True, include_exclusivity_analysis=True, verbose=True, **kwargs)[source]#
Comprehensive archetypal pattern analysis.
Performs systematic analysis combining three complementary approaches:
Individual tests: Standard 1-vs-all archetype characterization
Pattern tests: Systematic archetype combination testing (specialists, binary tradeoffs, complex patterns)
Exclusivity analysis: Features with opposing patterns
- Parameters:
adata (AnnData) β Annotated data object with archetypal assignments and scores.
data_obsm_key (str, default: "pathway_scores") β Key in adata.obsm containing scores for pattern analysis.
obs_key (str, default: "archetypes") β Column in adata.obs containing archetypal assignments.
include_individual_tests (bool, default: True) β Run individual archetype 1-vs-all tests.
include_pattern_tests (bool, default: True) β Run systematic pattern tests (specialists, tradeoffs).
include_exclusivity_analysis (bool, default: True) β Analyze mutual exclusivity patterns.
verbose (bool, default: True) β Print analysis progress.
- Returns:
Dictionary with keys:
'individual': Individual archetype results'patterns': Pattern-based test results'exclusivity': Mutual exclusivity results
- Return type:
Notes
Pattern Types in βpatternsβ DataFrame:
specialization: Archetype vs archetype_0 (centroid)tradeoff: Multi-archetype high vs low groups
Pattern Code Format: β12xxx_xx345β
Position = archetype number (0, 1, 2β¦)
Numbers = high archetypes
βxβ = low archetypes
Underscore separates high from low group
Examples
>>> # Run comprehensive analysis >>> results = pc.tl.pattern_analysis(adata) >>> # Access individual results >>> individual = results["individual"] >>> # Find specialists (exclusive to one archetype) >>> patterns = results["patterns"] >>> specialists = patterns[patterns["pattern_type"] == "specialization"] >>> # Find mutual exclusivity patterns >>> if not results["exclusivity"].empty: ... exclusive = results["exclusivity"] ... top_tradeoffs = exclusive.nlargest(10, "effect_range")
See also
peach.tl.archetype_exclusive_patternsFocused exclusive pattern analysis
peach.tl.specialization_patternsCentroid comparison analysis
peach.tl.tradeoff_patternsMutual exclusivity analysis
peach._core.types.ComprehensivePatternResultsReturn type structure