层次聚类:JMP & R 不同意当我使用 Ward 方法在 JMP 和 R 中对相同的数据集进行聚类时,我得到的结果是不相同的。R 提供了两个选项(ward.D 和 ward.D2),其中后者在对距离矩阵中的值进行聚类之前对它们进行平方。根据默塔和勒让德 (2014) ,这也是 JMP 所做的。 但即使我在 R 中指定 method="ward.D2",我得到的输出也有很大的不同:大约 15% 的观察结果与我从 JMP 得到的结果不匹配。
那么,问题 1:我期望相同的方法在 HCA 中产生相同的结果是错误的吗?我不希望在 k-means 聚类中(至少没有设置种子),但对于 HCA,结果在给定包内*内*是完全稳定的,所以我认为它们在*间*包内也应该是相同的。
问题 2:如果他们*应该*是一样的……为什么不一样?
- 可能性A:距离矩阵的计算方式不同
- 可能性 B:Ward 方法的实现方式有所不同
- 可能性 C:R 中的 cutree() 函数与 JMP 中的“选择簇数”函数不同
- 可能性 X... ???
我已经从 R 上传了树状图(如果那是糟糕的网络礼仪,请道歉!);通过仔细查看沿 x 轴的标签,您可以看到我正在谈论的问题。这些标签都以 1-5 的数字结尾,代表它们在 JMP 中分配到的集群的编号。如您所见,绿色组(“3”)是唯一一个在 JMP 和 R 之间完美 1:1 匹配的组。
感谢任何指导,-马特

分析回复:层次聚类:JMP 和 R 不同意嗯…… 我刚刚对 JMP 和 R 中的三个不同数据集进行了比较(没有使用“标准化数据”或“scale()”),并发现当使用相同数量的集群时,每个分类都完全匹配。我在 R 中指定的唯一方法是将“euclidean”用于“dist”函数,将“ward.D2”用于“hclust”函数。 您是否在 R 和/或 JMP 工作流程中指定了其他任何内容? 您的数据有多混乱(缺少...异常值...)?只是提供一些思考的食物......
回复:层次聚类:JMP 和 R 不同意好主意,但我不认为这是问题所在:因为我正在使用的数据集涉及的变量都在相同的范围内,所以我总是在 JMP 中取消选择“标准化数据”。 为了标准化 R 中的数据,必须使用 scale() 函数,而我从来没有这样做过。 据我所知,这两个包都应该在非标准化数据上运行。回复:层次聚类:JMP 和 R 不同意感谢您传递它;它让我意识到从 JMP 导出距离矩阵并将这些值与我在 R 中得到的距离矩阵进行比较是值得的!这将是缩小差异来源的一种方法。
回复:层次聚类:JMP 和 R 不同意感谢您的建议;很高兴知道如果我无法以其他方式解决此问题,可以选择将代码发送给技术团队。
要回答您的另一个问题,是的:每个包中的 HCA 结果是完全稳定的。
回复:层次聚类:JMP 和 R 不同意数据是否有可能在一个包中标准化,而不是在另一个包中? JMP 中的默认值是“标准化数据”。
回复:层次聚类:JMP 和 R 不同意这个线程也可能有助于距离矩阵:
https://community.jmp.com/t5/Discussions/which-distance-does-JMP-use-in-clustering/mp/275384#M53438
回复:层次聚类:JMP 和 R 不同意嗨 matthal_resear,
比较不同的包总是一个热门话题。 由于我无法查看 JMP 中的源代码,因此我无法检查您在第 2 点中提到的 JMP 和 R 之间的任何计算是否存在差异。 它们都参考了 Murtagh & Legendre (2014),但这并不意味着该算法以完全相似的方式实现。 尤其是算法的核心前后可能会有差异。 也在潜在的子程序中。 同样,由于无法检查完整的代码,因此无法回答这个问题。您可以尝试将您的问题发送给 JMP 的技术支持,提供有关您正在使用的 R-Package 的详细信息以及具体的例程。 有时有不止一个 R 函数可用。 然后他们可能有机会检查差异,而不是说他们会找到什么。
只是另一个想法。 HCA 包中的结果是否稳定? 还是它们略有不同? 这也是一个重要的信息。 最后,我将查看星座图以识别那里的差异。
只是我的2cents