Partition PBMC 68k (reduced)

Partition PBMC 68k (reduced)#

Partition Scanpy’s bundled pbmc68k_reduced dataset with CAMP3, then compute quality metrics against Louvain clusters.

Setup and partition#

import campmc as cp
import scanpy as sc
adata = sc.datasets.pbmc68k_reduced()
cp.partition(adata, method="camp3", gamma=50, random_state=0)
adata.obs["camp"].head()
index
AAAGCCTGGCTAAC-1    seed11-50-__all__
AAATTCGATGCACA-1    seed11-50-__all__
AACACGTGGTCTTT-1     seed3-50-__all__
AAGTGCACGTGCTA-1    seed13-50-__all__
ACACGAACGGAGTG-1     seed5-50-__all__
Name: camp, dtype: str

This object already has PCA embeddings, so preprocessing is optional. Labels land in obs['camp']; coreset seeds are flagged in obs['camp_is_seed'].

import campmc as cp
import scanpy as sc
adata = sc.datasets.pbmc68k_reduced()
cp.partition(adata, method="camp3", gamma=50, random_state=0)
int(adata.obs["camp_is_seed"].sum())
14

Quality metrics#

import campmc as cp
import scanpy as sc
adata = sc.datasets.pbmc68k_reduced()
cp.partition(adata, method="camp3", gamma=50, random_state=0)
metrics = cp.mt.quality(adata, partition_key="camp", label_key="louvain")
metrics[["metacell_id", "size", "purity", "compactness"]].head()
metacell_id size purity compactness
0 seed0-50-__all__ 65 0.984615 -0.001010
1 seed1-50-__all__ 34 0.911765 -0.000305
2 seed10-50-__all__ 3 0.666667 -0.000724
3 seed11-50-__all__ 158 0.708861 -0.000695
4 seed12-50-__all__ 42 0.809524 -0.000890

Variants#

  • Other assigners: method="camp1""camp4". CAMP4 uses SEACells and is slower on large objects.

  • Multiple compressions: gammas=[25, 50, 100] writes camp_25, camp_50, …

  • Raw counts: run campmc.preprocess() first to obtain obsm['X_pca'].