我正在使用Landau发行版(https://en.wikipedia.org/wiki/Landau_distribution),我正在尝试使用scipy.stats.kstest来获得适合度统计数据。
由于Landau发行版是scipy的非标准发行版,因此我使用ROOT(CERN C ++包)导入作为stats.kstest文档的自定义可调用CDF。我还有一个测量/经验数据的一维数组。
目前,我对我的kstest函数有以下定义:
def get_ks_test(fit_info):
coeffs, erfc_bool = fit_info[0], fit_info[4]
(mu,sigma,A_l,A_e) = coeffs
def Lcdf(x):
return [A_l*Math.landau_cdf(i,sigma,mu) for i in x]
def integrand(x):
return A_e*erfc((x-mu)/sigma)
def total_cdf(x):
return Lcdf(x) + quad(integrand,0,x)
scatter_data = pdf_fit_return[3]
return kstest(scatter_data,total_cdf)
此处Lcdf
和integrand
合并形成我的可调用CDF函数。问题出现在kstest的第一个参数,即“rvs”数组scatter_data
。据我了解,“rvs”参数应该是一系列与所讨论的分布相匹配的观察结果。但是在源代码中,“rvs”作为参数发送到“cdf”。这对我没有意义; CDF不应该是x的函数,而不是它应该匹配的数据吗?
当我将scatter_data
作为kstest的第一个参数传递时,它会尝试将这些值插入total_cdf
,当该函数应该在x中取一个参数时。我不知道我是否在这里或者没有理解rvs / cdf的用法,但是kstest函数的设计方式对我来说似乎是倒退的。
我希望能够提供最新的数据,我的预期发行版(可调用的CDF),但我在网上看到的所有示例都包含或标准发行版(普通版,测试版等)。