2012-01-26 153 views
10

如何在不使用clustplot的情况下在R中创建聚类图?如何在R中创建聚类图?

我想抓住一些聚类(使用R)和可视化(使用HTML5画布)。我想要创建一个cluster plot,但我不想绘制数据,而是想绘制一组2D点或坐标,然后我可以将它们拉到画布上并做一些可能很漂亮的操作(但我不确定如何操作做这个)。我会想象我:

  1. 整个数据集创建一个相似矩阵(使用DIST)
  2. 集群使用k均值或类似的东西(使用k均值)
  3. 叠加使用MDS或PCA的结果相似矩阵 - 但我不确定第2步和第3步如何关联(cmdscale)。

我已经签出的问题hereherehere(大部分使用的最后一个是)。

回答

28

你的意思是这样吗? 对不起,但我一无所知HTML5帆布,只有R ...但我希望它可以帮助...

首先我聚类数据使用kmeans(注意,我没有聚类距离矩阵),比我计算距离matix并使用cmdscale绘制它。然后,我将颜色添加到与kmeans标识的组对应的MDS图。加上一些不错的附加图形功能。

您可以访问由cmdscale创建的对象的坐标。

### some sample data 
require(vegan) 
data(dune) 

# kmeans 
kclus <- kmeans(dune,centers= 4, iter.max=1000, nstart=10000) 

# distance matrix 
dune_dist <- dist(dune) 

# Multidimensional scaling 
cmd <- cmdscale(dune_dist) 

# plot MDS, with colors by groups from kmeans 
groups <- levels(factor(kclus$cluster)) 
ordiplot(cmd, type = "n") 
cols <- c("steelblue", "darkred", "darkgreen", "pink") 
for(i in seq_along(groups)){ 
    points(cmd[factor(kclus$cluster) == groups[i], ], col = cols[i], pch = 16) 
} 

# add spider and hull 
ordispider(cmd, factor(kclus$cluster), label = TRUE) 
ordihull(cmd, factor(kclus$cluster), lty = "dotted") 

enter image description here

+1

谢谢@EDi,那真是太好了。因此,为了澄清,您将聚类,然后建立一个相似性matirx。然后使用MDS将点定位在2D中,然后按照与群集的关系对点进行着色。辉煌。如果你有机会,你能解释一下它的作用:groups < - levels(factor(kclus $ cluster)) – slotishtype

+1

请参阅我的编辑。组只是一个包含组名的对象,仅用于for循环。 – EDi

+0

好的,我看到你的编辑。最后一个问题,你可以将距离矩阵聚类,还是这个疯狂的举动?对不起,现在正在学习,只是通过事情的方式工作。 – slotishtype

0

在这里你可以找到一个图来分析聚类结果, “坐标图”, “clusplot” 包内。

它不基于PCA。它使用函数缩放来使所有变量的含义在0到1的范围内,因此您可以比较哪个群集可以保存每个变量的最大/最小平均值。

install.packages("devtools") ## To be able to download packages from github 
library(devtools) 
install_github("pablo14/clusplus") 
library(clusplus) 

## Create k-means model with 3 clusters 
fit_mtcars=kmeans(mtcars,3) 

## Call the function 
plot_clus_coord(fit_mtcars, mtcars) 

This post解释了如何使用它。