在R中有一种方法可以在维恩图中显示层次聚类

时间:2014-10-21 20:43:31

标签: r nvd3.js

我正在尝试将分层群集显示为维恩图或任何其他有用的显示 BESIDES 树形图。我希望能够以多种不同的视图类型显示我的数据。

目前这样做会绘制树形图:

x <- hclust(dist(mtcars))
plot(x)

如何显示 LOOKS 这样的群集图:

https://www.projectrhea.org/rhea/images/3/3b/Lecture23VennClusters_OldKiwi.jpg

或者

http://bl.ocks.org/mbostock/7607535

或在此示例中显示群集数据有意义的任何其他内容。

我希望能够在 Shiny 中执行此操作,但简单的R示例就足够了。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您显示的图是群集图。有不同的方法来制作这些图。这是一种方法。您可以根据需要更改符号或将其关闭,同样可以填充符号。此外,还有树形图绘制的选项,即here

library(cluster)

head(mtcars)
fit <- kmeans(mtcars, 3)  # 3 clusters
aggregate(mtcars, by=list(fit$cluster), mean)
newmtcars <- data.frame(mtcars, fit$cluster)
head(newmtcars)

# plot cluster solution
library(cluster)
clusplot(mtcars, fit$cluster, 
         color=TRUE, shade=TRUE, lines=0)

enter image description here

参考:http://www.statmethods.net/advstats/cluster.html       https://stats.stackexchange.com/questions/31083/how-to-produce-a-pretty-plot-of-the-results-of-k-means-cluster-analysis

我不确定维恩图与上述情节有何不同。也许需要重叠的群体。这取决于数据和树命令。可以尝试改变树命令,在这种情况下,kmeans,当选择迭代次数时显示小的重叠。

fit <- kmeans(mtcars, 3, iter.max = 2)  # 3 clusters, low number of iterations
clusplot(mtcars, fit$cluster, 
         color=TRUE, shade=FALSE, lines=0)

enter image description here

使用分层聚类执行此操作的一种方法是从树中提取组,然后在结果组上使用clusplot。

fit <- hclust(dist(mtcars))
groups <- cutree(fit, k=3)
clusplot(mtcars, groups[rownames(mtcars)], 
         color=TRUE, shade=FALSE, lines=0)

要查看树中包含更多剪切的数据段(包括层次树),一种方法是使用cut后跟clusplot

heir_tree_fit <- hclust(dist(mtcars))
for (ncut in seq(1,10)) {
  group <- cutree(heir_tree_fit, k=ncut)
  clusplot(mtcars, group[rownames(mtcars)], 
           color=TRUE, shade=FALSE, lines=0, main=paste(ncut,"cuts"))
}

以下是2次,6次和10次切割的数据

enter image description here

enter image description here

enter image description here

你可以制作一张包含所有剪辑的情节

par(new=FALSE)
for (ncut in seq(1,10)) {
  group <- cutree(heir_tree_fit, k=ncut)
  clusplot(mtcars, group[rownames(mtcars)], 
           color=TRUE, shade=FALSE, lines=0, xlim=c(-5,5),ylim=c(-5,5))
  par(new=TRUE)
}
par(new=FALSE)

enter image description here 制作层次聚类的维恩图的另一种方法是从树中提取组,然后在结果组上使用vennDiagram。

# To make a Venn diagram
# source("http://bioconductor.org/biocLite.R")
biocLite("limma")
library(limma)
inGrp1 <- groups==1
inGrp2 <- groups==2
inGrp3 <- groups==3
vennData <- cbind(inGrp1, inGrp2, inGrp3)

aVenn <- vennCounts(vennData)
vennDiagram(aVenn)

VennDiagramMTCAR