我正在尝试使用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方法中有一些尝试以获得良好的起始值,但这并不总是有效。
我通常尝试的几种可能性
默认情况下,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] 删除。
我来说两句