我有一个循环,对两个内生变量(因变量)进行自动回归:收入和收入对数。我的代码创建了60个回归模型:30个用于10个省份,3个教育水平用于收入,30个用于10个省份,3个教育水平用于收入日志
我需要将前30个模型(有收入的模型)与第二批30个模型(有收入对数的模型)进行比较,以确定每个模型的最高R平方。最后,根据最高的Rsquared值,我需要在循环结束时保留30个模型
目前,我的代码创建了60个模型,我还无法找到插入另一个循环以识别最高Rsquared的方法。这是我的密码:
modeles = []
for var_dep in [vardep1, vardep2]:
for une_prov in dict_merged.values():
continuer = True
var_indep = []
var_indep.append("cons")
var_indep.append("ecage26")
var_indep.append("ecage262")
while continuer == True:
ma_reg = sm.OLS(une_educ[var_dep], une_educ[var_indep])
mes_resultats = ma_reg.fit()
une_var_non_sig = False
for une_var in var_indep:
if mes_resultats.pvalues[une_var] > 0.05:
une_var_non_sig = True
if une_var_non_sig == True:
variable_problematique = mes_resultats.pvalues.loc[mes_resultats.pvalues == mes_resultats.pvalues.max()].index[0]
print("Je retire la variable: " + variable_problematique)
index_drop = var_indep.index(variable_problematique)
var_indep.pop(index_drop)
if len(var_indep) == 0:
continuer = False
print("Notre technique prédit aucune variable. Misère!")
else:
continuer = False
modeles.append(mes_resultats)
print(mes_resultats.summary())
我写这段代码是为了在列表中保留Rsquared值,但它保留了我所有60个型号的Rsquared值。因此,我无法将前30个与第二批30个进行比较:
for var_dep in [vardep1, vardep2]:
r_squared = []
for un_modele in modeles:
r_squared.append(un_modele.rsquared)
如果您有:
然后
modeles
包含所有60个模型,您无法区分与vardep1
相关的模型和与vardep2
相关的模型您应该创建两个模型列表,它们包含在另一个列表中以保存它们:
现在
all_models[0]
将是与vardep1
和all_models[1]
对应的vardep2
模型列表同样,如果你有
您为
vardep1
和vardep2
创建了两个单独的列表r_squared
,但是在处理完vardep1
之后,您将放弃第一个列表,并用一个新的空列表覆盖r_squared
变量你需要保留第一份清单。最好的方法是再次创建另一个包含两个
r_squared
列表的列表。为了获得每个vardep1
和vardep2
对应的模型列表,可以使用zip
函数成对迭代all_models
列表和[vardep1, vardep2]
列表:现在
r_squared_lists[0]
是一个列表,其中包含与vardep1
对应的值,以及与vardep2
对应的r_squared_lists[1]
相关问题 更多 >
编程相关推荐