Python:如何在statsmodels回归结果摘要中不显示虚拟变量?
如何在Statsmodels回归摘要中隐藏虚拟变量
我明白你想在回归结果里只展示核心自变量(比如x1、x2),而把虚拟变量的结果隐藏起来,这里有两种实用的方法,结合你的代码来演示:
方法1:使用summary_col的regressor_order参数指定要显示的变量
这个方法最直接,完美适配你已经在使用summary_col的场景:
import statsmodels.api as sm import statsmodels.formula.api as smf from statsmodels.iolib.summary2 import summary_col import numpy as np import pandas as pd # 生成模拟数据 x1 = pd.Series(np.random.randn(2000)) x2 = pd.Series(np.random.randn(2000)) aa_milne_arr = ['a', 'b', 'c', 'd', "e", "f", "g", "h", "i"] dummy = pd.Series(np.random.choice(aa_milne_arr, 2000)) depen = pd.Series(np.random.randn(2000)) df = pd.DataFrame({"y": depen, "x1": x1, "x2": x2, "dummy": dummy}) # 拟合带虚拟变量的回归(用C()处理分类变量) model = smf.ols('y ~ x1 + x2 + C(dummy)', data=df).fit() # 指定只显示x1、x2和截距项(如果不需要截距可以去掉) # 注意:截距的默认名称是'Intercept',模型里包含的话记得加上 cols_to_show = ['Intercept', 'x1', 'x2'] summary = summary_col([model], regressor_order=cols_to_show, stars=True) # 打印结果 print(summary)
简单解释:regressor_order参数会强制摘要只展示你指定的变量,自动隐藏其他所有变量(这里就是全部虚拟变量),同时模型的整体统计量(比如R²、F值等)会完整保留,完全不影响结果的严谨性。
方法2:手动过滤回归结果后生成自定义摘要
如果你不想用summary_col,而是想单独修改单个模型的summary()输出,可以手动提取核心变量的结果,再构建自定义摘要:
# 拟合模型后,提取需要的变量的统计结果 filtered_params = model.params[cols_to_show] filtered_bse = model.bse[cols_to_show] filtered_tvalues = model.tvalues[cols_to_show] filtered_pvalues = model.pvalues[cols_to_show] # 手动构建系数结果表格 summary_df = pd.DataFrame({ 'Coefficient': filtered_params, 'Std. Error': filtered_bse, 't-value': filtered_tvalues, 'P>|t|': filtered_pvalues }) # 添加显著性标记 def add_stars(pval): if pval < 0.001: return '***' elif pval < 0.01: return '**' elif pval < 0.05: return '*' else: return '' summary_df['Sig.'] = summary_df['P>|t|'].apply(add_stars) # 打印自定义结果,同时补充模型整体统计量 print("回归系数结果(隐藏虚拟变量):") print(summary_df) print("\n模型整体统计量:") print(f"R²: {model.rsquared:.4f}") print(f"调整R²: {model.rsquared_adj:.4f}") print(f"F统计量: {model.fvalue:.4f}") print(f"P(F): {model.f_pvalue:.4f}")
这个方法灵活性更高,适合你需要完全自定义输出格式的场景,不过需要手动处理显著性标记和整体统计量的展示。
两种方法都能帮你达到隐藏虚拟变量的目的,优先推荐第一种,因为它保留了Statsmodels原生摘要的格式,操作也更简洁。
内容的提问来源于stack exchange,提问作者user27074
相关产品推荐
相关产品推荐

