【发布时间】:2021-03-10 05:22:10
【问题描述】:
我正在使用 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 中的输出匹配。
我尝试使用 cluster 包中的 agnes() 函数运行分析,这再次导致了与 SPSS 甚至 hclust() 相比的不同结果(但我猜这是另一篇文章的主题)。
程序/包之间的底层聚类过程是否不同?还是我忽略了一个关键细节?是否有一个“正确”的程序可以复制 SPSS 中产生的结果?
【问题讨论】:
-
也许你可以尝试交叉验证:stats.stackexchange.com
标签: r spss hierarchical-clustering hclust