使用Pandas(StatsModels)编写For循环批量执行各州多重回归
批量执行50个州回归的实现方案
完全可以通过循环批量处理全量州的回归运算,相比手动编写50次筛选逻辑,不仅开发效率更高,后续调整模型变量时也只需要修改一处逻辑,避免重复代码出错。
前置修正说明
你提供的单州参考代码存在几处语法问题,需要先调整:
- 文件路径、字符串形式的列名需要用引号包裹
- 公式中包含空格的变量名需要用
Q()包裹,否则会触发语法错误 - 存在重复导入的pandas、statsmodels模块,可以精简导入逻辑
完整批量实现代码
import pandas as pd import openpyxl import statsmodels.formula.api as smf # 读取源数据 df = pd.read_excel("C:/Users/File1.xlsx", sheet_name = 'States') pd.set_option('display.max_columns', None) # 自动获取所有唯一州名,无需手动录入50个州 state_list = df['State'].unique() # 初始化字典存储每个州的拟合结果:key为州名,value为拟合后的模型对象 state_model_results = {} # 遍历每个州执行回归 for state in state_list: # 筛选当前州的数据集 state_df = df[df['State'] == state] # 可选校验:跳过样本量不足的州,避免拟合报错,阈值可根据自变量数量调整(需大于自变量个数) if len(state_df) < 10: print(f"州{state}样本量不足,已跳过计算") continue # 构建回归模型,含空格的变量用Q()包裹 model = smf.ols("Q('Life Expectancy') ~ Race + Age + Weight + C(Pets)", data = state_df) modelfit = model.fit() # 存储当前州的拟合结果 state_model_results[state] = modelfit # 示例:查看缅因州的回归结果 print(state_model_results['Maine'].summary())
扩展:生成各州回归结果汇总表
如果需要批量提取核心指标做对比分析,可以用以下代码生成汇总表并导出:
summary_list = [] for state, model in state_model_results.items(): # 可按需自行增减需要提取的指标 result_item = { "州名": state, "R平方": model.rsquared, "调整后R平方": model.rsquared_adj, "Age回归系数": model.params.get('Age', None), "Age显著性p值": model.pvalues.get('Age', None), "回归整体p值": model.f_pvalue } summary_list.append(result_item) # 转成DataFrame并导出到Excel summary_df = pd.DataFrame(summary_list) summary_df.to_excel("各州预期寿命回归结果汇总.xlsx", index=False)
内容的提问来源于stack exchange,提问作者DayWalker
相关产品推荐
相关产品推荐

