Backend implementation for IHC clustering analysis. Clusters cases based on immunohistochemistry (IHC) staining patterns using various clustering algorithms optimized for mixed categorical and continuous data.
Details
This function supports multiple clustering approaches:
PAM (k-medoids) - partitioning around medoids
Hierarchical clustering - with multiple linkage methods (Ward, complete, average, single)
MCA/PCA + k-means - dimension reduction approach
Distance Metrics:
Gower distance (default) - handles mixed data types (categorical + continuous)
Jaccard distance - optimized for binary IHC data (Sterlacci et al. 2019)
Linkage Methods (hierarchical clustering):
Ward (default) - minimizes within-cluster variance, produces balanced clusters
Complete - furthest neighbor, produces compact spherical clusters (Sterlacci et al. 2019)
Average - mean distance between clusters
Single - nearest neighbor (may produce chains)
Features
Automatic optimal k selection using silhouette analysis
Multiple distance metrics (Gower, Jaccard)
Multiple linkage methods for hierarchical clustering
Multiple testing correction (Bonferroni, FDR, Holm) for marker associations
Comprehensive visualization suite (heatmaps, dendrograms, PCA plots)
Consensus clustering for stability assessment
Clinical correlation analysis
Optimal antibody panel identification
Variable weighting support
Missing data handling (complete cases or pairwise distances)
New in v2.0 (Sterlacci 2019 Features)
Jaccard distance for binary IHC marker data
Complete linkage hierarchical clustering
Bonferroni correction for multiple testing of marker associations
Super classes
jmvcore::Analysis -> ClinicoPath::ihcclusterBase -> ihcclusterClass
Methods
Inherited methods
jmvcore::Analysis$.createImage()jmvcore::Analysis$.createImages()jmvcore::Analysis$.createPlotObject()jmvcore::Analysis$.load()jmvcore::Analysis$.render()jmvcore::Analysis$.save()jmvcore::Analysis$.savePart()jmvcore::Analysis$.setCheckpoint()jmvcore::Analysis$.setParent()jmvcore::Analysis$.setReadDatasetHeaderSource()jmvcore::Analysis$.setReadDatasetSource()jmvcore::Analysis$.setResourcesPathSource()jmvcore::Analysis$.setStatePathSource()jmvcore::Analysis$addAddon()jmvcore::Analysis$asProtoBuf()jmvcore::Analysis$asSource()jmvcore::Analysis$check()jmvcore::Analysis$init()jmvcore::Analysis$optionsChangedHandler()jmvcore::Analysis$postInit()jmvcore::Analysis$print()jmvcore::Analysis$readDataset()jmvcore::Analysis$run()jmvcore::Analysis$serialize()jmvcore::Analysis$setError()jmvcore::Analysis$setStatus()jmvcore::Analysis$translate()ClinicoPath::ihcclusterBase$initialize()