微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

For循环用于众多回归模型

如何解决For循环用于众多回归模型

我有一个看起来像这样的数据库。种族,年龄和保险变量是分类变量,症状和Covid_pos变量是[0/1]。

ID   RACE_GROUP_N Age_Group_N... Covid_pos  Asymptomatic  Fever  Cough ...
0     1               0            1             0        1      0
1     0               2            0             0        0      1
2     3               3            1             1        0      0
3     2               1            1             0        1      0
4     3               2            0             1        0      0
5     0               4            1             0        1      0

我想为每个症状变量和分类变量,年龄,种族和保险运行单独的回归模型。对于每种症状,每种回归都相同;因此,例如,回归模型当前如下所示:

asy_model = smf.logit("Covid_pos ~  Asymptomatic  + C(RACE_GROUP_N,Treatment(0))+ C(Age_Group_N,Treatment(0))+C(Insurance_Type_Group,Treatment(0))",data = df_merged2).fit()
asy_model_odds = pd.DataFrame(np.exp(asy_model.params),columns= ['OR'])
asy_model_odds['z-value']= asy_model.pvalues
asy_model_odds[['2.5%','97.5%']] = np.exp(asy_model.conf_int())
asy_model_odds

fev_model = smf.logit("Covid_pos ~  Fever+ C(RACE_GROUP_N,data = df_merged2).fit()
fev_model_odds = pd.DataFrame(np.exp(fev_model .params),columns= ['OR'])
fev_model_odds ['z-value']= fev_model .pvalues
fev_model_odds [['2.5%','97.5%']] = np.exp(fev_model .conf_int())
fev_model_odds

问题陈述1:我想创建一个for循环,这样我就不必为每个症状变量编写15次以上的代码

问题陈述2:我希望for循环的输出使用OR和95%CI表示结果。

Symptom            Odds Ratio   LCB   UCB 
Asymptomatic      2.607       1.981 3.430
Fever             1.899       1.226 2.941  

解决方法

不确定为什么要分开症状并进行单独的回归(因为logit回归的目的恰恰是确定所有功能/症状的重要性)。

无论如何,您都可以使用名称和模型来构建字典

all_models = {'name1': model_object1,'name2': ... }

然后循环将

all_odds = dict()
for model_name,model in all_models.items():
    odds = pd.DataFrame(np.exp(model.params),columns=['OR'])
    odds['z-value'] = model.pvalues
    odds[['2.5%','97.5%']] = np.exp(model.conf_int())
    all_odds['model_name'] = odds

最后,您可以像访问任何词典一样访问各个赔率的赔率,或者可以构建主数据框

all_odds = pd.concat(all_odds.values(),keys=all_odds.keys())

更新

我不记得statsmodels的语法,但是要填充all_models字典,您可以使用类似

all_models = dict()
all_models['asymptomatic'] = smf.logit(...).fit()
all_models['fever'] = smf.logit(...).fit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。