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

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,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:27:03