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

使用statsmodels公式做多元OLS回归:摘要显示z值而非t值的问题

解决OLS回归HAC稳健标准误下显示t值而非z值的问题

问题原因

  1. 参数名错误:你代码中使用的use_T=True无效,statsmodels的OLS.fit()方法对应参数是小写的use_t,大写T的参数名未被识别,导致设置不生效。
  2. 即使正确设置use_t=True,当指定cov_type='HAC'时,statsmodels默认会切换到z统计量(基于渐近正态性假设),忽略use_t参数。

可行解决方法

方法一:使用get_robustcov_results显式指定t分布

先拟合普通OLS模型,再通过get_robustcov_results计算HAC稳健标准误,同时强制启用t分布统计量:

import statsmodels.formula.api as smf

# 定义OLS模型
model = smf.ols("gr_gdp_pc ~ ln_gdp + gr_cap_pc + gr_rent_pc + lag_index_all_z", data=df)
# 拟合基础OLS模型
base_result = model.fit()
# 计算HAC稳健标准误并指定使用t分布
robust_result = base_result.get_robustcov_results(
    cov_type='HAC',
    cov_kwds={'maxlags': 1},
    use_t=True
)
# 输出包含t值的回归摘要
print(robust_result.summary())

该方法是官方推荐方式,通过get_robustcov_results的use_t参数直接控制统计量类型。

方法二:手动替换统计量(兼容旧版本)

如果方法一未生效,可手动计算t值和对应p值,替换结果对象的属性:

import statsmodels.formula.api as smf
import scipy.stats as stats

# 拟合带HAC稳健标准误的模型
robust_result = smf.ols(
    "gr_gdp_pc ~ ln_gdp + gr_cap_pc + gr_rent_pc + lag_index_all_z",
    data=df
).fit(cov_type='HAC', cov_kwds={'maxlags':1})

# 计算t值:系数 / 稳健标准误
t_values = robust_result.params / robust_result.bse
# 计算自由度:样本量 - 参数总数(截距+自变量个数)
df = robust_result.nobs - robust_result.df_model - 1
# 计算双尾p值
p_values = 2 * (1 - stats.t.cdf(abs(t_values), df=df))

# 替换结果对象的统计量属性
robust_result.tvalues = t_values
robust_result.pvalues = p_values
robust_result.use_t = True  # 让摘要显示"t"标签而非"z"

# 输出修改后的摘要
print(robust_result.summary())

内容的提问来源于stack exchange,提问作者taraamcl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:42:35