Python自动进行logistic回归并绘制关于OR的森林图

首先定义如下函数:

import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.api as sm
from scipy.stats import norm
import numpy as np
from plotnine import *
"""因变量y必须是int:0或1"""
def logistic_regression(y,x,df):
    model = smf.glm(formula = f'{y} ~ {x}',
                    data = df,
                    family=sm.families.Binomial()).fit()  
    print(model.summary(), end='\n\n\n')
    stat = pd.DataFrame({'p': model.pvalues, # series:每个β的p值
                         # 'beta': model.params, # series:β
                         # 'beta_lower_ci': model.conf_int().iloc[:, 0], #df:β的95%CI
                         # 'beta_upper_ci': model.conf_int().iloc[:, 1], #df:β的95%CI                        
                         'OR': np.exp(model.params), # series:OR
                         'OR_lower_ci': np.exp(model.params - norm.ppf(0.975)*model.bse),
                         'OR_upper_ci': np.exp(model.params + norm.ppf(0.975)*model.bse)}) 
    stat['sig'] = stat.apply(lambda x : "*" if x['p']<0.05 else "no_sig",axis=1)
    stat= stat.sort_values('OR', ascending=True)                            
    print(stat)
    """绘制森林图:OR"""
    forest_df = stat.drop("Intercept")\
                    .reset_index()\
                    .rename(columns={'index': 'independent_var'})\
                    .sort_values('OR', ascending=False)
    print(ggplot(f
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值