为了账号安全,请及时绑定邮箱和手机立即绑定

计算蟒蛇的比值比

计算蟒蛇的比值比

侃侃无极 2022-09-27 16:04:50
在这里和这里在线检查,我看到有两种方法可以估计Python中的比值比,但结果是不同的。第一种方式:import scipy.stats as statsimport pandas as pddf=pd.DataFrame({'c':['m','m','m','m','f','f','f','f'],'l':[1,1,1,0,0,0,0,1]})ct=pd.crosstab(df.c,df.l)oddsratio, pvalue = stats.fisher_exact(ct)第二种方式:from sklearn.linear_model import LogisticRegressiondf=pd.get_dummies(df,drop_first=True)clf = LogisticRegression()clf.fit(df[['c_m']],df[['l']].values)odds_ratio=np.exp(clf.coef_)第一种方法返回优势比=9,第二种方法返回优势比=1.9。我对优势比的概念相对较新,我不确定如何使用fisher检验和逻辑回归来获得相同的值,在这种情况下,差异是什么以及哪种方法是正确的方法来获得优势比。我将不胜感激任何提示。谢谢。
查看完整描述

1 回答

?
慕尼黑5688855

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]]

要了解为什么这两种方法相同,请参阅此处


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号