2

私は統計トピックの初心者なので、ここで見逃しているのは明らかなことかもしれません。

基本的に、Apache Commons Mathの統計テストdoubleに基づいて、整数値の配列 (ヒストグラム) が正規分布(平均と標準偏差が指定されている) に適合しているかどうかを調べたいと思います。

私がすでに理解していることは、一般的な方法はp 値を計算し、帰無仮説が真かどうかを判断することです。

私の最初の「赤ちゃん」ステップは、一元配置分散分析テストを使用して、2 つの配列が同じ分布から来ているかどうかを確認することです (2 番目の部分は、ドキュメントの例から取得されます)。

double samples1[] = new double[100];
double samples2[] = new double[100];

Random rand = new Random();
for (int i = 0; i < 100000; i++) {
    int index1 = (int) (rand.nextGaussian()*5 + 50);
    int index2 = (int) (rand.nextGaussian()*5 + 50);
    try {
        samples1[index1-1]++;
    }
    catch (ArrayIndexOutOfBoundsException e) {}
    try {
        samples2[index2-1]++;
    }
    catch (ArrayIndexOutOfBoundsException e) {}
}

List classes = new ArrayList<>();
classes.add(samples1);
classes.add(samples2);

double pvalue = TestUtils.oneWayAnovaPValue(classes);
boolean fail = TestUtils.oneWayAnovaTest(classes, 0.05);

System.out.println(pvalue);
System.out.println(fail);

結果は次のとおりです。

1.0
false

有意水準が 0.05 であると仮定すると、仮説は真である (つまり、両方の配列が同じ分布からのものである) と推測できますp > 0.05

では、コルモゴロフ・スミルノフ検定を見てみましょう。ドキュメントのサンプルコードは、オブジェクトに対して単一の配列をチェックする方法を示していNormalDistributionます (それが私の目標です)。ただし、2 つの配列をチェックすることもできます。どちらの場合も適切な結果が得られません。たとえば、上記の例を KS に適用してみましょう。

double samples1[] = new double[100];
double samples2[] = new double[100];

Random rand = new Random();
for (int i = 0; i < 100000; i++) {
    int index1 = (int) (rand.nextGaussian()*5 + 50);
    int index2 = (int) (rand.nextGaussian()*5 + 50);
    try {
        samples1[index1-1]++;
    }
    catch (ArrayIndexOutOfBoundsException e) {}
    try {
        samples2[index2-1]++;
    }
    catch (ArrayIndexOutOfBoundsException e) {}
}

double pvalue = TestUtils.kolmogorovSmirnovTest(samples1, samples2);
boolean fail = pvalue < 0.05;

System.out.println(pvalue);
System.out.println(fail);

結果は次のとおりです。

7.475142727031425E-11
true

私の質問は、なぜ本質的に同じデータの p 値が非常に小さいのですか? このようなデータにはこのテストは適していないということですか。

するべきか:

  • (つまり、指定された平均値と標準偏差を使用して)の参照配列を生成NormalDistributionし、一元配置分散分析テスト (またはその他) を使用して配列と比較します。
  • どういうわけか私のデータを適応させてから、KSを使用して単一の配列をNormalDistributionオブジェクトと比較します

?

4

0 に答える 0