“Specifying an appropriate dissimilarity measure is far more important in obtaining success with clustering than choice of clustering algorithm. This aspect of the problem is emphasized less in the clustering literature than the algorithms themselves, since it depends on domain specific knowledge specifics and is less amenable to general research.”
-Hastie, Tibshirani and Friedman, Elements of Statistical Learning, p. 506
PreciseDist takes that observation seriously. It is an instrument for epistemic hygiene in unsupervised analysis: the distance or similarity metric you choose is not a throwaway preprocessing detail — it is the structure you are about to analyse. So don’t assume your metric: build many, test how much they agree, fuse the ones worth trusting, project the result to a graph, and see the structure before you believe it.
This website is structured around the final package shape:
- PreciseDist is the core package: distance and similarity breadth, explicit transformation, agreement diagnostics, metric-set stability, fusion, and graph projection.
- PreciseViz is the visualization package: heatmaps, embeddings, graph layouts, agreement panels, browsing, and export.
The packages are independently installable and checked, but share this website because they form one user-facing workflow.
One typed workflow
PreciseDist owns the four computational tiers. PreciseViz then consumes their open typed-matrix output without importing PreciseDist:
library(PreciseDist)
library(PreciseViz)
idx <- c(1:5, 61:65, 121:125)
x <- as.matrix(data_cell_cycle[idx, -1])[, 1:50]
storage.mode(x) <- "double"
rownames(x) <- paste0("obs_", seq_len(nrow(x)))
d <- precise_dist(x, dists = c("euclidean", "manhattan", "canberra"),
verbose = FALSE)
d <- precise_transform(d, to = "distance")
f <- precise_fusion(d, methods = "mean", verbose = FALSE)
g <- precise_graph(f, methods = "knn", verbose = FALSE)
v <- precise_viz(g, views = "graph_layout", verbose = FALSE)Every matrix carries an explicit type (distance or similarity); PreciseDist never infers type from values and never silently converts one to the other. precise_stability() is an optional side-layer for testing whether a fused consensus is sensitive to the candidate matrices you selected. See the articles for a full walk through the spine.