计算蟒蛇的比值比

在这里这里在线检查,我看到有两种方法可以估计Python中的比值比,但结果是不同的。

第一种方式:


import scipy.stats as stats

import pandas as pd

df=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 LogisticRegression

df=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检验和逻辑回归来获得相同的值,在这种情况下,差异是什么以及哪种方法是正确的方法来获得优势比。我将不胜感激任何提示。谢谢。


侃侃无极
浏览 135回答 1
1回答

慕尼黑5688855

简短的回答:在这两种情况下,您应该得到相同的赔率9。默认情况下,惩罚在 sklearn 逻辑回归模型中为“L2”,这会扭曲系数值(正则化),因此,如果使用惩罚 ='none,您将获得相同的匹配优势比。所以改为clf = LogisticRegression(penalty='none')并计算odds_ratio长答案:在第一种情况下,奇数比是先前的比值比,由偶然性/交叉制表制成,计算如下图所示df 的列联表将是    l   0   1c       f       3   1m       1   3比值比 = f 的几率为 0 / m 的几率为 0f 的几率为 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 LogisticRegressiondf=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 femaleodds_of_yis_1_for_male = np.exp(clf.intercept_+clf.coef_*0) # logit for maleodds_ratio_2 = odds_of_yis_1_for_female/odds_of_yis_1_for_maleprint(odds_ratio_2)[[9.0004094]]要了解为什么这两种方法相同,请参阅此处
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python