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

Python中SVAR模型拟合报错:形状不匹配问题排查

SVAR模型构建报错排查与正确实现方案

报错原因

你遇到的shape mismatch错误核心是SVAR输入对象错误:你传入的svarinput是协方差矩阵,但statsmodels的SVAR类要求输入是已拟合的VAR模型对象(即VAR.fit()的返回结果),而非直接传入协方差矩阵。这导致模型无法获取时序数据、滞后阶数等必要信息,进而引发维度不匹配问题。

正确构建流程

由于你的变量存在协整关系(已通过Johansen检验确认),有两种合规的结构模型构建路径:

路径1:基于差分平稳序列构建SVAR

先对非平稳变量做差分得到平稳序列,再拟合VAR后构建SVAR:

import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.api import VAR, SVAR

# 假设diff_data是原始数据差分后的平稳数据集
var_model = VAR(diff_data)
var_fit = var_model.fit(maxlags=1, ic='aic')  # 对应你选定的滞后阶数1

# 定义A型约束矩阵(与你原设定一致)
A = np.array([
    [1, 0, 0, 0, 0, 0],  # Housing Index
    [0, 1, 0, 0, 0, 0],  # Policy Rate
    [0, 1, 1, 0, 0, 0],  # Mortgage Rates
    [0, 0, 0, 1, 0, 0],  # Inflation
    [0, 0, 0, 0, 1, 0],  # Household Debt
    [0, 0, 0, 0, 0, 1]   # Covered Bonds
])

# 构建并拟合SVAR
svar_model = SVAR(var_fit, svar_type='A', A=A)
svar_results = svar_model.fit()

路径2:构建结构误差修正模型(SVECM,更适合协整变量)

当变量存在协整关系时,SVECM是更严谨的选择,直接基于已拟合的VECM构建:

from statsmodels.tsa.vector_ar.vecm import VECM, SVECM

# 假设original_data是原始非平稳数据集,coint_rank为Johansen检验得到的协整秩
vecm_model = VECM(original_data, k_ar_diff=1, coint_rank=你的协整秩)
vecm_fit = vecm_model.fit()

# 定义约束矩阵
A = np.array([
    [1, 0, 0, 0, 0, 0],
    [0, 1, 0, 0, 0, 0],
    [0, 1, 1, 0, 0, 0],
    [0, 0, 0, 1, 0, 0],
    [0, 0, 0, 0, 1, 0],
    [0, 0, 0, 0, 0, 1]
])

# 构建并拟合SVECM
svecm_model = SVECM(vecm_fit, svar_type='A', A=A)
svecm_results = svecm_model.fit()

结果可视化方法

脉冲响应函数(IRF)

# 生成10期脉冲响应
irf = svar_results.irf(10)

# 绘制所有变量的脉冲响应图
irf.plot(orth=False)  # orth=False使用结构冲击,True为正交化冲击

# 单独绘制住房指数对担保债券冲击的响应
irf.plot(impulse=5, response=0)  # impulse=5对应担保债券,response=0对应住房指数

预测误差方差分解(FEVD)

# 生成10期方差分解
fevd = svar_results.fevd(10)

# 绘制方差分解图
fevd.plot()

# 查看住房指数的方差分解详情
print(fevd.decomp[:, :, 0])  # 维度:期数 × 冲击变量 × 被解释变量(住房指数)

关键注意事项

  • 约束矩阵必须符合经济理论:你的当前约束中,抵押贷款利率受政策利率影响是合理的,但所有约束都需要理论支撑,避免随意设定。
  • 协整秩必须匹配:使用SVECM时,协整秩需与Johansen检验结果一致,否则模型结果失真。
  • 平稳性处理:原始变量非平稳且存在协整时,不可直接用原始数据拟合VAR,必须用VECM或差分后的平稳序列。

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

相关产品推荐
方舟 Agent Plan

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

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