python - Python - 多个循环中的 Anova 测试
问题描述
在我的数据框中,我几乎没有分类变量和连续变量。我想对分类变量和连续变量的每种组合执行 Anova 分析 (anova_lm)。到目前为止,我只能为 1 个目标分类创建循环,其中所有连续变量作为预测变量,如下所示:
我有这些列的原始数据集 pima:
GENDER - 分类 AGE - 连续 EDUCATION - 分类 INCOME - 分类 RATE_INTEREST - 连续 SPD - 分类 TPD - 分类 AMT_ANNUITY - 连续 DOWNPAYMPERC - 连续
从数据集中我定义了 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 会向我显示相同的输出,但将我所有的分类变量作为目标?
非常感谢!亚当
解决方案
您需要一个 multiIndex,只需使用下面的 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
推荐阅读
- java - 我可以在另一个 GUI 中单独单击项目时更新库存吗?
- c++ - 尽管使用 C++14,但不允许在 Visual Studio 2019 中初始化类数组
- ios - 如何在 iOS 的 Safari 应用程序中打开上一个选项卡
- java - SonarQube 密码块链接 IV 应该是不可预测的
- powershell - Enable-CsUser 不在 MicrosoftTeams 模块中
- python - (Django) 删除函数不会从数据库中删除数据
- docker - 从 github 操作服务登录私有存储库中的 github 包注册表
- r - 我可以在 bookdown 的书末同时包含每章的参考书目和主参考书目吗?
- apache-kafka - 名称包含“/”时无法删除连接器
- c++ - 如何在没有未定义的外部依赖的情况下将 c++ 文件编译成 .o 文件