如何在R中预测SVAR模型?vars包SVAR预测报错解决问询
解决vars包中SVAR模型调用predict()报错的问题
这个报错我太熟悉了——本质是vars包的predict()函数根本没为SVAR模型(svarest类对象)写专门的处理方法,它只认VAR模型的varest类对象,直接传SVAR对象进去就会因为结构不兼容报错。下面给你两种解决思路,按需选择:
思路1:直接用原VAR模型做预测(最简便)
SVAR只是在VAR的基础上给残差施加了结构识别约束,点预测的结果和对应的VAR模型完全一致。所以如果你只是需要预测序列的均值,直接用你一开始估计的VAR对象z来调用predict()就行:
# 用原VAR模型z做预测,结果和SVAR的点预测等价 pred_y <- predict(z, n = 1) print(pred_y)
思路2:手动计算结构相关的预测值(如果需要结构冲击/变量)
要是你需要的是结构冲击或者结构变量的预测,就得基于SVAR的估计参数手动推导:
- 先从SVAR对象里提取已估计的结构矩阵(Amat或Bmat)
- 用VAR模型得到预测残差,再转换为结构冲击
- 按需推导结构变量的预测值
示例代码(假设你用的是A约束型SVAR):
# 提取SVAR估计得到的A矩阵 A_est <- y$A # 获取VAR模型的预测结果(包含残差预测) pred_result <- predict(z, n = 1) # 提取预测残差(这里以第一个变量为例,根据你的变量调整索引) e_pred <- pred_result$fcst[[1]]$residuals # 计算结构冲击的预测值:u = A * e u_pred <- A_est %*% e_pred print(u_pred)
为什么会报错?
再给你补个原理:vars包的predict()有专门处理varest类(VAR模型返回对象)的方法,但对svarest类(SVAR模型返回对象)没有适配。当你把SVAR对象传给predict()时,R会调用默认的通用方法,而这个方法无法解析SVAR的列表结构,就会抛出(list) object cannot be coerced to type 'double'的错误。
内容的提问来源于stack exchange,提问作者Quinn
相关产品推荐
相关产品推荐

