gpt4 book ai didi

python - Statsmodels - 负二项式不收敛,而 GLM 确实收敛

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:59 47 4
gpt4 key购买 nike

我正在尝试使用 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 例程相同的估计方法?

最佳答案

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

我通常尝试的几种可能性

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

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

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

在 statsmodels 主版本中,现在有一个连接允许任意 scipy 优化器而不是硬编码的优化器。 scipy最近获得了trust region newton methods, future 会得到更多,这应该比statsmodels中的simple newton method适用于更多的情况。(但是,很可能目前对于离散 NegativeBinomial 不起作用,我刚刚发现了一个可能的问题 https://github.com/statsmodels/statsmodels/issues/3747 )

关于python - Statsmodels - 负二项式不收敛,而 GLM 确实收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398081/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com