我确信答案很简单,但我无法弄清楚我做错了什么。
我想测试一下我的一些样本数据是否可以来自广义极值或皮尔逊类型3分布。
出于某种原因,我无法让kstest(t1, 'genextreme')
合作。但是,当我将其更改为norm
时,它可以正常工作。
请参阅下面的部分代码和错误:
from scipy.stats import kstest
from scipy.stats import ks_2samp
import numpy as np
import csv
In [7]: from scipy.stats import genextreme
In [8]: t1 = TP['flow']
...: test_GEV = kstest(t1, 'genextreme')
...:
Traceback (most recent call last):
File "<ipython-input-8-ebc8faf10381>", line 2, in <module>
test_GEV = kstest(t1, 'genextreme')
File "/Applications/anaconda/lib/python2.7/site- packages/scipy/stats/stats.py", line 3585, in kstest
cdfvals = cdf(vals, *args)
File "/Applications/anaconda/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py", line 1642, in cdf
args, loc, scale = self._parse_args(*args, **kwds)
TypeError: _parse_args() takes at least 2 arguments (1 given)
In [9]: t1 = TP['flow']
...: test_GEV = kstest(t1, 'norm')
...:
In [10]: test_GEV
Out[10]: (0.99999925980208981, 0.0
因此它似乎适用于norm
但不适用于genextreme
...除了kstest()
之外,如何让norm
为其他发行版工作?
由于
答案 0 :(得分:0)
您必须传递 函数才能生成随机变量 - (kstest DocString)
所以对你的例子来说:
test_GEV = kstest(t1, scipy.stats.genextreme.rvs)
对于scipy_stats中的任何分发,请调用dist_name:
test_ks = kstest(your_array,scipy.stats.dist_name.rvs)
答案 1 :(得分:0)
genextreme
具有形状参数c
,因此您必须使用args
kstest
参数来完全定义分布。 genextreme
还具有所有scipy单变量分布所具有的标准loc
和scale
参数。如果不使用args
指定这些,则分别使用默认值0和1。您可以选择要对其c
进行测试的loc
分布的参数scale
,genextreme
和t1
。
要完全明确您正在使用的发行版,您应该使用类似的内容:
c = 1.0
loc = 0.0
scale = 1.0
test_GEV = kstest(t1, 'genextreme', args=(c, loc, scale))