首页 > 解决方案 > R 和 SPSS:层次聚类分析的不同结果

问题描述

我正在使用 Ward 方法对包含 1000 个观察值和 37 个变量(都是 5 点李克特量表)的数据集执行层次聚类分析。

首先,我通过 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 中的输出匹配。

我尝试使用包中的agnes()函数运行分析cluster,这再次导致与 SPSS 甚至不同的结果hclust()(但我猜这是另一篇文章的主题)。

程序/包之间的底层聚类过程是否不同?还是我忽略了一个关键细节?是否有一个“正确”的程序可以复制 SPSS 中产生的结果?

标签: rspsshierarchical-clusteringhclust

解决方案


如果距离矩阵相同并且合并方法相同,那么唯一应该产生不同结果的就是在两种算法中以不同方式处理绑定距离。绑定距离可能存在于原始全距离矩阵中,或者可能出现在连接过程中。如果一个程序搜索矩阵并找到两个或多个在该步骤中以最小值绑定的距离,并选择第一个,而另一个程序选择最后一个,或者一个或两个从关系中随机选择一个,则不同结果可能发生。

我建议从一个小例子开始,将一些随机数据添加到值中,以使绑定距离不太可能,看看这两个程序是否会在这些数据上产生匹配的结果。如果没有,那就是更深层次的问题。如果是这样,那么领带处理可能是问题所在。


推荐阅读