我正在尝试执行Kolmogorov-Smirnov测试,以比较经验分布和F分布(我知道不能直接比较这些分布,但我将采用自举法)。我的科学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数组的问题,但是文档说它可以采用一维数组,所以不确定为什么我会有这个问题。另外,有趣的是,您可以使用“ norm”来命名正态分布,但是“ f”似乎无效,尽管它是F分布的俗称。

最佳答案

the docs


  cdf:str或可调用
  
  如果是字符串,则应为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)

关于python - TypeError:ndarray在scipy.stats.kstest()中不可调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37424877/

10-09 12:31