许多回归模型的For循环

2024-09-28 23:40:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的数据库。种族、年龄和保险变量是分类变量,症状和新冠病毒位置变量是[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, Treatment(0))+ C(Age_Group_N, Treatment(0))+C(Insurance_Type_Group, Treatment(0))",
        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  

Tags: pos症状agemodelnpgroupfeverrace
1条回答
网友
1楼 · 发布于 2024-09-28 23:40:56

不确定为什么要分离症状并运行单独的回归(因为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()

相关问题 更多 >