我正在尝试执行Kolmogorov-Smirnov测试来比较经验分布与F分布(我知道这些不能直接比较,但我将采用自举)。我对scipy KS测试有问题:
readLengths = [list,of,int,values,...]
x = stats.f.fit(readLengths)
dfn=x[0]
dfd=x[1]
stats.kstest(readLengths,stats.f.rvs(dfn,dfd,size=100))
我收到错误
TypeError: 'numpy.ndarray' object is not callable
它指向stats.kstest行。我认为这是readLengths数组的一个问题,但文档说它可能需要1D数组,所以不知道为什么我遇到这个问题。此外,有趣的是,在此函数中,您可以使用'norm'命名正态分布,但'f'似乎无效,尽管它是F分布的scipy名称。
答案 0 :(得分:3)
来自the docs:
cdf :str或callable
如果是字符串,则应该是scipy.stats中的分发名称。如果rvs是一个字符串,则cdf可以是False或与rvs相同。如果是可调用的,则使用该可调用来计算cdf。
kstest
的第二个参数应该是字符串或可调用对象,它接受分位数作为输入并返回CDF。相反,你传递它
stats.f.rvs(dfn,dfd,size=100)
评估为np.ndarray
。
一种选择是使用您想要的参数构建一个冻结的PDF,然后将其.cdf
方法作为第二个参数传递给kstest
:
fdist = stats.f(dfn, dfd)
d, p = stats.kstest(readLengths, fdist.cdf)