统计模型-GLM收敛时负二项式不收敛

史蒂夫·莫恩

我正在尝试使用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优化器中使用newton方法(默认)。主要问题是,当我们距离最优值还很远时,指数均值函数很容易导致溢出问题或大梯度和粗麻布问题。fit方法中有一些尝试以获得良好的起始值,但这并不总是有效。

我通常尝试的几种可能性

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

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

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

在statsmodels主版本中,现在存在一个连接,以允许使用任意scipy优化器,而不是经过硬编码的优化器。scipy最近获得了信任区域牛顿法,并且在将来会得到更多,比统计模型中的简单牛顿法更适用于更多情况。(但是,目前最有可能不适用于离散NegativeBinomial,我只是发现了一个可能的问题https://github.com/statsmodels/statsmodels/issues/3747

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章