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]]
要了解為什么這兩種方法相同,請參閱此處
添加回答
舉報