You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:41:49