我正在使用Ward的方法对包含1000个观察值和37个变量(均为5点likert标度)的数据集进行层次聚类分析。
首先,我在SPSS中通过
CLUSTER Var01 to Var37
/METHOD WARD
/MEASURE=SEUCLID
/ID=ID
/PRINT CLUSTER(2,10) SCHEDULE
/PLOT DENDROGRAM
/SAVE CLUSTER(2,10).
FREQUENCIES CLU2_1.我还在R中执行了分析:
datA <- subset(dat, select = Var01:Var37)
dist <- dist(datA, method = "euclidean")
hc <- hclust(d = dist, method = "ward.D2")
table(cutree(hc, k = 2))由此产生的集群大小为:
1 2
SPSS 712 288
R 610 390这些结果显然让我感到困惑,因为它们在本质上是不同的(当观察树状图时,这一点变得非常明显;也适用于3-10个簇的解决方案)。如果我没记错的话,"ward.D2"考虑了平方距离,所以我在这里包含了简单的距离矩阵。然而,我尝试了几种(组合)的距离和聚类方法,例如EUCLID而不是SEUCLID,将R中的距离矩阵平方,应用"ward.D"方法,...我还查看了SPSS和R生成的距离矩阵,它们是相同的(当应用相同的方法时)。最终,我从我的数据中排除了重复的情况(N=29),猜测这些情况可能是在某个点(随机)分配时造成的差异。所有这些都没有在R和SPSS中产生匹配的输出。
我尝试使用cluster包中的agnes()函数运行分析,结果与SPSS甚至hclust()的结果又一次不同(但我想这是另一篇文章的主题)。
程序/包之间的底层集群过程是否不同?还是我忽略了一个关键的细节?是否有一个“正确”的过程来复制在SPSS中产生的结果?
发布于 2020-12-10 06:09:51
如果距离矩阵是相同的,合并方法也是相同的,那么唯一应该产生不同结果的事情就是在两个算法中以不同的方式处理平局距离。连接距离可能存在于原始全距离矩阵中,也可能出现在连接过程中。如果一个程序搜索矩阵并在该步骤找到两个或更多与最小值相关的距离,并且它选择第一个距离,而另一个程序选择最后一个距离,或者一个或两个程序从关系中随机选择一个,则可能会出现不同的结果。
我建议从一个小示例开始,将一些随机性添加到值中,以使平局距离变得不太可能,并查看两个程序是否对这些数据产生匹配的结果。如果不是,就有一个更深层次的问题。如果是这样,那么平局处理可能是问题所在。
https://stackoverflow.com/questions/65037122
复制相似问题