我有一个包含 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)
有点相关,我还建议纠正多重比较。这更像是一个统计建议而不是编码建议,但考虑到您正在执行大量统计测试,考虑其中一项测试导致误报的概率是有意义的。
添加回答
举报
0/150
提交
取消