如何在R中为VAR对象替换Newey West标准误以开展方差分解
解决方案
首先明确两个核心前提:
- 预测误差方差分解(FEVD)的点估计仅由VAR模型的系数估计值决定,与标准误选择无关,仅当你需要计算FEVD的置信区间、做显著性检验时,才需要替换为Newey-West稳健标准误
sandwich包的NeweyWest()函数默认适配单方程lm对象,VAR模型是多方程联合估计的集合,需要遍历每个方程单独替换协方差矩阵
依赖包
你需要提前加载两个包:
library(vars) # 用于VAR建模和方差分解 library(sandwich) # 用于计算Newey-West稳健标准误
操作步骤
1. 拟合基础VAR模型
和你现有代码一致:
var1 <- VAR(Data_Var, lag.max=1, ic="HQ", type = "const")
2. 替换每个方程的协方差矩阵为Newey-West估计
遍历VAR模型的每个单方程结果,替换默认的OLS协方差矩阵:
# lag参数可根据你的残差序列相关阶数调整,这里和你原有参数一致设为1 for (eq in names(var1$varresult)) { var1$varresult[[eq]]$vcov <- NeweyWest(var1$varresult[[eq]], lag = 1, prewhite = TRUE, adjust = FALSE) }
3. 计算方差分解
直接调用vars包的fevd()函数即可,若需要输出带置信区间的结果,指定n.ahead和ci参数即可,函数会自动调用你替换后的稳健协方差矩阵计算置信区间:
# 无置信区间的点估计结果 fevd_result <- fevd(var1, n.ahead = 10) # 带95%稳健置信区间的结果 fevd_result_ci <- fevd(var1, n.ahead = 10, ci = 0.95)
常见问题说明
如果运行时提示NeweyWest()找不到适配VAR对象的方法,是因为你没有单独遍历每个方程处理,VAR的每个子结果varresult[[i]]都是标准lm对象,可直接传入NeweyWest()计算。
内容的提问来源于stack exchange,提问作者JJ1214
相关产品推荐
相关产品推荐

