statsmodels отношение шансов логистической регрессии

Мне интересно, как я могу получить отношение шансов из подходящих моделей логистической регрессии в statsmodels Python.

>>> import statsmodels.api as sm
>>> import numpy as np
>>> X = np.random.normal(0, 1, (100, 3))
>>> y = np.random.choice([0, 1], 100)
>>> res = sm.Logit(y, X).fit()
Optimization terminated successfully.
         Current function value: 0.683158
         Iterations 4
>>> res.summary()
<class 'statsmodels.iolib.summary.Summary'>
"""
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                      y   No. Observations:                  100
Model:                          Logit   Df Residuals:                       97
Method:                           MLE   Df Model:                            2
Date:                Sun, 05 Jun 2016   Pseudo R-squ.:                0.009835
Time:                        23:25:06   Log-Likelihood:                -68.316
converged:                       True   LL-Null:                       -68.994
                                        LLR p-value:                    0.5073
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1            -0.0033      0.181     -0.018      0.985        -0.359     0.352
x2             0.0565      0.213      0.265      0.791        -0.362     0.475
x3             0.2985      0.216      1.380      0.168        -0.125     0.723
==============================================================================
"""
>>> 

person Donbeo    schedule 05.06.2016    source источник
comment
Некоторая информация здесь: blog.yhat.com/posts/logistic-regression- and-python.html   -  person BrenBarn    schedule 06.06.2016
comment
По данным сайта OR=np.exp(res.params). Я не уверен на 100%, что эта формула верна   -  person Donbeo    schedule 06.06.2016
comment
Ваш вопрос касается математики того, как получить отношение шансов, или программирования того, как получить его из статистических моделей. См., Например, самый конец этой страницы, где говорится Конечным результатом всех математических манипуляций является то, что отношение шансов можно вычислить, возведя е в степень логистического коэффициента.   -  person BrenBarn    schedule 06.06.2016
comment
Дело в том, что я не уверен, что это верно для многомерной регрессии. т.е. если используется более одной входной переменной.   -  person Donbeo    schedule 06.06.2016
comment
Если ваш вопрос касается задействованной статистики, вам, вероятно, лучше задать вопрос на перекрестной проверке.   -  person BrenBarn    schedule 06.06.2016
comment
Некоторое время назад я делал stats.stackexchange.com/questions/208136/. Вот почему я думаю, что формула неверна.   -  person Donbeo    schedule 06.06.2016
comment
@Donbeo Я не уверен, что означает этот ответ. oddsratios - это exp (params) в Logit, и вы можете получить доверительный интервал для oddsratios путем преобразования конечной точки, просто используя exp (confint ()), где confint - для оцененных параметров.   -  person Josef    schedule 06.06.2016
comment
см., например, eform stata.com/manuals14/rglm.pdf Stata, толкование которого для Logit, Poisson и т.п. применяется еще к нескольким другим моделям, основанным на преобразовании exp, например. коэффициент опасности, IIRC.   -  person Josef    schedule 06.06.2016
comment
Вы можете подтвердить OR=exp(coef) в многомерной логистической регрессии?   -  person Donbeo    schedule 06.06.2016
comment
Да, это то, что я говорю, подтверждено (потому что exp делает его мультипликативным, поэтому другие члены сокращаются в соотношении). Тем не менее, отношение шансов обычно используется для двоичных регрессоров 0-1, в противном случае вам придется смотреть на интерпретацию эффекта изменения единицы или эффекта наклона непрерывной переменной.   -  person Josef    schedule 06.06.2016


Ответы (2)


Вы можете получить отношение шансов с помощью:

np.exp(res.params)

Чтобы также получить доверительные интервалы (источник):

params = res.params
conf = res.conf_int()
conf['Odds Ratio'] = params
conf.columns = ['5%', '95%', 'Odds Ratio']
print(np.exp(conf))

Отказ от ответственности: я только что собрал комментарии к вашему вопросу.

person lincolnfrias    schedule 10.12.2017

Не уверен в статистических моделях, чтобы сделать это в sklearn:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)

logisticRegr = LogisticRegression()
logisticRegr.fit(x_train, y_train)

df=pd.DataFrame({'odds_ratio':(np.exp(logisticRegr.coef_).T).tolist(),'variable':x.columns.tolist()})
df['odds_ratio'] = df['odds_ratio'].str.get(0)

df=df.sort_values('odds_ratio', ascending=False)
df
person Odysseus Ithaca    schedule 08.01.2021