Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

drawing dendrogram from pre calculated distance matrix

I know there's another post similar to this one but it has not helped my situation. I am trying to draw a dendrogram from a distance matrix I've calculated not using euclidean distance (using an earth-mover's distance from the emdist package). I am now trying to draw a dendrogram from this matrix:

dim(x)
[1] 8800 8800

x <- x[1:10,1:10]
x
          1        2        3          4         5        6        7
1  0.00000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
2  0.67400563 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
3  0.02577228 0.6526842 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
4  0.37994900 0.7268372 0.1240314 0.0000000 0.0000000 0.0000000 0.0000000
5  0.85156584 1.0248822 0.6165767 0.9077611 0.0000000 0.0000000 0.0000000
6  0.51784015 0.5286874 0.5115762 0.6601093 1.1639417 0.0000000 0.0000000
7  0.19290720 0.5906327 0.6576926 0.4350795 0.2986499 0.4130357 0.0000000
8  1.57669127 1.3727582 1.4215065 1.9522834 1.0919793 0.9681544 1.0372481
9  3.01650143 3.3004177 3.0651622 3.2502077 4.1505108 2.9940774 3.6078234
10 0.48684093 0.6997258 0.3959822 0.3515030 0.8611233 0.5505790 0.3047047
         8       9    10
1  0.000000 0.000000   0
2  0.000000 0.000000   0
3  0.000000 0.000000   0
4  0.000000 0.000000   0
5  0.000000 0.000000   0
6  0.000000 0.000000   0
7  0.000000 0.000000   0
8  0.000000 0.000000   0
9  3.753577 0.000000   0
10 1.500342 3.309016   0

the problem is when I run

plot(hclust(x))

I get this error:

Error in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") : missing value where TRUE/FALSE needed

whereas if I run the dist function to calculate euclidean distances from the distance matrix that I've already calculated using a different approach, it draws the plot.

plot(hclust(dist(x)))

enter image description here

However, this is not realistic. I need hclust to work from the distance matrix I've already calculated using a different approach. Any ideas?

like image 586
user3141121 Avatar asked Jan 29 '14 21:01

user3141121


1 Answers

hclust needs an object of class dist. as.dist, rather than dist, should give you want you are looking for.

plot(hclust(as.dist(x)))
like image 113
Vincent Avatar answered Sep 30 '22 10:09

Vincent