web-dev-qa-db-ja.com

Python Scipyの2サンプルコルモゴロフスミルノフテスト

Scipyで2サンプルKSテストを行う方法を理解できません。

ドキュメントを読んだ後 scipy kstest

分布が標準正規分布と同一である場所をテストする方法を見ることができます

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テストを行う方法はありますか?その場合、どうすればよいですか?

前もって感謝します

58
Akavall

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. サンプルサイズに応じて、pythonで指定されたstatisticの値を KS-test臨界値テーブル と比較できます。statisticの値が臨界値より大きい場合、 2つの分布は異なります。

  2. または、p-valueを有意水準a、通常a = 0.05または0.01(aが低いほど重要です)。 p値がaよりも低い場合、2つの分布が異なる可能性が非常に高くなります。

91
DSM

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

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

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

1
jun 小嘴兔