比较两个模型,找出R平方最大的模型

2024-09-25 08:37:48 发布

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

我有一个循环,对两个内生变量(因变量)进行自动回归:收入和收入对数。我的代码创建了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)

Tags: in模型trueforindexvarvariableappend
1条回答
网友
1楼 · 发布于 2024-09-25 08:37:48

如果您有:

modeles = []
for var_dep in [vardep1, vardep2]:
    for une_prov in dict_merged.values():
        # ...
        modeles.append(mes_resultats)

然后modeles包含所有60个模型,您无法区分与vardep1相关的模型和与vardep2相关的模型

您应该创建两个模型列表,它们包含在另一个列表中以保存它们:

all_models = []
for var_dep in [vardep1, vardep2]:
    modeles = []
    for une_prov in dict_merged.values():
        # ...
        modeles.append(mes_resultats)
    all_models.append(modeles)

现在all_models[0]将是与vardep1all_models[1]对应的vardep2模型列表

同样,如果你有

for var_dep in [vardep1, vardep2]:
    r_squared = []
    for un_modele in modeles:
       r_squared.append(un_modele.rsquared)

您为vardep1vardep2创建了两个单独的列表r_squared,但是在处理完vardep1之后,您将放弃第一个列表,并用一个新的空列表覆盖r_squared变量

你需要保留第一份清单。最好的方法是再次创建另一个包含两个r_squared列表的列表。为了获得每个vardep1vardep2对应的模型列表,可以使用zip函数成对迭代all_models列表和[vardep1, vardep2]列表:

r_squared_lists = []
for modeles, var_dep in zip(all_models, [vardep1, vardep2]):
    r_squared = []
    for un_modele in modeles:
       r_squared.append(un_modele.rsquared)
    # now save r_squared
    r_squared_lists.append(r_squared)

现在r_squared_lists[0]是一个列表,其中包含与vardep1对应的值,以及与vardep2对应的r_squared_lists[1]

相关问题 更多 >