StatsModel 分位数回归 ValueError
StatsModel quantile regression ValueError
在 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)
我认为您的设计矩阵是奇异的,即这不适用于您的数据:
np.linalg.matrix_rank(model.exog) == model.exog.shape[1]
从代码中猜测:参数 beta 是为迭代循环初始化的
exog_rank = np_matrix_rank(self.exog)
beta = np.ones(exog_rank)
其长度与辅助加权最小二乘回归的 beta 不同,收敛检查失败。迭代重新加权的步骤使用广义逆 pinv,它不会因为奇异设计矩阵而引发异常。
根据您的回溯,(178,) (176,),您仍然有两个共线列需要删除。
(这是一个错误:要么它应该为单一情况引发适当的异常,要么在整个过程中使用 pinv 处理它。)
在 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)
我认为您的设计矩阵是奇异的,即这不适用于您的数据:
np.linalg.matrix_rank(model.exog) == model.exog.shape[1]
从代码中猜测:参数 beta 是为迭代循环初始化的
exog_rank = np_matrix_rank(self.exog)
beta = np.ones(exog_rank)
其长度与辅助加权最小二乘回归的 beta 不同,收敛检查失败。迭代重新加权的步骤使用广义逆 pinv,它不会因为奇异设计矩阵而引发异常。
根据您的回溯,(178,) (176,),您仍然有两个共线列需要删除。
(这是一个错误:要么它应该为单一情况引发适当的异常,要么在整个过程中使用 pinv 处理它。)