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