2017-06-06 259 views
2

我正在嘗試使用Python的statsmodels包進行負二項迴歸。使用GLM例程即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例程不估計α,色散項當模型估計細。我試圖直接使用Negative Binomial例程(估計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例程相同的估計方法?

回答

1

discrete.NegativeBinomial在statsmodels或scipy優化器中使用牛頓方法(默認)。主要問題是指數均值函數很容易導致溢出問題或者當我們仍然遠離最優值時由於大梯度和粗麻布問題。在fit方法中有一些嘗試獲得良好的起始值,但這並不總是奏效。

幾種可能性,我通常會盡量

  • 檢查沒有迴歸有較大的值,例如重新調整以使其最大值低於10
  • 使用method ='nm'作爲初始優化器的Nelder-Mead,並且在一些迭代或收斂後切換到newton或bfgs。
  • 嘗試拿出更好的初始值(例如參見下面關於GLM)

GLM默認迭代重加權最小二乘使用,IRLS,這是唯一的標準爲一個參數的家庭,即它需要分散參數給定。所以同樣的方法不能直接用於離散NegativeBinomial中的完整MLE。

GLM負二項式仍指定完整的類似log。因此,可以使用GLM.fit()對散佈參數進行網格搜索,以估計散佈參數每個值的平均參數。這應該相當於相應的離散NegativeBinomial版本(nb2?我不記得)。它也可以用作離散版本的start_params。

在statsmodels主版本中,現在有一個連接允許任意scipy優化器而不是硬編碼的優化器。最近scipy獲得了信任域牛頓方法,將來會得到更多的信息,這應該比statsmodels中的簡單牛頓方法更適用於更多的情況。 (但是,最有可能目前不適用於離散NegativeBinomial,我剛剛發現了一個可能的問題https://github.com/statsmodels/statsmodels/issues/3747

+0

太棒了!我將進一步調查 –

+0

看起來好像'discrete.NegativeBimonial'例程沒有'method'參數 –

+0

這是'fit'方法中的一個選項,fit(start_params = None,method ='bfgs')。 ..)'。它缺少文檔字符串,但這與泊松和其他離散模型相同。 – user333700