为了账号安全,请及时绑定邮箱和手机立即绑定

通过 pandas 数据帧的单向 Anova 循环 - 生成一个表

通过 pandas 数据帧的单向 Anova 循环 - 生成一个表

偶然的你 2022-05-19 18:48:47
我有一个包含 16 列的 pandas 数据框,其中 14 列代表我使用statsmodels. 我的数据框看起来像这样(简化):ID    Cycle_duration    Average_support_phase    Average_swing_phase    Label1               23.1                     34.3                   47.2        12               27.3                     38.4                   49.5        13               25.8                     31.1                   45.7        14               24.5                     35.6                   41.9        1...到目前为止,这就是我正在做的事情:import pandas as pdimport statsmodels.api as smfrom statsmodels.formula.api import olsdf = pd.read_csv('features_total.csv')for variable in df.columns:    model = ols('{} ~ Label'.format(variable), data=df).fit()    anova_table = sm.stats.anova_lm(model, typ=2)    print(anova_table)产生:    sum_sq    df         F    PR(>F)Label     0.124927   2.0  2.561424  0.084312Residual  1.731424  71.0       NaN       NaN              sum_sq    df         F    PR(>F)Label      62.626057   2.0  4.969491  0.009552Residual  447.374788  71.0       NaN       NaN              sum_sq    df         F    PR(>F)Label      62.626057   2.0  4.969491  0.009552Residual  447.374788  71.0       NaN       NaN我正在为执行 Anova 的每个变量获取单独的表格打印。基本上我想要的是打印一个带有汇总结果的表格,或者是这样的:                             sum_sq     df         F    PR(>F)          Cycle_duration   0.1249270   2.0  2.561424  0.084312                Residual   1.7314240  71.0       NaN       NaN   Average_support_phase   62.626057   2.0  4.969491  0.009552                Residual  447.374788  71.0       NaN       NaN     Average_swing_phase   62.626057   2.0  4.969491  0.009552                Residual  447.374788  71.0       NaN       NaN我已经看到了一个问题,因为这种方法总是在实际值之前输出“标签”命名法,而不是有问题的变量名(就像我上面显示的那样,我希望在每个“残差”上方都有变量名) . 这种statsmodels方法甚至可能吗?我对python相当陌生,如果这与statsmodels无关,请原谅 - 在这种情况下,请向我说明我应该尝试什么。
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

您可以收集表格并在循环结束时将它们连接起来。这种方法将创建一个分层索引,但我认为这样会更清楚一点。像这样的东西:


keys = []

tables = []

for variable in df.columns:

    model = ols('{} ~ Label'.format(variable), data=df).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)

有点相关,我还建议纠正多重比较。这更像是一个统计建议而不是编码建议,但考虑到您正在执行大量统计测试,考虑其中一项测试导致误报的概率是有意义的。


查看完整回答
反对 回复 2022-05-19
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信