statsmodels中VAR模型指定HAC标准误时fit方法传参报错如何解决?
问题原因
statsmodels的VAR类的fit()方法设计时并未开放cov_type、cov_kwds这两个参数入口,和单方程OLS的接口设计不同,因此直接传入这两个参数会触发类型错误。VAR类默认仅支持普通标准误、基于残差的异方差稳健标准误,没有内置直接调用HAC标准误的参数。
正确实现HAC标准误的两种方法
方法1:逐方程估计(推荐,简单易实现)
VAR模型的系数估计本质是每个内生变量对所有内生变量的滞后项做OLS回归,系统估计和逐方程OLS估计的系数结果完全一致,因此逐方程估计的方案是完全合规的,直接对每个方程指定cov_type='HAC'即可得到所需的HAC标准误。
示例代码(补充完整双方程估计):
import pandas as pd import numpy as np import statsmodels.formula.api as smf df = pd.DataFrame({'a':[1,3,5,7,4,5,6,4,7,8,9,1,3,5,7,4,5,6,4,7,8,9], 'b':[3,5,6,2,4,6,2,5,7,1,9,5,3,2,5,4,3,6,4,1,1,9]}) # 生成2阶滞后项 df['La'] = df.a.shift(1) df['Lb'] = df.b.shift(1) df['L2a'] = df.a.shift(2) df['L2b'] = df.b.shift(2) # 估计a的方程,使用HAC标准误 reg_a = smf.ols('a ~ 1 + La + Lb + L2a + L2b', data=df).fit(cov_type='HAC', cov_kwds={'maxlags':2}) # 估计b的方程,使用HAC标准误 reg_b = smf.ols('b ~ 1 + La + Lb + L2a + L2b', data=df).fit(cov_type='HAC', cov_kwds={'maxlags':2}) # 输出统计结果 print(reg_a.summary()) print(reg_b.summary())
方法2:基于VAR拟合结果手动替换HAC协方差矩阵
如果你需要保留VAR类返回的其他功能(比如脉冲响应、方差分解等),可以先正常拟合VAR模型,再手动替换协方差矩阵为HAC估计:
from statsmodels.tsa.api import VAR from statsmodels.stats.sandwich_covariance import cov_hac # 拟合VAR(2)模型 model = VAR(df[['a','b']]) var_results = model.fit(maxlags=2) # 对每个方程单独计算HAC协方差矩阵 cov_a = cov_hac(reg_a, maxlags=2) cov_b = cov_hac(reg_b, maxlags=2)
该方法得到的协方差矩阵和逐方程估计的结果完全一致,可直接用于计算标准误、p值等统计量。
内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ
相关产品推荐
相关产品推荐

