Bioactivity¶
molfp.bioactivity
¶
Bioactivity class profiling: analyze fingerprint patterns across activity classes.
Given molecules with activity values (IC50, pIC50, pChEMBL, Ki, pKi), bin them into classes and analyze intra-class similarity vs inter-class separation, plus identify bits enriched in each class.
classify(activities, metric='pchembl', thresholds=None)
¶
Bin activity values into active/intermediate/inactive classes.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
activities
|
list[float] | ndarray
|
list/array of activity values |
required |
metric
|
str
|
one of "pchembl", "pic50", "pki" (higher = more active) or "ic50_nm", "ki_nm" (lower = more active) |
'pchembl'
|
thresholds
|
dict[str, float] | None
|
optional dict with "active" and "inactive" cutoffs (overrides metric defaults) |
None
|
Returns:
| Type | Description |
|---|---|
list[str]
|
list of class labels ("active", "intermediate", "inactive") |
class_similarity(smiles_list, labels, fp_type='ecfp4')
¶
Compute intra-class and inter-class similarity statistics.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
smiles_list
|
list[str]
|
list of SMILES |
required |
labels
|
list[str]
|
list of class labels (same length) |
required |
fp_type
|
str
|
fingerprint type |
'ecfp4'
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict with: intra_class: {class: {mean, std, min, max, n_pairs}} inter_class: {(class_a, class_b): {mean, std, min, max, n_pairs}} separation: {(class_a, class_b): inter_mean - avg(intra_a, intra_b)} class_counts: {class: count} |
enriched_bits(smiles_list, labels, fp_type='ecfp4', min_enrichment=1.5)
¶
Find fingerprint bits enriched in each activity class.
For each class, computes bit frequency and compares to the overall frequency. Enrichment ratio = class_freq / overall_freq.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
smiles_list
|
list[str]
|
list of SMILES |
required |
labels
|
list[str]
|
list of class labels |
required |
fp_type
|
str
|
fingerprint type |
'ecfp4'
|
min_enrichment
|
float
|
minimum enrichment ratio to report |
1.5
|
Returns:
| Type | Description |
|---|---|
dict[str, list[tuple[int, float, float, float]]]
|
dict mapping class → list of (bit_idx, class_freq, overall_freq, enrichment) |
dict[str, list[tuple[int, float, float, float]]]
|
sorted by enrichment descending. |
depleted_bits(smiles_list, labels, fp_type='ecfp4', max_depletion=0.5)
¶
Find fingerprint bits depleted (underrepresented) in each activity class.
Depletion ratio = class_freq / overall_freq. Values < max_depletion are reported.
Returns dict mapping class → list of (bit_idx, class_freq, overall_freq, depletion_ratio).
profile(smiles_list, activities, metric='pchembl', thresholds=None, fp_types=None)
¶
Full bioactivity class profiling across multiple fingerprint types.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
smiles_list
|
list[str]
|
list of SMILES |
required |
activities
|
list[float] | ndarray
|
list of activity values |
required |
metric
|
str
|
activity metric type |
'pchembl'
|
thresholds
|
dict[str, float] | None
|
optional custom thresholds |
None
|
fp_types
|
list[str] | None
|
fingerprint types to compare |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict with: labels: class labels for each molecule class_counts: {class: count} fp_results: {fp_type: class_similarity result} best_separator: fp_type with highest mean separation |