heatmap.2 defaults to dist for calculating the distance matrix and hclust for clustering. Does anyone now how I can set dist to use the euclidean method and hclust to use the centroid method? I provided a compilable code sample bellow. I tried: distfun = dist(method = "euclidean"), but that doesn't work. Any ideas?
library("gplots")
library("RColorBrewer")
test <- matrix(c(79,38.6,30.2,10.8,22,
81,37.7,28.4,9.7,19.9,
82,36.2,26.8,9.8,20.9,
74,29.9,17.2,6.1,13.9,
81,37.4,20.5,6.7,14.6),ncol=5,byrow=TRUE)
colnames(test) <- c("18:0","18:1","18:2","18:3","20:0")
rownames(test) <- c("Sample 1","Sample 2","Sample 3", "Sample 4","Sample 5")
test <- as.table(test)
mat=data.matrix(test)
heatmap.2(mat,
dendrogram="row",
Rowv=TRUE,
Colv=NULL,
distfun = dist,
hclustfun = hclust,
xlab = "Lipid Species",
ylab = NULL,
colsep=c(1),
sepcolor="black",
key=TRUE,
keysize=1,
trace="none",
density.info=c("none"),
margins=c(8, 12),
col=bluered
)
Clustering starts by computing a distance between every pair of units that you want to cluster. A distance matrix will be symmetric (because the distance between x and y is the same as the distance between y and x) and will have zeroes on the diagonal (because every item is distance zero from itself).
Distance matrices are used to represent protein structures in a coordinate-independent manner, as well as the pairwise distances between two sequences in sequence space.
Glancing at the code for heatmap.2
I'm fairly sure that the default is to use dist
, and it's default is in turn to use euclidean distances.
The reason your attempt at passing distfun = dist(method = 'euclidean')
didn't work is that distfun
(and hclustfun
) are supposed to simply be name of functions. So if you want to alter defaults and pass arguments you need to write a wrapper function like this:
heatmap.2(...,hclustfun = function(x) hclust(x,method = 'centroid'),...)
As I mentioned, I'm fairly certain that heatmap.2
is using euclidean distances by default, but a similar solution can be used to alter the distance function used:
heatmap.2(...,distfun = function(x) dist(x,method = 'euclidean'),...)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With