我使用statsmodels构建逻辑回归,如下所示:
X = np.copy(train_data)
X = sm_.add_constant(X)
model = sm.Logit(train_y, X)
result = model.fit(method='bfgs', maxiter=10000)
p_values[i-1, j-1, :] = result.pvalues
logistic_Coefficients[i-1, j-1, :] = result.params
但我得到以下错误,我的p值都是NAN:
C:\Users\maryamr\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\statsmodels\base\model.py:488: HessianInversionWarning: Inverting hessian failed, no bse or cov_params available
'available', HessianInversionWarning)
C:\Users\maryamr\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\scipy\stats\_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in greater
return (self.a < x) & (x < self.b)
C:\Users\maryamr\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\scipy\stats\_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in less
return (self.a < x) & (x < self.b)
C:\Users\maryamr\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\scipy\stats\_distn_infrastructure.py:1821: RuntimeWarning: invalid value encountered in less_equal
cond2 = cond0 & (x <= self.a)
我也尝试过gl中的gl,但我没有得到任何错误,只有其中一个功能有NAN系数和p值。
基于您收到的第一个错误(“反转Hessian失败”),这是由于Statsmodels逻辑模型无法找到对数似然函数的最大值,随后为您的数据和依赖变量和独立变量集找到解决方案正在使用。
查看您的数据,您有很多0和相同的值,这可能会有助于找到解决方案。但由于看起来你在R中获得了收敛,你可以尝试改变模型的一些Statsmodels参数,看它是否有帮助(或者首先尝试找出R的glm
包使用的参数,并用Statsmodels复制它们)。
例如,logit.fit
方法允许您选择八种不同的预定义优化方法之一。其他人推荐'nm'
(Nelder-Mead)用于此类情况。
您可以在这里找到Statsmodels Logit文档:http://www.statsmodels.org/devel/generated/statsmodels.discrete.discrete_model.Logit.fit.html
您也可以在Cross Validated网站上发布此问题,因为您可能会在那里得到更多回复。