如何使用相关而不是R中的欧氏距离来创建用于聚类的距离矩阵?

时间:2015-05-18 01:42:34

标签: r hierarchical-clustering

目标

我想在我的数据集中对样本(行)进行分层聚类。

我所知道的:

我已经看过使用欧氏距离等创建距离矩阵的示例,通过在R中使用dist()函数。我还看到相关用于在变量(列)之间创建不相似性(或相似性度量)。 / p>

我想做什么?

我想使用相关性为数据中的ROWS创建距离矩阵。因此,我想使用每一行之间的相关性而不是dist()中的欧几里德距离。但可用的methods不包括相关性。有什么办法可以吗?这可能不是一种常见的做法,但我认为这适用于我的应用程序。

1 个答案:

答案 0 :(得分:3)

我认为您对distance metric的内容感到有点困惑。距离度量不能为负,但我们知道相关性肯定是负的。不过,我会尝试回答你问题的要点。

基本上你想通过使用一些距离和相关方法来找出两个变量是否相似。这可以使用corrplot库轻松显示。因此,使用mlbench库中的数据集作为示例,我们可以将其可视化如下:

library(mlbench)
library(corrplot)
data(PimaIndiansDiabetes)
plot1 <- corrplot(cor(PimaIndiansDiabetes[,!(names(PimaIndiansDiabetes) %in% c("diabetes"))]), 
                  method="square",
                  order="hclust", tl.cex=0.7, cl.cex=0.5, tl.col="black", addrect=2)

enter image description here

在这里,我可以使用hclust使用相关性作为相似性度量来突出显示两组相似变量。

如果您想使用基础库来查看树状图的样子,也可以轻松实现:

cor.info <- cor(PimaIndiansDiabetes[,!(names(PimaIndiansDiabetes) %in% c("diabetes"))])
sim.by.hclust <- hclust(dist(cor.info))
plot(sim.by.hclust)

enter image description here

在这里,我们可以看到如何通过直接使用相关矩阵将变量组合在一起。请注意,在此示例中,相关性距离指标!

希望这能回答你的问题...

如果您想要了解有关行的信息,只需使用t(),因此请使用上述相同信息:

data(PimaIndiansDiabetes)
tdat <- t(PimaIndiansDiabetes[,!(names(PimaIndiansDiabetes) %in% c("diabetes"))])
cor.tdat <- cor(tdat)
sim.by.hclust <- hclust(dist(cor.tdat))
plot(sim.by.hclust)