SVAR模型拟合报错:'SVARResults'对象无'k_exog_user'属性求助
问题解决:SVARResults 缺失 k_exog_user 属性错误
错误原因
你定义了外生变量exogenous_vars=["CPI"]但未将其传入SVAR模型初始化函数,导致模型结果对象SVARResults缺少统计外生变量数量的k_exog_user属性,进而在生成摘要时触发报错。此外,旧版本statsmodels的SVAR模块可能存在此类属性缺失的bug。
解决方案
- 正确传递外生变量
在创建SVAR模型时,通过exog参数传入外生变量数据集。 - 升级statsmodels版本
确保使用0.14.x及以上的稳定版本,修复早期版本的SVAR属性缺失问题。 - 验证约束矩阵格式
确认A、B矩阵的符号约束('E'表示待估计参数)符合当前statsmodels版本的要求。
修正后的完整代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.api import SVAR # 假设GDP、CPI_q等变量已提前处理完成 data_q = pd.DataFrame({'GDP': GDP, 'CPI': CPI_q, 'Interest_rate': Interest_rate_q, 'Unemployment_rate': Unemployment_rate_q, 'Yearly_inflation': Yearly_inflation_q}).dropna() # 定义SVAR约束矩阵 A = np.array([ [1, 0, 0, 0], ['E', 1, 0, 0], ['E', 'E', 1, 0], ['E', 'E', 'E', 1] ]) B = np.array([ [1, 0, 0, 0], ['E', 1, 0, 0], ['E', 'E', 1, 0], ['E', 'E', 'E', 1] ]) endogenous_vars = ['GDP', 'Interest_rate', 'Unemployment_rate', 'Yearly_inflation'] exogenous_vars=["CPI"] # 关键修正:传入外生变量exog参数 svar_model = SVAR(data_q[endogenous_vars], exog=data_q[exogenous_vars], svar_type='AB', A=A, B=B) svar_results = svar_model.fit(2) print(svar_results.summary(), '\n') # 绘制脉冲响应函数 irf_svar = svar_results.irf(10) irf_svar.plot(orth=True) plt.show()
额外排查点
- 如果仍报错,尝试简化约束矩阵(例如用数值0替代部分
'E'),验证模型基础功能是否正常,再逐步添加约束。 - 确认内生变量数量与A、B矩阵维度完全匹配(本例中4个内生变量对应4x4矩阵,符合要求)。
内容的提问来源于stack exchange,提问作者Oriol
相关产品推荐
相关产品推荐

