比较Matlab和Apache统计-峰度

比较Matlab和Apache统计-峰度,apache,matlab,statistics,kurtosis,Apache,Matlab,Statistics,Kurtosis,您好,我目前正在比较Matlab和Apache函数之间的统计数据。 这里用Java测试Apache函数。 对于同一组数据,我从双数组(double[])中得到不同的结果,如下所示: --------------------------------------- Matlab vs Apache --------------------------------------- max = 0.5451 vs 0.5450980392156862

您好,我目前正在比较Matlab和Apache函数之间的统计数据。 这里用Java测试Apache函数。 对于同一组数据,我从双数组(double[])中得到不同的结果,如下所示:

---------------------------------------
           Matlab       vs Apache
---------------------------------------
max      = 0.5451       vs 0.5450980392156862
min      = 0.4941       vs 0.49411764705882355
var      = 5.4154e-05   vs 5.415357603461868E-5
std      = 0.0074       vs 0.007358911334879547
mean     = 0.5206       vs 0.5205525290240967
kurtosis = 3.3442       vs 0.35227427833465486
skewness = 0.2643       vs 0.26466432504210746
我反复检查我的数据,Matlabs中的每个值都与Java中使用的值相同。 这里我们可以看到,除了峰度,所有的统计数据都是相同的

峰度的计算是否可能不同于Matlab和Apache库? 如果是,那么我应该信任哪些数据


编辑 我的数据是图像矩阵的子集(包含像素值)。 对于每个子集,我计算上述统计信息。每次,除了峰度,所有的统计数据都完全匹配

用于计算我的子集峰度的matlab代码如下所示:

kurtosis( sub(:) ); // sub is a n x m matrix
而我在Java中使用的是:

import org.apache.commons.math3.stat.descriptive.moment.Kurtosis;
// ...
Kurtosis kurt = new Kurtosis();
System.out.println("-kurtosis: " + kurt.evaluate(subImg) );

subImg是一个双[n x m]数组。

您也可以通过导入函数在Matlab中计算Apache Java统计信息。Apache函数使用了一个无偏估计值。峰度意味着减去3,使正态分布的峰度等于零

为了演示它,我还利用函数()制作了一个Matlab函数:

以及命令窗口中显示Matlab Apache实现、Java Apache实现和Matlab版本(biassed/unbiassed)的代码:

ans=0.0016

kurt = Kurtosis();
kurt.evaluate(x)
ans=0.0016

kurtosis(x)
ans=3.0010

kurtosis(x,0)
ans=3.0016

kurtosis(x)
还请注意:

因此,使用0标志时,无偏Matlab实现与Apache版本完全相同,即减去3使其成为多余的峰度。

(kurtosis(x,0)-3)-kurt.evaluate(x)

ans=3.8636e-14

您好,谢谢您的回复!你说的我真的很懂!至少我想我明白了。因此,我想澄清一下。我将值放入数组x中。在matlab中:峰度(x,0)-3=4.9969。使用Apache:kurtosis.evaluate(x)=4.99689,这是一致的。因此,如果我想在Java中获得matlab峰度(x,1),我只需要幼稚地操作matlab k0方程,结果是:双k1=1/(n-1)*[((峰度。评估(x)*(n-2)*(n-3))/(n-1))+3*(n-1)],但是我发现k1=4.87,而matlab峰度(x,1)=3.24。我的错误在哪里?我很困惑。如果我把方程中的值3放回去((峰度,求值(x)-3)…那么我得到k1=3.7488,这更接近于你向我解释的内容,但不合逻辑。。参考资料:x=[1234354346];Try n=长度(x);k0=kurt.评价(x)+3;k1=(6*k0+9*n-5*k0*n+k0*n^2-15)/(n^2-1)我试过了。结果与matlab数据完全匹配,非常感谢!你在哪里/怎么找到这个公式的?我有点懒:syms k0 k1 n,solve('k0==((n-1)*(k1*(n+1)-3*n+3))/((n-2)*(n-3))+3',k1)
(kurtosis(x,0)-3)-kurt.evaluate(x)