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 名称。
来自文档:
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)