3

scipy (scipy.stats.kstest) で Kolmogorov-Smirnov 検定を使用するのに問題があります。オンライン ドキュメント (http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html) には、scipy の 1 つに名前を付けるオプションと比較するためのサンプル、cdf が必要であると書かれています。 .stats 分布、cdf 引数 (およびいくつかのオプション値)

選択した累積分布関数が追加の引数を必要としない限り、すべて問題ないように見えます

teststat,pval=stats.kstest(sample,'norm')

(ここで、サンプルは値のリストです。)ただし、t、chisquaredなど、追加の引数を必要とする他のディストリビューションでは機能しません。それ以上の引数が与えられていない場合、それは正しく抗議します

teststat,pval=stats.kstest(sample,'t')

TypeError: _cdf() takes exactly 3 arguments (2 given)

引数が与えられた場合、

teststat,pval=stats.kstest(sample,'t',24)

それは文句を言う

TypeError: cdf() argument after * must be a sequence, not int

これが何を意味するのか正確にはわかりませんが、int 24 ではなく、1 つの int のシーケンス (24) が必要なようです。でも:

teststat,pval=stats.kstest(sample,'t',24)

TypeError: cdf() argument after * must be a sequence, not int

ディストリビューションを手動で定義しても、これが呼び出し可能であるとは感じられないため、より良い結果は得られません。

numargs = stats.t.numargs
[ df ] = [0.9,] * numargs
rv = stats.t(df)
teststat,pval=stats.kstest(sample,stats.t.cdf(numpy.linspace(0, numpy.minimum(rv.dist.b, 3)),df))

TypeError: 'numpy.ndarray' object is not callable

機能させるにはどうすればよいですか?(Google で kstest 関数またはさまざまなエラー メッセージを検索しても、この質問に答えるのに役立つ情報は何も見つかりません。)

ありがとう

4

1 に答える 1

2

このエラーを見る:

TypeError: cdf() argument after * must be a sequence, not int

あなたが正しいと思うようになり、整数ではなくシーケンスが必要です。ドキュメントは言う

args : tuple, sequence
    distribution parameters, used if rvs or cdf are strings

うまくいくようです:

>>> import scipy.stats
>>> sample = scipy.stats.t(1).rvs(size=10**6)
>>> scipy.stats.kstest(sample, 't', (1,))
(0.0006249662221899932, 0.82960203415652445)

またはより明示的に:

>>> scipy.stats.kstest(sample, 't', args=(1,))
(0.0006249662221899932, 0.82960203415652445)
于 2012-08-27T04:46:51.137 に答える