#python-3.x #statsmodels #mlogit
#python-3.x #statsmodels #mlogit
Вопрос:
Я использовал 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:UsersmaryamrAppDataLocalContinuumanaconda3envstensorflowlibsite-packagesstatsmodelsbasemodel.py:488: HessianInversionWarning: Inverting hessian failed, no bse or cov_params available
'available', HessianInversionWarning)
C:UsersmaryamrAppDataLocalContinuumanaconda3envstensorflowlibsite-packagesscipystats_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in greater
return (self.a < x) amp; (x < self.b)
C:UsersmaryamrAppDataLocalContinuumanaconda3envstensorflowlibsite-packagesscipystats_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in less
return (self.a < x) amp; (x < self.b)
C:UsersmaryamrAppDataLocalContinuumanaconda3envstensorflowlibsite-packagesscipystats_distn_infrastructure.py:1821: RuntimeWarning: invalid value encountered in less_equal
cond2 = cond0 amp; (x <= self.a)
Я также пробовал glm в r, но я не получаю никаких ошибок, и только одна из функций имеет коэффициент NAN и p-значение.
Комментарии:
1. Выглядит как
python
код. Пожалуйста, удалитеr
тег?
Ответ №1:
Исходя из первой полученной вами ошибки («Ошибка инвертирования гессиана»), это связано с неспособностью логистической модели Statsmodels найти максимум функции логарифмической вероятности и впоследствии найти решение для ваших данных и наборов зависимых и независимых переменных, которые вы используете.
Глядя на ваши данные, у вас много нулей и идентичных значений, что может быть проблематичным для поиска решения. Но поскольку похоже, что вы добились сходимости в R, вы можете попробовать изменить некоторые параметры Statsmodels модели, чтобы посмотреть, поможет ли это (или сначала попытайтесь выяснить, какие параметры использовал glm
пакет R, и повторить их с помощью Statsmodels).
Например, logit.fit
метод позволяет выбрать один из восьми различных предопределенных методов оптимизации. 'nm'
(Nelder-Mead) рекомендуется другими для таких ситуаций.
Вы можете найти документацию Statsmodels Logit здесь: http://www.statsmodels.org/devel/generated/statsmodels.discrete.discrete_model.Logit.fit.html
Вы также можете опубликовать этот вопрос на сайте с перекрестной проверкой, так как там вы можете получить больше ответов.