Arp*_*rpi 5 statistics matlab r hypothesis-test kolmogorov-smirnov
我是否遗漏了一些明显的东西,或者Matlab kstest2给出了非常差的p值?在非常贫困的情况下,我是说我怀疑它甚至被错误地实施。
kstest2状态的帮助页面,该函数计算渐近p值,尽管我没有找到有关确切使用哪种方法的任何参考。无论如何,该描述进一步指出:
对于大样本量,渐近p值变得非常精确,并且对于样本量n1和n2被认为是合理准确的,因此(n1 * n2)/(n1 + n2)?4
例子1
让我们以雷曼兄弟(Lehman and D'Abrera)(1975)的例子6为例:
sampleA = [6.8, 3.1, 5.8, 4.5, 3.3, 4.7, 4.2, 4.9];
sampleB = [4.4, 2.5, 2.8, 2.1, 6.6, 0.0, 4.8, 2.3];
[h,p,ks2stat] = kstest2(sampleA, sampleB, 'Tail', 'unequal');
Run Code Online (Sandbox Code Playgroud)
(n1*n2)/(n1 + n2) = 4在这种情况下,p值应合理准确。
Matlab p = 0.0497给出了结果,而书中给出的解决方案是0.0870。为了验证该解决方案,我使用了R,我比Matlab更信任R,尤其是在统计方面。
使用ks.testfrom stats软件包和ks.bootfrom Matching软件包:
ks.test(sampleA, sampleB, alternative = "two.sided")
ks.boot(sampleA, sampleB, alternative = "two.sided")
Run Code Online (Sandbox Code Playgroud)
两者都给p = 0.0870。
例子2
让我们使用kstest2自己的示例比较较大样本量的Matlab和R结果:
rng(1); % For reproducibility
x1 = wblrnd(1,1,1,50);
x2 = wblrnd(1.2,2,1,50);
[h,p,ks2stat] = kstest2(x1,x2);
Run Code Online (Sandbox Code Playgroud)
这产生了p = 0.0317。现在,使用R x1和x2向量R给出p = 0.03968。当预期非常准确的结果时,相差约20%(n1*n2)/(n1 + n2) = 25。
我想念东西吗?kstest2如示例所示,Matlab的性能是否有可能表现不佳?算法kstest2使用什么近似值?(我可以看到kstest2的实现代码,但是,参考书本或论文会更好地了解正在发生的情况。)
我正在使用Matlab 2016a。
雷曼和达布雷拉(1975)。非参数:基于等级的统计方法。第一版。施普林格。
我认为在 MATLAB 或 Octave 中与 R 进行比较的正确测试ks.test是kolmogorov_smirnov_test_2:
sampleA = [6.8, 3.1, 5.8, 4.5, 3.3, 4.7, 4.2, 4.9];
sampleB = [4.4, 2.5, 2.8, 2.1, 6.6, 0.0, 4.8, 2.3];
kolmogorov_smirnov_test_2(sampleA, sampleB)
Run Code Online (Sandbox Code Playgroud)
p值:0.0878664
区别似乎在于ksvs的使用lambda,即
ks = sqrt (n) * d;
pval = 1 - kolmogorov_smirnov_cdf (ks);
Run Code Online (Sandbox Code Playgroud)
相对
lambda = max((sqrt(n) + 0.12 + 0.11/sqrt(n)) * d , 0);
pval = 1 - kolmogorov_smirnov_cdf (lambda);
Run Code Online (Sandbox Code Playgroud)
我认为不同的测试统计数据源于这两个函数引用的研究论文的差异。如果您想更深入地了解统计理论,您可能需要联系CrossValidated。