为什么R和Matlab中的间隙统计结果不同



我试图放置相同的数据来进行差距统计,并希望获得最佳的集群数量。为了检验结果的真实性,我尝试使用不同的程序RMatlab进行相同的测试。然而,RMatlab中的结果彼此不同。R中的最佳簇数为40,而Matlab中的最优簇数为6。我试着检查每个参数并调整它们,使所有参数都相同,但仍然得到不同的结果。

还有一些细节我遗漏了吗?还是不同项目的不同结果是有原因的?这个问题困扰了我很长时间。如果你能帮助我,我将非常感谢你。

这是输入数据gaptest,聚类方法是pam

X1          X2
1   0.6351928  -0.7824029
2   0.6401326  -0.7919060
3   0.6427007  -0.7968948
4   0.6558318  -0.8229245
5   0.6566169  -0.8245088
6   0.6680986  -0.8480393
7   0.6782454  -0.8693981
8   0.6796789  -0.8724580
9   0.7115760  -0.9431477
10  0.7133614  -0.9472431
11  0.7296727  -0.9852485
12  0.8195850  -1.2030732
13  0.8470816  -1.2677628
14  0.8491237  -1.2724711
15  0.9787868  -1.5406940
16  1.0200572  -1.6149679
17  1.0680393  -1.6964657
18  1.0776983  -1.7123423
19  1.0944731  -1.7395482
20  1.0968986  -1.7434456
21  1.1069733  -1.7595397
22  1.1134140  -1.7697527
23  1.1464978  -1.8213617
24  1.2733486  -2.0097707
25  1.3603164  -2.1343635
26  1.5108690  -2.3507509
27  1.7984058  -2.8258020
28  1.8317105  -2.8951666
29  1.9689162  -3.3205491
30  1.9830438  -3.6912299
31  1.8931125  -4.0746001
32  7.0844451 -12.5712374
33  7.0636832 -12.5987628
34  6.9238601 -12.7901880
35  6.8664584 -12.8743234
36  6.8151738 -12.9560336
37  7.1884836 -12.8093261
38  7.4338566 -12.6135888
39  7.6658285  -8.5133002
40  7.6070872  -8.4042949
41  7.6053719  -8.4004027
42  8.3855195  -8.0055749
43  8.5990981  -8.0174662
44 10.3757387  -8.3280635
45 10.4124935  -8.3389941
46 10.4836669  -8.3608685
47 10.8223695  -8.4792392
48 10.9421194  -8.5275618

matlab中的代码

myfunc=@(x,k) kmedoids(x,k,'Algorithm','pam','Start','sample');
gap1=evalclusters(gaptest,myfunc,'gap','KList',[1:length(gaptest)],'B',200,'SearchMethod','firstMaxSE','ReferenceDistribution','PCA');

Matlab中的绘图结果在此处输入图像描述

R中的代码

clusGap(gaptest,pam,K.max=47,B=200,verbose=TRUE)

导致R

clusGap(x = gaptest, FUNcluster = pam, K.max = 47, B = 200, verbose = TRUE)
B=200 simulated reference sets, k = 1..47; spaceH0="scaledPCA"
--> Number of clusters (method 'firstSEmax', SE.factor=1): 40

R中的绘图结果在此处输入图像描述

我尝试在Matlab中更改聚类方法,但最优数量仍然是6。CCD_ 15和CCD_。但集群的最佳数量仍然不同。

我认为这是因为MATLAB中的"firstMaxSE"和R中的"第一SEmax"以不同的方式搜索最优k。

从文档中(https://uk.mathworks.com/help/stats/evalclusters.html#shared-标准和https://www.rdocumentation.org/packages/cluster/versions/2.1.0/topics/clusGap)

MATLAB中的"firstMaxSE"搜索第一个k,使得Gap(k(≥Gap(k+1(−SE(k+1。看看你的第一个情节,在k=6时,这似乎是令人满意的。在R中,等价的选项是"R";Tibs2001SEmax";而不是";第一SEmax";。

"第一SEmax";在R中搜索不小于第一局部最大值减去相应SE因子的第一值的位置。第一局部最大值在k范围内出现得比6晚得多;第一SEmax";返回40作为簇的最佳数目。

这些选项的名称可能有点令人困惑,因为它们听起来几乎相同,但指的是不同的东西。如果您尝试使用";Tibs2001SEmax";在R中,我认为您的结果可能与MATLAB的输出一致。

相关内容

  • 没有找到相关文章

最新更新