2017-06-05 9 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,) 

私はそれはおそらく、一定の機能によって引き起こされたことを考えていたので、私はそれらを削除し、私はまだ同じエラーを得ました。私は原因が何か不思議です。私のコードは以下の通りです:、パラメータ、ベータ版を:

コードを見てから推測

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

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

私は、これはあなたのデータのために保持していない、つまり、あなたの計画行列は、単数形だと思います

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

補助ループ加重最小二乗回帰からのベータより異なる長さを持つ反復ループに対して初期化されますオンになり、コンバージェンスチェックが失敗します。反復的に再重み付けされたステップは、特異な設計行列のために例外を発生させない一般化された逆、pinvを使用した。

トレースバック(178、)(176)に基づいて、削除する必要がある2つの同一線上の列があります。

は(それはバグです:それは特異なケースのための適切な例外を発生させ、または全体PINVでそれを処理する必要がありますどちらか)

+0

おかげで、これは完全に私の質問に答えました。相関の低いフィーチャを削除した後、私はそれを実行することができました。どうもありがとう! –

+0

この動作が変更されるタイミングを追跡するためのバグの問題はhttps://github.com/statsmodels/statsmodels/issues/3746 – user333700

+0

です。ありがとうございます。私はチケットを追跡していきます。 –

関連する問題