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

如何用Stargazer将statsmodels中HC2稳健标准误模型结果转为LaTeX?

Stargazer兼容HC2稳健标准误回归结果的解决办法

问题描述

使用statsmodels运行HC2稳健标准误回归后,传入Stargazer时触发name 'pd' is not defined错误。排查发现:

  • 普通OLS拟合返回RegressionResultsWrapper对象,Stargazer可兼容
  • 调用get_robustcov_results(cov_type='HC2')返回OLSResults对象,Stargazer无法识别

原代码:

covariates = ['age', 'male', 'income', 'edu']
X = sm.add_constant(df[['t1'] + covariates])
y = df['mean_belief']
model = sm.OLS(y, X).fit().get_robustcov_results(cov_type='HC2')

stargazer = Stargazer([model])

解决方案

1. 转换为RegressionResultsWrapper对象(推荐)

先拟合普通OLS,再获取HC2结果,最后用结果构造RegressionResultsWrapper实例:

from statsmodels.regression.linear_model import RegressionResultsWrapper

# 基础OLS拟合
ols_fit = sm.OLS(y, X).fit()
# 获取HC2稳健标准误结果
hc2_results = ols_fit.get_robustcov_results(cov_type='HC2')
# 构造兼容的Wrapper对象
compatible_model = RegressionResultsWrapper(hc2_results)
# 传入Stargazer
stargazer = Stargazer([compatible_model])

2. 临时修改对象类属性(快速方案)

直接修改OLSResults对象的类标识,让Stargazer识别为兼容类型:

from statsmodels.regression.linear_model import RegressionResultsWrapper

model = sm.OLS(y, X).fit().get_robustcov_results(cov_type='HC2')
# 修改类属性
model.__class__ = RegressionResultsWrapper
# 正常调用Stargazer
stargazer = Stargazer([model])

3. 修复pandas导入问题

name 'pd' is not defined可能是Stargazer内部未正确导入pandas,显式导入即可:

import pandas as pd

# 后续回归和Stargazer代码不变
covariates = ['age', 'male', 'income', 'edu']
X = sm.add_constant(df[['t1'] + covariates])
y = df['mean_belief']
model = sm.OLS(y, X).fit().get_robustcov_results(cov_type='HC2')
stargazer = Stargazer([model])

注意事项

  • 方法1更符合面向对象规范,避免潜在的属性冲突,优先使用
  • 如果方法3能解决pd未定义错误,说明问题并非对象类型不兼容,而是依赖缺失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:05:09