如何将多组statsmodels回归的参数估计值转为DataFrame列
线性回归结果DataFrame重构方案
核心修改逻辑
- 预先定义7个参数列:常数项+6个解释变量,替代原有的「Linear Regression」和「Predictors」列
- 遍历每个回归模型,仅填充该模型包含的参数估计值,未纳入的变量用
NaN标记 - 完整保留原有诊断统计量列(如R²、调整R²、F统计量等)
具体代码实现(基于statsmodels)
假设你已通过statsmodels生成所有变量组合的回归模型列表all_models,且原结果DataFrame为results_df,按以下步骤修改:
1. 定义参数列名
# 替换为你实际的解释变量名称 param_cols = ['Intercept', 'X1', 'X2', 'X3', 'X4', 'X5', 'X6']
2. 初始化新结果DataFrame
import pandas as pd import numpy as np # 提取原有的诊断统计量列(排除可读性差的两列) diagnostic_cols = [col for col in results_df.columns if col not in ['Linear Regression', 'Predictors']] # 创建新DataFrame,整合参数列与诊断列 new_results_df = pd.DataFrame(columns=param_cols + diagnostic_cols)
3. 遍历模型填充数据
for idx, model in enumerate(all_models): # 提取当前模型的系数字典 model_coeffs = model.params.to_dict() # 生成参数行:存在的系数取值,不存在的设为NaN param_row = {col: model_coeffs.get(col, np.nan) for col in param_cols} # 获取原诊断统计量数据 diagnostic_row = results_df.loc[idx, diagnostic_cols].to_dict() # 合并参数与诊断数据,添加到新DataFrame new_results_df.loc[idx] = {**param_row, **diagnostic_row}
4. 优化显示(可选)
# 重置索引 new_results_df = new_results_df.reset_index(drop=True) # 设置浮点数显示精度,提升可读性 pd.set_option('display.float_format', lambda x: '%.4f' % x)
注意事项
- 若你的解释变量名称不是
X1-X6,直接替换param_cols中的对应值即可 NaN标记未纳入模型的变量,便于后续筛选不同变量组合的模型结果- 原诊断统计量完全保留,不会丢失任何分析指标
内容的提问来源于stack exchange,提问作者jack homareau
相关产品推荐
相关产品推荐

