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()