类型错误:ndarray 无法在 scipy.stats.kstest() 中调用

Eth*_*han 5 python statistics numpy scipy

我正在尝试执行 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))
Run Code Online (Sandbox Code Playgroud)

我收到错误

TypeError: 'numpy.ndarray' object is not callable
Run Code Online (Sandbox Code Playgroud)

它指向 stats.kstest 行。我认为这是 readLengths 数组的问题,但文档说它可以采用一维数组,所以不确定为什么我会遇到这个问题。另外,有趣的是,在这个函数中,您可以用“norm”命名正态分布,但“f”似乎无效,尽管它是 F 分布的 scipy 名称。

ali*_*i_m 3

来自文档

cdf : str 或可调用

如果是字符串,它应该是 scipy.stats 中的发行版的名称。如果 rvs 是字符串,则 cdf 可以为 False 或与 rvs 相同。如果是可调用的,则该可调用用于计算 cdf。

的第二个参数kstest应该是字符串或接受分位数作为输入并返回 CDF 的可调用对象。相反,你正在传递它

stats.f.rvs(dfn,dfd,size=100)
Run Code Online (Sandbox Code Playgroud)

其计算结果为np.ndarray.


一种选择是使用所需的参数构建冻结的 PDF,然后将其.cdf方法作为第二个参数传递给kstest

fdist = stats.f(dfn, dfd)
d, p = stats.kstest(readLengths, fdist.cdf)
Run Code Online (Sandbox Code Playgroud)