如何解决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 举报,一经查实,本站将立刻删除。