2017-06-05 114 views
0

在Python StatsModel模塊中運行分位數迴歸後出現錯誤。該錯誤是以下幾點:StatsModel分位數迴歸ValueError


ValueError        Traceback (most recent call last) 
<ipython-input-221-3547de1b5e0d> in <module>() 
16 model = smf.quantreg(fit_formula, train) 
17 
---> 18 fitted_model = model.fit(0.2) 
19 
20 #fitted_model.predict(test) 

in fit(self, q, vcov, kernel, bandwidth, max_iter, p_tol, **kwargs) 
177    resid = np.abs(resid) 
178    xstar = exog/resid[:, np.newaxis] 
--> 179    diff = np.max(np.abs(beta - beta0)) 
180    history['params'].append(beta) 
181    history['mse'].append(np.mean(resid*resid)) 

ValueError: operands could not be broadcast together with shapes (178,) (176,) 

我想它可能是通過不斷的特點造成的,所以我刪除這些,但我仍然得到了同樣的錯誤。我想知道是什麼原因。我的代碼如下:

quantiles = np.arange(.05, .99, .1) 

cols = train.columns.tolist()[1:-2] 
fit_formula = '' 
for c in cols: 
    fit_formula = fit_formula + ' + ' + c 
fit_formula = 'revenue ~ ' + train.columns.tolist()[0] + fit_formula 

model = smf.quantreg(fit_formula, train) 

fitted_model = model.fit(0.2) 

回答

2

我覺得你的設計矩陣是奇異的,即這並不適用於你的數據:

np.linalg.matrix_rank(model.exog) == model.exog.shape[1]

從看代碼猜測:該參數,β,與

exog_rank = np_matrix_rank(self.exog) 
beta = np.ones(exog_rank) 

其具有不同比lengtht從輔助加權最小二乘所述β-初始化迭代循環regressi開啓,並且收斂檢查失敗。迭代重新加權的步驟使用廣義逆,pinv,由於奇異設計矩陣,它不會引發異常。

根據您的回溯(178,)(176,),您仍然需要刪除兩個共線列。

(這是一個錯誤:它要麼應該提高對單一的情況適當的異常,或者貫穿了PINV處理它。)

+0

感謝,這是完全回答我的問題。在刪除了不太嚴格的截斷相關特徵後,我能夠通過它。非常感謝! –

+0

此行爲改變時的Bug問題是https://github.com/statsmodels/statsmodels/issues/3746 – user333700

+0

很酷,謝謝。我會繼續跟蹤這張票。 –