Rclusterpp.hclust在使用cutree时不能提供正确的簇

Rclusterpp.hclust在使用cutree时不能提供正确的簇,r,cluster-analysis,hierarchical-clustering,R,Cluster Analysis,Hierarchical Clustering,我有一个相当大的数据集,大约有75000个观察值和7列,其中包含报警数据详细信息,stats:hclust无法支持(崩溃RStudio)。通过几次搜索,我找到了Rclusterpp.hclust,据说它可以降低分层聚类的复杂性和资源分配,所以我尝试了一下。它大约需要5分钟左右的时间,并且确实提供了一个树状图,但是如果我尝试使用cutree并指定高度或簇数,我会得到奇怪的结果。当使用38个观察值的小样本时,我看到了同样的问题,如下所示。我是否做错了什么,或者这是Rclusterpp.hclust包

我有一个相当大的数据集,大约有75000个观察值和7列,其中包含报警数据详细信息,
stats:hclust
无法支持(崩溃
RStudio
)。通过几次搜索,我找到了
Rclusterpp.hclust
,据说它可以降低分层聚类的复杂性和资源分配,所以我尝试了一下。它大约需要5分钟左右的时间,并且确实提供了一个树状图,但是如果我尝试使用
cutree
并指定高度或簇数,我会得到奇怪的结果。当使用38个观察值的小样本时,我看到了同样的问题,如下所示。我是否做错了什么,或者这是Rclusterpp.hclust包的问题?(运行R3.4.1中的包3.4.1)

示例数据集如下所示:

dataset
#   DAY COUNT LOCATION M1 M2 HOURS SOURCE
#1  238     2   222307  1  1  5437   1008
#2  238     1   222307  2  1  5437   1008
#3  238     5   222307  3  2  5437   1008
#4  238     2   222307  4  3  5437   1008
#5  238    14   222307  5  1  5437   1008
#6  238     4   222307  5  1  5437   1008
#7  238    14   222307  6  2  5437   1008
#8  238     3   222307  1  1  5437   1008
#9  238     1   222307  2  1  5437   1008
#10 238     1   222307  4  3  5437   1008
#11 238     2   222307  4  3  5437   1008
#12 238     2   222307  4  3  5437   1008
#13 238     5   222307  5  1  5437   1008
#14 238    11   222307  5  1  5437   1008
#15 238     1   222307  5  1  5437   1008
#16 238     3   222307  5  1  5437   1008
#17 238    18   222307  6  2  5437   1008
#18 238     2   222307  7  4  5437      9
#19 238     2   222307  8  4  5437     10
#20 238     3   222307  9  5  5437   1008
#21 238     2   222307 10  6  5437    865
#22 238     9   222307 11  7  5437     10
#23 238     2   222307 12  7  5437     10
#24 238     1   222307 12  7  5437     10
#25 238     5   222307 11  7  5437     10
#26 238     2   222307  8  4  5437     10
#27 238     3   222307 13  8  5437    864
#28 238     3   222307 14  8  5437    864
#29 238     1   222307 11  7  5437     10
#30 238     3   222307 11  7  5437     10
#31 238     2   222307 15  7  5437     10
#32 238     5   222307 11  7  5437     10
#33 238     2   222307 16  7  5437     10
#34 238     2   222307 17  7  5437     10
#35 238     3   222307 18  7  5437     10
#36 238     2   222307 15  7  5437     10
#37 238     6   222307 11  7  5437     10
#38 238     3   222307 19  7  5437     10
小时
计数
是真实的数字值,而
位置
M1
M2
是数字编码的分类值

使用stats:hclust,我可以得到一个能够很好地表示数据的聚类,并且能够按照预期在该样本的所有观测值中区分两个主要的报警事件聚类(即,树状图中的观测值是应分组在一起的报警):


知道为什么会这样吗?谢谢。

我对此进行了一些研究,发现
Rclusterpp.hclust
的返回值没有与
stats'
hclust
完全对齐(请注意
merge
矩阵)

hclust
的文档中,返回列表的
merge
组件是:

n-1乘2的矩阵。合并的第一行描述了在聚类的第一步合并集群。如果行中的元素j为负值,则在该阶段合并了观测值-j。如果j为正,则合并是与算法(早期)阶段j形成的簇合并。因此,merge中的负条目表示单体的聚集,而正条目表示非单体的聚集

对于
C
实现的
cutree
,括号中的单词(
前面的
)似乎很重要

查看
头(hc2$merge)
,我们可以看到以下内容:

     [,1] [,2]
[1,]   -2   -9
[2,]  -25  -32
[3,]  -31  -36
[4,]  -19  -26
[5,]   -4    6
[6,]  -11  -12
因此在第五行,有一个指向第六步的“指针”,它朝着一个意外的方向前进

相反,如果我们重新安排
merge
组件(交换行和“指针”),事情看起来没问题:

# non-generic replacements for specific data example
hc3 <- hc2
hc3$merge[5, ] <- c(-11,-12)
hc3$merge[6, ] <- c(-4,5)
hc3$merge[13, ] <- c(-10,6)
cutree(hc3, 2)
#特定数据示例的非通用替换
氯化氢
     [,1] [,2]
[1,]   -2   -9
[2,]  -25  -32
[3,]  -31  -36
[4,]  -19  -26
[5,]   -4    6
[6,]  -11  -12
# non-generic replacements for specific data example
hc3 <- hc2
hc3$merge[5, ] <- c(-11,-12)
hc3$merge[6, ] <- c(-4,5)
hc3$merge[13, ] <- c(-10,6)
cutree(hc3, 2)