102

Scipyで2サンプルのKSテストを行う方法がわかりません。

ドキュメントを読んだ後scipykstest

分布が標準正規分布と同一である場所をテストする方法がわかります

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
test_stat = kstest(x, 'norm')
#>>> test_stat
#(0.021080234718821145, 0.76584491300591395)

つまり、p値が0.76の場合、2つの分布が同一であるという帰無仮説を棄却することはできません。

ただし、2つの分布を比較して、次のように、それらが同一であるという帰無仮説を棄却できるかどうかを確認したいと思います。

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
z = np.random.normal(1.1,0.9, 1000)

xとzが同一かどうかをテストします

私は素朴なものを試しました:

test_stat = kstest(x, z)

次のエラーが発生しました:

TypeError: 'numpy.ndarray' object is not callable

Pythonで2サンプルのKSテストを行う方法はありますか?もしそうなら、私はそれをどのようにすべきですか?

前もって感謝します

4

2 に答える 2

145

1サンプルのKSテストを使用しています。あなたはおそらく2サンプルのテストが必要です ks_2samp

>>> from scipy.stats import ks_2samp
>>> import numpy as np
>>> 
>>> np.random.seed(12345678)
>>> x = np.random.normal(0, 1, 1000)
>>> y = np.random.normal(0, 1, 1000)
>>> z = np.random.normal(1.1, 0.9, 1000)
>>> 
>>> ks_2samp(x, y)
Ks_2sampResult(statistic=0.022999999999999909, pvalue=0.95189016804849647)
>>> ks_2samp(x, z)
Ks_2sampResult(statistic=0.41800000000000004, pvalue=3.7081494119242173e-77)

結果は次のように解釈できます。

  1. サンプルサイズに応じてstatistic、Pythonで指定された値をKSテストの臨界値テーブルと比較することができます。statistic値が臨界値よりも高い場合、2つの分布は異なります。

  2. p-valueまたは、を有意水準a比較することもできます。通常、a = 0.05または0.01です(aが低いほど、有意であると判断します)。p値がaより小さい場合、2つの分布が異なる可能性が非常に高くなります。

于 2012-06-04T16:32:07.023 に答える
7

これはscipyのドキュメントが言うことです:

KS統計が小さいか、p値が高い場合、2つのサンプルの分布が同じであるという仮説を棄却することはできません。

拒否できないということは、確認するという意味ではありません。

于 2017-05-02T07:55:53.680 に答える