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

Мои данные

Я использовал 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)

Я также пробовал glm в r, но я не получаю никакой ошибки, и только одна из функций имеет коэффициент NAN и значение p.

1 Ответ

1 голос
/ 07 апреля 2019

Исходя из первой полученной вами ошибки («Ошибка инвертирования Гессиана»), это связано с неспособностью логистической модели Statsmodels найти максимум функции логарифмического правдоподобия и впоследствии найти решение для ваших данных и наборов зависимых инезависимые переменные, которые вы используете.

При просмотре ваших данных у вас есть много нулей и одинаковых значений, которые могут быть проблематичными для поиска решения.Но поскольку похоже, что вы получили сходимость в 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...