uma*_*ani 5 r hierarchical-clustering
我想在我的数据集中对样本(行)进行层次聚类。
我已经看到使用欧几里得距离等创建距离矩阵的例子,通过dist()在 R 中使用函数。我还看到相关性用于创建变量(列)之间的不相似性(或相似性度量)。
我想使用相关性为数据中的 ROWS 创建一个距离矩阵。所以,dist()我想使用每一行之间的相关性,而不是欧氏距离。但可用的methods不包括相关性。有什么办法可以做到吗?这可能不是一种常见的做法,但我认为它适合我的应用程序。
我认为您对什么是距离度量有点困惑。距离度量不能为负,但我们知道相关性肯定可以为负。不过我会尽量回答你问题的要点。
基本上,您想通过使用某种距离和相关性的方法来确定两个变量是否相似。这可以使用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)
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以hclust使用相关性作为相似性的度量来突出显示两组相似的变量。
如果您想使用基础库来查看树状图的外观,也可以轻松实现:
cor.info <- cor(PimaIndiansDiabetes[,!(names(PimaIndiansDiabetes) %in% c("diabetes"))])
sim.by.hclust <- hclust(dist(cor.info))
plot(sim.by.hclust)
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以看到如何直接使用相关矩阵将变量分组在一起。请注意,在此示例中,相关性不是距离度量!
希望这能回答你的问题...
如果你想在 Rows 上做信息,只需使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9582 次 |
| 最近记录: |