1 回答
TA贡献1848条经验 获得超2个赞
简短的回答:
在这两种情况下,您应该得到相同的赔率9。
默认情况下,惩罚在 sklearn 逻辑回归模型中为“L2”,这会扭曲系数值(正则化),因此,如果使用惩罚 ='none,您将获得相同的匹配优势比。
所以改为
clf = LogisticRegression(penalty='none')
并计算odds_ratio
长答案:
在第一种情况下,奇数比是先前的比值比,由偶然性/交叉制表制成,计算如下图所示
df 的列联表将是
l 0 1
c
f 3 1
m 1 3
比值比 = f 的几率为 0 / 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
在第二种情况下,您通过拟合逻辑回归模型获得优势比的估计值。如果您使用惩罚=“无”,您将获得赔率比= 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]]
要了解为什么这两种方法相同,请参阅此处
添加回答
举报
