为什么R和Matlab中的差异统计结果不同?

时间:2018-12-12 06:25:09

标签: r matlab cluster-analysis

我试图放入相同的数据来进行缺口统计,并希望获得最佳的聚类数。为了检查结果的真实性,我尝试使用不同的程序RMatlab进行相同的测试。但是,RMatlab中的结果彼此不同。 R中的最佳簇数为40,但是Matlab中的最佳簇数为6。我试图检查每个参数,并对其进行调整以使所有参数相同,但仍然得到不同的结果。 / p>

还有一些我错过的细节吗?还是因为不同程序的结果不同? 很久以来我一直对此问题感到困扰。如果您能帮助我,我将非常感谢您。

这是输入数据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中绘制结果 enter image description here

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中绘制结果 enter image description here

我尝试更改Matlab中的聚类方法,并且最佳数仍为6。RMatlab中的结果图看起来非常相似。但是最佳簇数仍然不同。

1 个答案:

答案 0 :(得分:1)

我认为这是因为 MATLAB 中的 'firstMaxSE' 和 R 中的 'firstSEmax' 以不同的方式搜索最佳 k。

来自文档(https://uk.mathworks.com/help/stats/evalclusters.html#shared-criterionhttps://www.rdocumentation.org/packages/cluster/versions/2.1.0/topics/clusGap

'firstMaxSE' 在 MATLAB 中搜索第一个 k,使得 Gap(k)≥Gap(k+1)−SE(k+1) 得到满足。看看你的第一个情节,这似乎在 k=6 时满足。在 R 中,等效选项是“Tibs2001SEmax”而不是“firstSEmax”。

R中的“firstSEmax”搜索不小于第一个局部最大值减去相应SE因子的第一个值的位置。第一个局部最大值出现在 k 范围内远晚于 6,因此“firstSEmax”返回 40 作为最佳聚类数。

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