Почему я получаю NAN для p-значений при использовании логической функции statsmodels?

#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

Вы также можете опубликовать этот вопрос на сайте с перекрестной проверкой, так как там вы можете получить больше ответов.