这显示了我想要的,蓝色群集从其余数据中干净地掉出来。我用以下代码创建了这个图:
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
答案 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)
看起来一团糟!但这就是目标。希望这可以帮助别人!
-etg