【问题标题】:Statsmodels - Negative Binomial doesn't converge while GLM does convergeStatsmodels - 负二项式不收敛,而 GLM 确实收敛
【发布时间】:2017-06-06 19:14:16
【问题描述】:

我正在尝试使用 Python 的 statsmodels 包进行负二项式回归。使用 GLM 例程时,模型估计很好,即

model = smf.glm(formula="Sales_Focus_2016 ~ Sales_Focus_2015  + A_Calls + A_Ed", data=df, family=sm.families.NegativeBinomial()).fit()
model.summary()

但是,GLM 例程不估计 alpha,即色散项。我尝试直接使用负二项式例程(它确实估计了 alpha),即

nb = smf.negativebinomial(formula="Sales_Focus_2016 ~ Sales_Focus_2015 + A_Calls + A_Ed", data=df).fit()
nb.summary()

但这并不收敛。相反,我得到了消息:

Warning: Desired error not necessarily achieved due to precision loss.
     Current function value: nan
     Iterations: 0
     Function evaluations: 1
     Gradient evaluations: 1

我的问题是:

这两个例程是否使用不同的估计方法? 有没有办法让 smf.NegativeBinomial 例程使用与 GLM 例程相同的估计方法?

【问题讨论】:

    标签: python pandas statsmodels non-linear-regression


    【解决方案1】:

    discrete.NegativeBinomial 在 statsmodels 或 scipy 优化器中使用牛顿法(默认)。主要问题是指数均值函数很容易导致溢出问题或大梯度和粗麻布问题,当我们离最优还很远时。在 fit 方法中有一些尝试来获得良好的起始值,但这并不总是有效。

    我通常会尝试的几种可能性

    • 检查没有回归量大的值,例如重新缩放以使最大值低于 10
    • 使用 method='nm' Nelder-Mead 作为初始优化器,并在一些迭代或收敛后切换到 newton 或 bfgs。
    • 尝试提出更好的起始值(参见下面关于 GLM 的示例)

    默认情况下,GLM 使用迭代重加权最小二乘法 IRLS,它仅适用于一个参数系列,即它采用给定的色散参数。所以同样的方法不能直接用于离散 NegativeBinomial 中的完整 MLE。

    GLM 负二项式仍然指定完整的 loglike。因此,可以使用 GLM.fit() 对色散参数进行网格搜索,以估计每个色散参数值的平均参数。这应该相当于相应的离散 NegativeBinomial 版本(nb2?我不记得了)。它也可以用作离散版本的 start_params。

    在 statsmodels 主版本中,现在有一个连接允许任意 scipy 优化器而不是硬编码的优化器。 scipy 最近获得了 trust region newton 方法,将来会获得更多,这应该比 statsmodels 中的简单牛顿方法适用于更多的案例。 (但是,目前最有可能不适用于离散 NegativeBinomial,我刚刚发现了一个可能的问题 https://github.com/statsmodels/statsmodels/issues/3747

    【讨论】:

    • 太棒了!我会进一步调查
    • 看起来discrete.NegativeBimonial 例程没有method 参数
    • 这是fit方法中的一个选项fit(start_params=None, method='bfgs' ...)。它缺少文档字符串,但这与 Poisson 和其他离散模型相同。
    • 谢谢 - 我不知道 .fit() 的参数。然而,它并没有解决问题。我达到了最大迭代次数。
    • maxiter=5000, maxfun=5000fit**kwargs 被发送到 scipy.optimizer fmin_xxx,因此我们可以更改默认优化器选项。
    猜你喜欢
    • 2018-06-17
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多