0

我有这个可爱的密度图。 在此处输入图像描述

这显示了我想要的结果,蓝色集群完全从其余数据中脱落。我使用以下代码创建了这个图:

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(只有点,没有彩色标签)。我相信如果没有峰值,这是无效的。但是,我无法知道已知集群的峰值是什么。

我认为答案在代码的前面。

4

1 回答 1

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)

这给了我下面的情节,这正是我想要的。在此处输入图像描述

看起来一团糟!但这就是目标。

于 2017-11-29T20:51:58.020 回答