Краткий ответ:
В обоих случаях вы должны получить одинаковое соотношение шансов равное 9.
По умолчанию, штраф в Lle в Sklearn Logisti c регрессионная модель, которая искажает значение коэффициентов (регуляризация), поэтому, если вы используете penality = 'none, вы получите такое же соотношение шансов соответствия.
, поэтому измените на
clf = LogisticRegression(penalty='none')
и вычислите коэффициент odds_ratio
Длинный ответ:
В первом случае, коэффициент Одда является коэффициентом предыдущего шанса и составляется из таблицы непредвиденных обстоятельств / перекрестной таблицы и рассчитывается, как показано ниже / шансы на то, что m равно 0
шансы на то, что f равно 0 = P (f = 0) / P (f = 1) = (3/4) / (1/4)
шансы где m равно 0 = P (m = 0) / P (m = 1) = (1/4) / (3/4)
коэффициент шансов = ((3/4) / (1/4 )) / ((1/4) / (3/4)) = 9
Во втором случае вы получаете оценку отношения шансов путем подбора логистической c регрессионной модели. Вы получите соотношение шансов = 9, если вы используете пенальти = 'нет' По умолчанию штраф в оценке логистической регрессии равен 'L2'.
from sklearn.linear_model import LogisticRegression
df=pd.get_dummies(df,drop_first=True)
clf = LogisticRegression(penalty='none')
clf.fit(df[['c_m']],df[['l']].values)
odds_ratio=np.exp(clf.coef_)
print(odd_ratio)
array([[9.0004094]])
Вы также можете получить отношение шансов другим методом, что также приводит к тому же отношению шансов. см.
#Method 2:
odds_of_yis_1_for_female = np.exp(clf.intercept_+clf.coef_*1) #logit for female
odds_of_yis_1_for_male = np.exp(clf.intercept_+clf.coef_*0) # logit for male
odds_ratio_2 = odds_of_yis_1_for_female/odds_of_yis_1_for_male
print(odds_ratio_2)
[[9.0004094]]
Чтобы понять, почему оба метода одинаковы, см. здесь