如何用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
相关产品推荐
相关产品推荐

