r - 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 中产生的结果?
解决方案
如果距离矩阵相同并且合并方法相同,那么唯一应该产生不同结果的就是在两种算法中以不同方式处理绑定距离。绑定距离可能存在于原始全距离矩阵中,或者可能出现在连接过程中。如果一个程序搜索矩阵并找到两个或多个在该步骤中以最小值绑定的距离,并选择第一个,而另一个程序选择最后一个,或者一个或两个从关系中随机选择一个,则不同结果可能发生。
我建议从一个小例子开始,将一些随机数据添加到值中,以使绑定距离不太可能,看看这两个程序是否会在这些数据上产生匹配的结果。如果没有,那就是更深层次的问题。如果是这样,那么领带处理可能是问题所在。
推荐阅读
- r - Good K/M/G abbreviation of y scale labels in ggplot2
- javascript - 重新打开页面后未执行Javascript onclick
- xml - Replacing multiple strings with data solely from a CSV file
- javascript - Angular Material datepicker自定义日期(开始和结束日期)验证问题
- xamarin - I can't implement DisplayPrompt in my sample project
- reactjs - Reactjs为什么删除笔记(数组中的项目)会导致所有内容移动位置
- material-design - WebStorm 2019.3 中的 Bundled Material 主题在当前版本中无效
- html - 如何将 Mat Tooltip 位置调整到屏幕中心?
- jwt - 将属性从 ADFS 同步到 Azure AD 自定义应用程序
- java - 根据条件分组/不同列