使用statsmodels公式做多元OLS回归:摘要显示z值而非t值的问题
解决OLS回归HAC稳健标准误下显示t值而非z值的问题
问题原因
- 参数名错误:你代码中使用的
use_T=True无效,statsmodels的OLS.fit()方法对应参数是小写的use_t,大写T的参数名未被识别,导致设置不生效。 - 即使正确设置
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
相关产品推荐
相关产品推荐

