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

Statsmodels SVAR(Python)无法添加外生变量问题求助

Statsmodels SVAR模型添加外生变量的解决方法

问题核心

statsmodels的SVAR类构造函数没有直接提供exog参数来指定外生变量,但可以通过先拟合包含外生变量的VAR模型,再基于该VAR结果初始化SVAR的方式绕开这个限制。你遇到的SVARResults' object has no attribute 'exog'错误,本质是因为IRF的蒙特卡洛模拟需要调用VAR模型时,找不到外生变量的引用。

修改后的代码实现

import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.vector_ar.svar_model import SVAR

# 设定AB约束矩阵
A = np.asarray([[1,0,0,0,0],['E',1,0,0,0], ['E','E',1,0,0], ['E','E','E',1,0],['E','E','E','E',1]])
B = np.asarray([['E',0,0,0,0],[0,'E',0,0,0], [0,0,'E',0,0], [0,0,0,'E',0],[0,0,0,0,'E']])

endogenous_vars = ["r","dyca", "infl", "dm","dex"]
exogenous_vars=["dpcm"]

# 第一步:先拟合包含外生变量的VAR模型
var_model = sm.tsa.VAR(reg_data[endogenous_vars], exog=reg_data[exogenous_vars])
var_results = var_model.fit(maxlags=12)

# 第二步:基于VAR结果初始化SVAR模型
svar_model = SVAR(var_results, svar_type='AB', A=A, B=B)
svar_results = svar_model.fit(solver='bfgs')

# 计算脉冲响应并绘图
irf = svar_results.irf(periods=48)
irf.plot()

response=['dyca','dm','dex']
for i in response:
    irf.plot_cum_effects(impulse='r', response=i, plot_stderr=True, stderr_type='mc', repl=1500)

关键说明

  • 先拟合VAR时传入外生变量,VAR结果会保留exog属性,后续SVAR初始化时会继承这个属性
  • SVAR类接受已拟合的VAR结果作为输入(而非直接传入原始内生数据),这样就能间接引入外生变量的信息
  • 蒙特卡洛模拟计算IRF置信区间时,会正确读取继承的exog属性,避免报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:14:51