我有一些大尺寸的数据集,它们本质上是离散的。我想将该数据拟合到一些分布函数中,以了解该数据中的异常值。但我无法找到一些变量,如“p”值和要实现的数据方差。有没有一种通用的方法来识别这些变量值?
问问题
207 次
2 回答
1
我认为您正在寻找卡方拟合优度检验。它能够测试数据样本是否来自具有特定分布的总体,并适用于二项式和泊松等离散分布。有关如何在 Python 中执行此分析的更多信息,也可以在此处找到:执行卡方拟合优度检验。
>>> from scipy.stats import chisquare
>>> chisquare(f_obs=[16, 18, 16, 14, 12, 12], f_exp=[16, 16, 16, 16, 16, 8])
(3.5, 0.62338762774958223)
要提出预期的分布,您可以使用:
>>> from scipy.stats import binom, poisson
>>> n, p = 5, 0.4
>>> mean, var, skew, kurt = binom.stats(n, p, moments='mvsk')
>>> f_binom_exp = binom.pmf(range(n + 1), n, p)
>>> mu = 0.6
>>> mean, var, skew, kurt = poisson.stats(mu, moments='mvsk')
>>> f_poisson_exp = poisson.pmf(range(n + 1), p)
如果您想选择尽可能适合您的数据的分布,您可以尝试通过使用分布的参数来优化拟合优度。
您的问题对我来说并不完全清楚,所以恐怕我目前无法提供进一步的帮助,但我认为至少这里描述了大多数导入实用程序。祝你好运!
于 2019-10-01T12:11:51.447 回答
0
怎么样:
def poisson(k, lamb):
return (lamb ** k / factorial(k)) * np.exp(-lamb)
entries, bin_edges, patches = plt.hist(data_list, density=True, bins=100, range=[0, 50])
# calculate binmiddles
bin_middles = 0.5 * (bin_edges[1:] + bin_edges[:-1])
# fit with curve_fit
bin_middles_filtered = [bin_middles[i] for i in range(len(entries)) if entries[i] > 0.001]
parameters, cov = curve_fit(poisson, bin_middles, entries)
这为您提供了泊松函数及其参数
于 2019-09-26T14:38:07.630 回答