StatsModel分位数回归ValueError

时间:2017-06-05 23:08:13

标签: python numpy regression statsmodels quantile

我在Python StatsModel模块中运行分位数回归后出错了。错误如下:

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)

1 个答案:

答案 0 :(得分:2)

我认为您的设计矩阵是单数的,即这不适用于您的数据:

res.header("Access-Control-Allow-Origin", "*"); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.header("Access-Control-Allow-Headers", "Authorization"); console.log(req.headers['authorization']);

通过查看代码进行猜测:使用

为迭代循环初始化参数beta
np.linalg.matrix_rank(model.exog) == model.exog.shape[1]

与辅助加权最小二乘回归的β长度不同,收敛检查失败。迭代重加权步骤使用广义逆,pinv,由于奇异的设计矩阵,它不会引发异常。

根据您的回溯(178,)(176,),您仍然需要删除两个共线列。

(这是一个错误:它应该为单个案例提出一个适当的例外,或者用pinv处理它。)