【问题标题】:calculating odds ratio in python在python中计算优势比
【发布时间】:2020-07-16 07:14:06
【问题描述】:

herehere 中在线查看我看到在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 检验和逻辑回归来获得相同的值,有什么区别以及哪种方法是在这种情况下获得优势比的正确方法。 我会很感激任何提示。谢谢。

【问题讨论】:

    标签: python logistic-regression scipy.stats


    【解决方案1】:

    简答:

    在这两种情况下,您都应该得到相同的优势比 9。

    默认情况下,sklearn逻辑回归模型中的penality是'L2',它扭曲了系数的值(正则化),所以如果你使用penality='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

    在第二种情况下,您通过拟合逻辑回归模型获得优势比的估计值。如果您使用 penality = 'none',您将得到优势比 = 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]]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 2017-05-14
      相关资源
      最近更新 更多