Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I want to perform a cluster analysis using the HierarchicalClustering package. Is there a way to display the inter-cluster distances in a dendrogram plot?

An example how the result should look like: here.

share|improve this question

1 Answer 1

up vote 12 down vote accepted

DendrogramPlot accepts Axes as an option. Despite syntax highlighting in red of Axes and AxesOrigin, GridLines etc. these options seem to work with DendrogramPlot.

Inter-cluster distance in a Cluster object is given as the third element.

enter image description here

Several combinations of DistanceFunction and Linkage where inter-cluster distances are highlighted in red and shown as green gridlines in the dendogram plot:

Needs["HierarchicalClustering`"]

Grid[{{ToString@#[[1]] <> "--" <> #[[2]]}, 
  {Replace[ Agglomerate[{1, 2, 10, 4, 8},
    DistanceFunction -> #[[1]], Linkage -> #[[2]]], 
    Cluster[a_, b_, c_, d__] -> 
    Cluster[a, b, Style[c, 18, Red, Bold], d], {0, 
    Infinity}]}, {DendrogramPlot[{1, 2, 10, 4, 8},
   DistanceFunction -> #[[1]], Linkage -> #[[2]], 
   LeafLabels -> (# &), 
   GridLines -> {None, Cases[Agglomerate[{1, 2, 10, 4, 8},
       DistanceFunction -> #[[1]], Linkage -> #[[2]]], 
      Cluster[a_, b_, c_, d__] :> c, {0, Infinity}]}, 
   GridLinesStyle -> Green, ImageSize -> 500, 
   Axes -> {False, True}, AxesOrigin -> {.75, Automatic}]}}] & /@ 
 Tuples[{{Automatic, ManhattanDistance}, {"Complete",  "Centroid"}}] // Column

enter image description here

So ... vertical axis does indeed measure the inter-cluster distances for a given DistanceFunction and Linkage.

For various combinations of DistanceFunction and Linkage you get the following pictures:

{#, Agglomerate[{1, 2, 10, 4, 8}, DistanceFunction -> Automatic, Linkage -> #], 
 DendrogramPlot[{1, 2, 10, 4, 8},
 DistanceFunction -> Automatic, Linkage -> #, 
 Axes -> {False, True}, AxesOrigin -> {-1, Automatic}],
 Agglomerate[{1, 2, 10, 4, 8}, DistanceFunction -> ManhattanDistance, Linkage -> #],
 DendrogramPlot[{1, 2, 10, 4, 8},
 DistanceFunction -> ManhattanDistance, Linkage -> #, 
 Axes -> {False, True}, AxesOrigin -> {-1, Automatic}]} & /@
 {"Single", "Average","Complete", "WeightedAverage", "Centroid", "Median","Ward"} // 
 Grid[Prepend[#, {"", "EuclideanDistance-Clusters", 
 "EuclideanDistance-Dendogram", "ManhattanDistance-Clusters",
 "ManhattanDistance-Dendogram"}], 
  Dividers -> All, Alignment -> Bottom] &    

enter image description here

EDIT: What I get for Frederik's example in the comments:

DendrogramPlot[Prime[#] & /@ Range[30], Axes -> {False, True}, 
AxesOrigin -> {-1, Automatic}]

enter image description here

share|improve this answer
    
I posted the same answer, but deleted it. Are you sure the vertical axis represents the inter-cluster distance? –  belisarius Aug 6 '12 at 14:02
    
Thank you very much. Unfortunately, drawing axes seems a little buggy. Try: DendrogramPlot[Prime[#]&/@Range[30],Axes->{False, True}] –  Frederik Ziebell Aug 6 '12 at 14:09
    
@belisarius, inter-cluster distance should depend on DistanceFunction and Linkage. I tried various combinations of DistanceFunction and Linkage, and the vertical tick labels seem to vary in expected ways... but I have not beenable to verify the exact mapping ... yet :) –  kguler Aug 6 '12 at 14:21
    
Seems correlated, yes. But not sure if it exactly represent the distance. Oh, well :) –  belisarius Aug 6 '12 at 14:25
    
@Frederik, I added the picture I get for your example. –  kguler Aug 6 '12 at 14:27

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.