在R中对VAR模型执行BG检验时出现错误求助
解决VAR模型残差BG检验报错问题
问题根源
lmtest包的bgtest函数默认需要接收回归模型对象或带明确公式的输入,直接传入VAR模型的残差数据框会因缺少模型的terms属性而报错。另外,VAR是多方程模型,需要针对每个方程的残差分别处理。
解决方案1:使用vars包自带的序列相关检验函数(推荐)
vars包提供了serial.test函数,专门用于VAR模型的序列相关检验,无需手动处理残差:
library(vars) library(lmtest) # 原VAR模型代码不变 v1 <- data.frame(PRG, VYS, r, GDP) lag_order <- VARselect(v1, lag = 2, type = "const")$selection[1] model <- VAR(v1, p = lag_order, type = "const") # 直接对VAR模型执行BG检验 serial_test_result <- serial.test(model, lags.pt = lag_order, type = "BG") print(serial_test_result)
解决方案2:手动对每个方程残差执行BG检验
如果一定要用bgtest,需要为每个残差序列构造回归模型(残差对自身滞后项回归):
# 提取VAR模型残差 res <- residuals(model) # 遍历每个残差序列,逐一执行BG检验 bg_results <- lapply(colnames(res), function(var_name) { # 生成残差的滞后项 lagged_residuals <- embed(res[[var_name]], lag_order + 1)[, -1] # 拟合残差与滞后项的回归模型 lm_fit <- lm(res[[var_name]][-(1:lag_order)] ~ ., data = data.frame(lagged_residuals)) # 执行BG检验 bgtest(lm_fit, order = lag_order) }) # 为结果命名,方便查看 names(bg_results) <- colnames(res) # 输出所有检验结果 lapply(bg_results, print)
内容的提问来源于stack exchange,提问作者Filip Emmer
相关产品推荐
相关产品推荐

