在scipy.stats中,rv_continuous有一个查找MLE的拟合方法,但rv_discrete没有。为什么?

时间:2013-05-08 22:22:39

标签: python statistics scipy

我想找到一些可能由离散分布控制的数据的最大似然估计。但是在scipy.stats中,只有表示连续分布的类才具有这样的拟合函数。表示离散分布的类不是什么原因?

1 个答案:

答案 0 :(得分:9)

简短的回答:因为据我所知,没有人为它编写代码,甚至没有尝试过。

更长的答案:我不知道使用通用最大似然法的离散模型能够在多大程度上得到连续分布,这对于许多但不是全部都有效。

大多数离散分布都对参数有很强的限制,而且大多数离散分布都需要特定于分布的拟合方法

>>> [(f, getattr(stats, f).shapes) for f in dir(stats) if isinstance(getattr(stats, f), stats.distributions.rv_discrete)]
[('bernoulli', 'pr'), ('binom', 'n, pr'), ('boltzmann', 'lamda, N'), 
 ('dlaplace', 'a'), ('geom', 'pr'), ('hypergeom', 'M, n, N'), 
 ('logser', 'pr'), ('nbinom', 'n, pr'), ('planck', 'lamda'), 
 ('poisson', 'mu'), ('randint', 'min, max'), ('skellam', 'mu1,mu2'), 
 ('zipf', 'a')]

statsmodels提供了一些离散模型,其中参数也可以依赖于一些解释变量。其中大多数(如广义线性模型)需要链接函数来将参数值限制为有效范围,例如概率的间隔(0,1),或计数模型中的参数大于零。

然后二项式中的“n”参数和其他一些参数必须是整数,这使得无法使用scipy.optimize中常用的连续最小值。

一个好的解决方案是为某人添加分发特定的拟合方法,这样我们至少可以使用更简单的方法。