多循环中的Python方差分析测试

2024-06-24 11:56:26 发布

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

在我的数据框架中,我几乎没有分类变量和连续变量。我想对分类变量和连续变量的每个组合进行方差分析(Anova_lm)。到目前为止,我只能为1个目标类别创建循环,所有连续变量都作为预测值,如下所示:

我的原始数据集pima包含以下列:

GENDER - categorical AGE - continuous EDUCATION - categorical INCOME - categorical RATE_INTEREST - continuous SPD - categorical TPD - categorical AMT_ANNUITY - continuous DOWNPAYMPERC - continuous

从数据集中我定义了pima_cont,它只包含连续变量。 根据数据集,我还定义了pima_categ,它只包含分类变量

keys = []
tables = []
for variable in pima_cont.columns:
    model = ols('{} ~ EDUCATION'.format(variable), data=pima).fit()
    anova_table = sm.stats.anova_lm(model, typ=2)

    keys.append(variable)
    tables.append(anova_table)

df_anova = pd.concat(tables, keys=keys, axis=0)
print(df_anova)

在这里,我必须手动编辑语句的这一部分中的目标model = ols('{} ~ EDUCATION'.format(variable), data=pima).fit()

有没有提示如何实现自动化,以便Python向我显示相同的输出,但将所有分类变量作为目标

非常感谢! 亚当


Tags: 数据目标tablesmodel定义分类keysvariable
1条回答
网友
1楼 · 发布于 2024-06-24 11:56:26

您需要一个多索引,只需使用下面的2 x 2示例:

import pandas as pd
import statsmodels.api as sm
import numpy as np
from statsmodels.formula.api import ols

pima = pd.DataFrame({'EDUCATION':np.random.choice(['A','B','C'],100),
                     'GENDER':np.random.choice(['M','F'],100),
                    'AGE':np.random.randn(100),
                    'RATE_INTEREST':np.random.randn(100)})

为可能的组合制作多索引:

index = pd.MultiIndex.from_product([['AGE','RATE_INTEREST'],['EDUCATION','GENDER']],
                                   names=['cont', 'cat'])
index

MultiIndex([(          'AGE', 'EDUCATION'),
            (          'AGE',    'GENDER'),
            ('RATE_INTEREST', 'EDUCATION'),
            ('RATE_INTEREST',    'GENDER')],
           names=['cont', 'cat'])

然后与上面的内容类似:

tables = []
for cont_var,cat_var in index:
    model = ols('{} ~ {}'.format(cont_var,cat_var), data=pima).fit()
    anova_table = sm.stats.anova_lm(model, typ=2)

    tables.append(anova_table)

df_anova = pd.concat(tables, keys=index, axis=0)

最后一个表如下所示:

                                      sum_sq    df         F    PR(>F)
AGE           EDUCATION EDUCATION   0.358636   2.0  0.196421  0.821993
                        Residual   88.554164  97.0       NaN       NaN
              GENDER    GENDER      0.258418   1.0  0.285659  0.594226
                        Residual   88.654382  98.0       NaN       NaN
RATE_INTEREST EDUCATION EDUCATION   0.021586   2.0  0.012325  0.987752
                        Residual   84.942705  97.0       NaN       NaN
              GENDER    GENDER      0.656981   1.0  0.763684  0.384315
                        Residual   84.307310  98.0       NaN       NaN

相关问题 更多 >