【问题标题】:In scipy.stats rv_continuous has a fit method to find MLEs, but rv_discrete does not. Why?在 scipy.stats rv_continuous 有一个 fit 方法来查找 MLE,但 rv_discrete 没有。为什么?
【发布时间】:2013-05-03 07:20:40
【问题描述】:

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

【问题讨论】:

    标签: python statistics scipy


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我明白了。感谢您提供有用的答案。首先,如果我可以拒绝或不拒绝 Zipf 作为管理某些数据的候选分布,那么我的问题将向前推进,因此我可能不得不自己尝试编写。有趣的是,Mathematica 给人的印象是能够找到离散分布的 MLE。但我相信 M'matica 函数往往有很多硬编码的特殊情况。
    • Statsmodels 有一个通用的最大似然类,在某些情况下可能很有用,请参阅我的答案groups.google.com/d/msg/pystatsmodels/GZ8kXoFitn0/9ve8GVOwl1kJ MLE 可能适用于 Zipf(我从未看过它)stats.stackexchange.com/questions/6780/…
    猜你喜欢
    • 2011-02-24
    • 2013-05-22
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2022-10-18
    • 2018-05-11
    • 2019-12-11
    • 2013-09-03
    相关资源
    最近更新 更多