我实现了KS测试来测试哪些分布更适合在一起。此时,我给出了CDF作为输入,因为标准的KS测试涉及计算函数的CDF之间的最大差。我只是想知道这是否是正确的方法。或者我应该使用PDFS作为输入?统计值和p值对我来说似乎很好。有了KS检验的临界值,我可以选择我不应该拒绝的假设检验。
代码示例
gammafit = stats.gamma.fit(h4)
pdf_gamma = stats.gamma.pdf(lnspc, *gammafit)
cdf_gamma = stats.gamma.cdf(lnspc, *gammafit)
plt.plot(lnspc, pdf_gamma, label="Gamma")
gamma_kstest999 = stats.ks_2samp(np.cumsum(n4), cdf_gamma)
您应该使用pdfs作为输入。ks2samp将pdf作为输入,并在代码中创建cdf。根据功能源代码:
data1 = np.sort(data1)
data2 = np.sort(data2)
n1 = data1.shape[0]
n2 = data2.shape[0]
data_all = np.concatenate([data1, data2])
cdf1 = np.searchsorted(data1, data_all, side='right') / (1.0*n1)
cdf2 = np.searchsorted(data2, data_all, side='right') / (1.0*n2)
d = np.max(np.absolute(cdf1 - cdf2))
# Note: d absolute not signed distance
en = np.sqrt(n1 * n2 / float(n1 + n2))
try:
prob = distributions.kstwobign.sf((en + 0.12 + 0.11 / en) * d)
except:
prob = 1.0
return Ks_2sampResult(d, prob)
cdf1和cdf2变量表示产生的累积分布。