You need to enable JavaScript to run this app. 使用Pandas(StatsModels)编写For循环批量执行各州多重回归
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 09:45:02