使用已知标签重新创建密度群集MDS

时间:2017-11-28 22:35:28

标签: r label clustered-index density-plot mds

我有这个可爱的密度情节。 enter image description here

这显示了我想要的,蓝色群集从其余数据中干净地掉出来。我用以下代码创建了这个图:

library(densityClust)
nbhf_dist=dist(StrongGMM[,6:10])
NB_den_clus=densityClust(nbhf_dist, gaussian=TRUE)
plot(NB_den_clus)
NBClust <- findClusters(NB_den_clus, rho=5, delta=5)
plotMDS(NBClust)

rho和delta由决策图(NB_den_clus)确定。所有这一切都很完美。

我的问题是我想用不同的标签重新创建这个密度图。我试图查看我的数据收集的位置是否严重影响了这些集群。

对于最终的聚类发现,这是输出:

> str(NBClust)
List of 8
 $ rho      : num [1:1064] 6.46 2 4.12 5.97 14.47 ...
 $ delta    : num [1:1064] 0.771 0.478 1.178 0.953 2.292 ...
 $ distance :Class 'dist'  atomic [1:565516] 4.2 2.61 25.07 25.48 20.04 ...
  .. ..- attr(*, "Size")= int 1064
  .. ..- attr(*, "Diag")= logi FALSE
  .. ..- attr(*, "Upper")= logi FALSE
  .. ..- attr(*, "method")= chr "euclidean"
  .. ..- attr(*, "call")= language dist(x = StrongGMM[, 6:10])
 $ dc       : num 1.9
 $ threshold: Named logi [1:2] 5 5
  ..- attr(*, "names")= chr [1:2] "rho" "delta"
 $ peaks    : int [1:3] 441 416 1021
 $ clusters : int [1:1064] 3 3 3 1 1 2 2 2 2 2 ...
 $ halo     : logi [1:1064] FALSE FALSE FALSE TRUE TRUE TRUE ...
 - attr(*, "class")= chr "densityCluster"

无论如何将已知标签应用于我的原始密度簇距离矩阵,而不是密度聚类函数生成的聚类,并且仍然具有相同的MDS图?

如果我需要在任何时候澄清,请​​告诉我。我知道我没有提供重现的数据,但是现在我甚至不知道从哪里开始。我试图用我想要使用的标签替换NBClust $ clusters矢量,但这会产生一个空白的MDS(只是点,没有彩色标签)。我相信没有高峰,这是无效的。但是,我无法知道我的已知星团的峰值是什么。

我认为答案在代码中较早。任何想法都将不胜感激。

-etg

1 个答案:

答案 0 :(得分:0)

我回答了自己的问题,所以我想我会分享我学到的东西。

在densityClust包中,还有一个名为plotDensityClust的附加函数,它是一个附加功能。不是原作者,所以你可能需要从github重新下载包来访问它。此函数绘制密度簇对象的三个诊断图。它还具有其他功能,允许您指定您的MDS外观。

从上面,我拿了NBClust对象,用一个对应于我想要的标签的向量替换了$ cluster向量。然后我分配了颜色。

#Create new cluster list from old cluster list
StationClust=NBClust 
#Taking labels from previous dataframe.
facstations=as.factor(alles$juststa)
#Converting them to integers.
intstations=mapvalues(facstations, from = c("Station-1", "Station-2", "Station-20","Station-21", "Station-22","Station-24","Station-27-30","Station-3","Station-5","Station-6","Station-9", "Station-EK"), to = c(1,2,20,21,22,24,27,3,5,6,9,31))
#Create color list.
col=c("red", "blue", "green","purple","orange","cyan3", "gray","yellow","chocolate4", "darkred","darkgreen",  "hotpink")  
#Apply new clusters. 
StationClust$clusters=as.integer(intstations)
plotDensityClust(StationClust, col=col)

这给了我以下情节,这正是我想要的。enter image description here

看起来一团糟!但这就是目标。希望这可以帮助别人!

-etg