我想在我的数据集中对样本(行)进行分层聚类。
我已经看过使用欧氏距离等创建距离矩阵的示例,通过在R中使用dist()
函数。我还看到相关用于在变量(列)之间创建不相似性(或相似性度量)。 / p>
我想使用相关性为数据中的ROWS创建距离矩阵。因此,我想使用每一行之间的相关性而不是dist()
中的欧几里德距离。但可用的methods
不包括相关性。有什么办法可以吗?这可能不是一种常见的做法,但我认为这适用于我的应用程序。
答案 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)
在这里,我可以使用hclust
使用相关性作为相似性度量来突出显示两组相似变量。
如果您想使用基础库来查看树状图的样子,也可以轻松实现:
cor.info <- cor(PimaIndiansDiabetes[,!(names(PimaIndiansDiabetes) %in% c("diabetes"))])
sim.by.hclust <- hclust(dist(cor.info))
plot(sim.by.hclust)
在这里,我们可以看到如何通过直接使用相关矩阵将变量组合在一起。请注意,在此示例中,相关性不距离指标!
希望这能回答你的问题...
如果您想要了解有关行的信息,只需使用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)