Python中ANOVA批量执行循环实现及PR(>F)结果筛选方法
批量三因素ANOVA实现代码
首先确保你已经导入了所需的依赖库:
import pandas as pd import statsmodels.formula.api as smf import statsmodels.api as sm
以下是完整实现代码:
# 定义需要分析的因变量列 columns=['FES_1', 'FES_2', 'FES_3', 'FES_4', 'FES_5', 'FES_6', 'FES_7', 'FES_T', 'FES_S', 'IPAQ_1a', 'IPAQ_1b', 'IPAQ_2a', 'IPAQ_2b', 'IPAQ_3a', 'IPAQ_3b', 'IPAQ_4a', 'IPAQ_4b', 'IPAQ_S', 'TMT_timeA', 'TMT_errorsA', 'TMT_timeB', 'TMT_errorsB', 'Best_1', 'Best_2', 'Best_3l', 'Best_3r', 'Best_4', 'Best_5', 'Best_6l', 'Best_6r', 'Best_7', 'Best_8', 'Best_9', 'Best_10', 'Best_11', 'Best_12', 'Best_13', 'Best_14', 'Best_T', 'COPmeanX', 'COPmeanY', 'COPstdX', 'COPstdY', 'COParea', 'COPveloX', 'COPveloY', 'COPmaxX', 'COPmaxY', 'COPrmsX', 'COPrmsY', 'PDFcopx15', 'PDFcopy15', 'PDFcopx2', 'PDFcopy2', 'COPx01', 'COPy01', 'rateCOPx01', 'rateCOPy01', 'COPxmax', 'COPymax', 'Fall'] # 初始化空表存储符合条件的结果 filter_result = pd.DataFrame(columns=['因变量', '效应项', 'sum_sq', 'df', 'F值', 'PR(>F)']) # 遍历所有列批量执行ANOVA for dep_col in columns: # 动态生成回归公式 formula = f"{dep_col} ~ C(AgeGroup) + C(Surface) + C(Vision) + C(AgeGroup)*C(Surface)*C(Vision)" try: # 拟合模型生成ANOVA表 model = smf.ols(formula, data=data).fit() aov_table = sm.stats.anova_lm(model, typ=2) # 过滤掉残差项,保留PR(>F)小于0.1的结果 valid_rows = aov_table[(aov_table.index != "Residual") & (aov_table["PR(>F)"] < 0.1)] # 把符合条件的结果追加到总表 for effect_name, row_data in valid_rows.iterrows(): filter_result.loc[len(filter_result)] = [ dep_col, effect_name, row_data["sum_sq"], row_data["df"], row_data["F"], row_data["PR(>F)"] ] except Exception as e: print(f"列 {dep_col} 分析失败,错误信息:{str(e)}") # 输出最终过滤结果 print(filter_result)
补充说明
- 代码加入了异常捕获逻辑,避免某一列数据存在缺失/异常导致整个循环中断
- 若需要调整显著性阈值,直接修改
aov_table["PR(>F)"] < 0.1中的0.1即可 - 最终输出的结果会自动标注对应的因变量列名和效应项,仅保留符合显著性要求的记录
内容的提问来源于stack exchange,提问作者Daniel M M
相关产品推荐
相关产品推荐

