5

明らかな何かが欠けているのでしょうか、それとも Matlab のpkstest2値が非常に悪いのでしょうか? 非常に悪いとは、それが間違って実装されているという疑いがあることを意味します。

ヘルプページにkstest2は、関数が漸近p値を計算すると記載されていますが、どのメソッドが正確に使用されているかについての参照は見つかりませんでした。とにかく、説明はさらに述べています:

漸近p値は、サンプル サイズが大きい場合に非常に正確になり、(n1*n2)/(n1 + n2) ≥ 4 のように、サンプル サイズ n1 および n2 の場合はかなり正確であると考えられます。


例 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');

(n1*n2)/(n1 + n2) = 4この場合、p値は適度に正確である必要があります。

p = 0.0497本で与えられた解決策は ですが、Matlab は をもたらし0.0870ます。ソリューションを検証するために、R を使用しました。R は、特に統計において、Matlab よりも信頼しています。

ks.testfromstatsパッケージとks.bootfromパッケージの使用Matching:

ks.test(sampleA, sampleB, alternative = "two.sided")
ks.boot(sampleA, sampleB, alternative = "two.sided")

どちらも を与え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);

これにより が得られp = 0.0317ます。ここで、同じx1x2ベクトルを使用すると、R は を与えp = 0.03968ます。非常に正確な結果が期待される場合、約 20% の差(n1*n2)/(n1 + n2) = 25

私は行方不明ですか、何かを台無しにしていますか? 例が示すように、Matlab のkstest2パフォーマンスが非常に悪い可能性はありますか? アルゴリズムkstest2はどのような近似を使用していますか? (kstest2 に実装されたコードを見ることができますが、何が起こっているのかを理解するには、本や紙を参照する方がはるかに良いでしょう。)

Matlab 2016a を使用しています。


リーマンとダブレラ (1975)。ノンパラメトリック: ランクに基づく統計手法。第1版。スプリンガー。

4

1 に答える 1

4

MATLAB または Octaveの R と比較する正しいテストは次のようになると思います。ks.testkolmogorov_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)

pval: 0.0878664

違いはksvsの使用にあるlambdaようです。

ks   = sqrt (n) * d;
pval = 1 - kolmogorov_smirnov_cdf (ks);

lambda =  max((sqrt(n) + 0.12 + 0.11/sqrt(n)) * d , 0);
pval = 1 - kolmogorov_smirnov_cdf (lambda);

この 2 つの機能が引用する研究論文の違いから、異なる検定統計量が生じるのではないかと推測しています。統計理論を深く掘り下げたい場合は、CrossValidatedに連絡してください。

于 2016-08-13T16:42:03.537 に答える