15

我想为一些可能受离散分布控制的数据找到最大似然估计量。但是在 scipy.stats 中,只有代表连续分布的类才有适合的函数来做到这一点。代表离散分布的类没有的原因是什么?

4

1 回答 1

11

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

更长的答案:我不知道使用通用最大似然法的离散模型可以走多远,因为连续分布适用于许多但不是全部。

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

>>> [(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 中通常的连续最小化器。

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

于 2013-05-09T03:13:40.810 回答